Skip to content

Commit

Permalink
+ Uniendo *Consola en *
Browse files Browse the repository at this point in the history
+ Borra bien.
  • Loading branch information
karv committed Jan 10, 2015
1 parent 2ab0653 commit 2642b48
Show file tree
Hide file tree
Showing 8 changed files with 252 additions and 300 deletions.
8 changes: 4 additions & 4 deletions Serpentina/ConsoleExten.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ static class ConsoleExt
/// <param name="c">Catarter.</param>
/// <param name="Loc">Location.</param>
/// <param name="clr">Color</param>
public static void Poner (char c, Structs.Par<int, int> Loc, Opciones.Color clr)
public static void Poner (Structs.Par<int, int> Loc, Opciones.Color clr)
{
Console.BackgroundColor = clr.bgc;
Console.ForegroundColor = clr.fgc;
Console.CursorLeft = Loc.x;

Console.CursorTop = Loc.y;
Console.Write (c);
Console.Write (clr.chr);
}
public static void Poner (char c, int x, int y, Opciones.Color clr)
public static void Poner (int x, int y, Opciones.Color clr)
{
Poner(c, new Structs.Par<int, int>(x, y), clr);
Poner(new Structs.Par<int, int>(x, y), clr);
}

/// <summary>
Expand Down
24 changes: 4 additions & 20 deletions Serpentina/Estructuras.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,38 +94,22 @@ public class Color
{
// TODO: bg y fg no deberían ser parte de esta clase.
// Mover a una extensión.
char _bg = ' '; // Texto de fondo
char _fg = 'x'; // Texto de dibujo
ConsoleColor _bgc = ConsoleColor.Black; // Color de fondo
ConsoleColor _fgc = ConsoleColor.Green; // Color de frente
public event Action OnCambio;

/// <summary>
/// Char de fondo
/// </summary>
/// <value>The background.</value>
public char bg {
get {
return _bg;
}
set {
_bg = value;
OnCambio.Invoke ();
}
}


/// <summary>
/// Char de frente
/// </summary>
/// <value>The background.</value>
public char fg {
public char chr {
get {
return _fg;
}
set {
_fg = value;
OnCambio.Invoke ();
if (OnCambio != null) OnCambio.Invoke ();
}
}

Expand All @@ -139,7 +123,7 @@ public ConsoleColor bgc {
}
set {
_bgc = value;
OnCambio.Invoke ();
if (OnCambio != null) OnCambio.Invoke ();
}
}

Expand All @@ -153,7 +137,7 @@ public ConsoleColor fgc {
}
set {
_fgc = value;
OnCambio.Invoke ();
if (OnCambio != null) OnCambio.Invoke ();
}
}
}
Expand Down
14 changes: 10 additions & 4 deletions Serpentina/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ class MainClass
{
public static void Main (string[] args)
{
SerpienteConsola s = new SerpienteConsola (10, 10, 10);
SerpienteConsola s2 = new SerpienteConsola(10, 10, 100);
Serpiente s = new Serpiente (10, 10, 10);
Serpiente s2 = new Serpiente (10, 10, 100);

Console.CursorVisible = false;

s.MaxLongitud = 7;
UniversoConsola U = new UniversoConsola();
U.Area = new Structs.RectanguloInt(1, 1, 40, 40);
Universo U = new Universo();
// U.Area = new Structs.RectanguloInt(1, 1, 40, 40);

s.Posicion.x = 3;
s.Posicion.y = 3;
Expand All @@ -20,6 +22,10 @@ public static void Main (string[] args)
s.clr.fgc = ConsoleColor.White;
s2.clr.fgc = ConsoleColor.Cyan;

U.bgColor.bgc = ConsoleColor.Black;
U.bgColor.chr = ' ';
U.bgColor.fgc = ConsoleColor.Red;

U.Jugadores.Add(s);
U.Jugadores.Add(s2);

Expand Down
2 changes: 0 additions & 2 deletions Serpentina/Serpentina.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@
<Compile Include="Estructuras.cs" />
<Compile Include="ArregloCíclico.cs" />
<Compile Include="Serpiente.cs" />
<Compile Include="SerpienteConsola.cs" />
<Compile Include="Universo.cs" />
<Compile Include="UniversoConsola.cs" />
<Compile Include="ConsoleExten.cs" />
<Compile Include="enumAccion.cs" />
</ItemGroup>
Expand Down
171 changes: 114 additions & 57 deletions Serpentina/Serpiente.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,21 @@ public enum enumDirecciónAbsoluta
/// <value>La dirección actual.</value>
public enumDirecciónAbsoluta DireccionActual {
get {
return (_DireccionActual == enumDirecciónAbsoluta.noDir) ? _Historial[0] : _DireccionActual;
return (_DireccionActual == enumDirecciónAbsoluta.noDir) ? _Historial [0] : _DireccionActual;
}
set {
_DireccionActual = value;
}
}

// enumDirecciónAbsoluta _dirección = enumDirecciónAbsoluta.Arriba;
Structs.Par<int, int> _Pos = new Structs.Par<int, int>();

// enumDirecciónAbsoluta _dirección = enumDirecciónAbsoluta.Arriba;
Structs.Par<int, int> _Pos = new Structs.Par<int, int> ();
Structs.ArregloCíclico<enumDirecciónAbsoluta> _Historial;

/// <summary>
/// La longitud máxima de la serpiente permitido por la longitud del arreglo.
/// </summary>
public int MaxLong {
get
{
get {
return _Historial.MaxTamaño;
}
}
Expand Down Expand Up @@ -74,7 +71,6 @@ public int MaxLongitud {
}
}


/// <summary>
/// Devuelve la posición de la cabeza de la serpiente.
/// </summary>
Expand All @@ -101,18 +97,19 @@ public enumDirecciónAbsoluta DirecciónAbsoluta {
/// i = 0 => cabeza, i = 1 => cuello, etc.
/// </summary>
/// <param name="i">The index.</param>
public Structs.Par<int, int> Pos (int i) {
public Structs.Par<int, int> Pos (int i)
{
if (i == 0)
return Posicion;
if (i > Longitud)
throw new IndexOutOfRangeException();
throw new IndexOutOfRangeException ();

Structs.Par<int, int> ret = Pos (i - 1).Clone();
Structs.Par<int, int> ret = Pos (i - 1).Clone ();
// Serpiente tmp = Cola (i - 1);
// enumDirecciónAbsoluta da = tmp.DirecciónAbsoluta;


switch (_Historial[1 - i]) {
switch (_Historial [1 - i]) {
case enumDirecciónAbsoluta.Arriba:
ret.y ++;
break;
Expand Down Expand Up @@ -142,7 +139,6 @@ public Serpiente Cola (int i)
return ret;
}


/// <summary>
/// Devuelve el índice de la cola con respecto a la serpiente.
/// </summary>
Expand All @@ -158,10 +154,11 @@ public int ObtenerÍndiceCola ()
/// <param name="MaxTamaño">Tamaño máximo de la serpiente</param>
public Serpiente (int MaxTamaño, int x, int y)
{
_MaxLongitud = MaxTamaño;
_MaxLongitud = MaxTamaño;
_Historial = new Structs.ArregloCíclico<enumDirecciónAbsoluta> (MaxTamaño);
_Pos.x = x;
_Pos.y = y;
clr.OnCambio += Dibujar;
}

/// <summary>
Expand All @@ -170,68 +167,128 @@ public Serpiente (int MaxTamaño, int x, int y)
/// <param name="dir">Dir.</param>
public virtual void Avanzar (enumDirecciónAbsoluta dir)
{




}

/// <summary>
/// Avanza la serpiente hacia la dirección <c>DireccionActual</c>.
/// </summary>
public virtual void Avanzar ()
{
Avanzar (DireccionActual);
}

/// <summary>
/// Devuelve <c>true</c> sólo si esta serpiente intersecta el punto <c>p</c>.
/// </summary>
/// <param name="p">Un punto en Consola.</param>
/// <returns></returns>
public bool ContienePos (Structs.Par<int, int> p)
{
for (int i = 0; i < Longitud; i++) {
if (Pos (i).Equals (p))
return true;
}
return false;
}

/// <summary>
/// Devuelve la posición que tendría la cabeza si avanzara hacia <c>dir</c>
/// </summary>
/// <param name="dir">Dirección.</param>
/// <returns></returns>
public Structs.Par<int, int> ObtenerPosiciónFutura (enumDirecciónAbsoluta dir)
{
switch (dir) {
case enumDirecciónAbsoluta.Abajo:
return new Structs.Par<int, int> (_Pos.x, _Pos.y + 1);
case enumDirecciónAbsoluta.Arriba:
return new Structs.Par<int, int> (_Pos.x, _Pos.y - 1);
case enumDirecciónAbsoluta.Derecha:
return new Structs.Par<int, int> (_Pos.x + 1, _Pos.y);
case enumDirecciónAbsoluta.Izquierda:
return new Structs.Par<int, int> (_Pos.x - 1, _Pos.y);
default:
return null;
}
}

public Opciones.Color clr = new Opciones.Color ();

public void Avanzar (Universo U)
{
Structs.Par<int, int> PosTmp;
bool Despl = Longitud >= MaxLongitud;

if (Despl) { // Borrar sólo si se está desplazando y no creciendo.

PosTmp = Pos (Longitud); // Obtiene la posición de la cola.
ConsoleExt.ConsoleExt.Poner (PosTmp, U.bgColor);
}

enumDirecciónAbsoluta dir = DireccionActual;
_Historial.Agrega (dir, Despl);

// recalcular posición
switch (dir) {
case enumDirecciónAbsoluta.Abajo:
_Pos.y++;
case enumDirecciónAbsoluta.Abajo:
_Pos.y++;
break;
case enumDirecciónAbsoluta.Arriba:
_Pos.y --;
case enumDirecciónAbsoluta.Arriba:
_Pos.y --;
break;
case enumDirecciónAbsoluta.Izquierda:
case enumDirecciónAbsoluta.Izquierda:
_Pos.x --;
break;
case enumDirecciónAbsoluta.Derecha:
case enumDirecciónAbsoluta.Derecha:
_Pos.x ++;
break;
}

PosTmp = Pos (0); // Obtiene la posición de la cabeza

ConsoleExt.ConsoleExt.Poner (PosTmp, clr);
}

/// <summary>
/// Avanza la serpiente hacia la dirección <c>DireccionActual</c>.
/// Dibuja la serpiente.
/// </summary>
public virtual void Avanzar ()
public void Dibujar ()
{
Avanzar (DireccionActual);
Structs.Par<int, int> PosTmp;
for (int i = 0; i <= Longitud; i++) {
PosTmp = Pos (i);
Console.CursorLeft = PosTmp.x;
Console.CursorTop = PosTmp.y;
Console.BackgroundColor = clr.bgc;
Console.ForegroundColor = clr.fgc;
Console.Write (clr.chr);
}
}

/// <summary>
/// Devuelve <c>true</c> sólo si esta serpiente intersecta el punto <c>p</c>.
/// </summary>
/// <param name="p">Un punto en Consola.</param>
/// <returns></returns>
public bool ContienePos (Structs.Par<int, int> p)
{
for (int i = 0; i < Longitud; i++)
{
if (Pos(i).Equals(p)) return true;
}
return false;
}

/// <summary>
/// Devuelve la posición que tendría la cabeza si avanzara hacia <c>dir</c>
/// </summary>
/// <param name="dir">Dirección.</param>
/// <returns></returns>
public Structs.Par<int, int> ObtenerPosiciónFutura (enumDirecciónAbsoluta dir)
{
switch (dir)
{
case enumDirecciónAbsoluta.Abajo:
return new Structs.Par<int, int>(_Pos.x, _Pos.y + 1);
case enumDirecciónAbsoluta.Arriba:
return new Structs.Par<int, int>(_Pos.x, _Pos.y - 1);
case enumDirecciónAbsoluta.Derecha:
return new Structs.Par<int, int>(_Pos.x + 1, _Pos.y);
case enumDirecciónAbsoluta.Izquierda:
return new Structs.Par<int, int>(_Pos.x - 1, _Pos.y);
default:
return null;
}
}
/// Borra la serpiente.
/// <param name="bk">Opciones de fondo.</param>
/// </summary>
public void Borrar (Opciones.Color bk)
{
Structs.Par<int, int> PosTmp;
for (int i = 0; i <= Longitud; i++) {
PosTmp = Pos (i);
Console.CursorLeft = PosTmp.x;
Console.CursorTop = PosTmp.y;
Console.BackgroundColor = bk.bgc;
Console.ForegroundColor = bk.fgc;
Console.Write (bk.chr);
}
}

public override string ToString ()
{
return clr.fgc.ToString ();
}
}
}
Loading

0 comments on commit 2642b48

Please sign in to comment.