private IEnumerable <Casilla> PeonCaptureCheck(Casilla casilla) { var returnList = new List <Casilla>(); if (casilla.PiezaContenida.Color == ColorFicha.Blanco) { var enemigoUR = GetCasilla(casilla.Fila + 1, casilla.Columna + 1); var enemigoUL = GetCasilla(casilla.Fila + 1, casilla.Columna - 1); if (IsCapturable(casilla, enemigoUL)) { returnList.Add(enemigoUL); } if (IsCapturable(casilla, enemigoUR)) { returnList.Add(enemigoUR); } } else { var enemigoDR = GetCasilla(casilla.Fila - 1, casilla.Columna + 1); var enemigoDL = GetCasilla(casilla.Fila - 1, casilla.Columna - 1); if (IsCapturable(casilla, enemigoDL)) { returnList.Add(enemigoDL); } if (IsCapturable(casilla, enemigoDR)) { returnList.Add(enemigoDR); } } return(returnList); }
private IEnumerable<Casilla> GetRangeForDirection(Casilla origen, Casilla siguiente, Direccion direccion, IEnumerable<Casilla> casillas, int maximumRange = 9) { var output = new List<Casilla>(); if (maximumRange == 0) return output; siguiente = NextCasilla(origen, siguiente, direccion,casillas); return output; }
private IEnumerable <Casilla> RangeCheck(Casilla casillaOrigen, Casilla nextCasilla, Direccion direccion, int maximumRange = 9) { var returnList = new List <Casilla>(); if (maximumRange == 0) { return(returnList); } nextCasilla = NextCasilla(casillaOrigen, nextCasilla, direccion); if (nextCasilla == null) { return(returnList); } if (casillaOrigen.PiezaContenida.Tipo == (int)TipoPieza.Peon && nextCasilla.PiezaContenida != null) { return(returnList); } returnList.Add(nextCasilla); maximumRange--; if (nextCasilla.PiezaContenida == null) { returnList.AddRange(RangeCheck(casillaOrigen, nextCasilla, direccion, maximumRange)); } return(returnList); }
public Output MovePiece(Casilla casillaOrigen, Casilla casillaDestino, bool test = false) { var piezaOrigen = casillaOrigen.PiezaContenida; var piezaDesino = casillaDestino.PiezaContenida; if (piezaOrigen.Color != (ColorFicha)CurrentTurn) { return(Output.NotYourTurn); } if (CheckCheck(piezaOrigen.Color)) { casillaOrigen.PiezaContenida = piezaOrigen; casillaDestino.PiezaContenida = piezaDesino; return(Output.SelfCheck); } if (test) { return(Output.Success); } ; casillaDestino.PiezaContenida = casillaOrigen.PiezaContenida; casillaOrigen.PiezaContenida = null; NextTurn(); var output = CheckCheckMate(ColorContrario(piezaOrigen)); return(output != Output.Success ? output : (CheckCheck(ColorContrario(piezaOrigen)) ? Output.Check : Output.Success)); }
private IEnumerable <Casilla> PeonRangeCheck(Casilla casilla) { Direccion direccion; int range; var returnValue = new List <Casilla>(); switch (casilla.PiezaContenida.Color) { case ColorFicha.Blanco: range = casilla.Fila == 2 ? 2 : 1; direccion = Direccion.Up; break; case ColorFicha.Negro: range = casilla.Fila == 7 ? 2 : 1; direccion = Direccion.Down; break; default: throw new ArgumentOutOfRangeException(); } returnValue.AddRange(RangeCheck(casilla, casilla, direccion, range)); returnValue.AddRange(PeonCaptureCheck(casilla)); return(returnValue); }
public override List<Casilla> GetMovementRange(Casilla contenedor,List<Casilla> casillas) { var output = new List<Casilla>(); output.AddRange(GetRangeForDirection(contenedor,contenedor,Direccion.Up,casillas)); output.AddRange(GetRangeForDirection(contenedor,contenedor,Direccion.Down,casillas)); output.AddRange(GetRangeForDirection(contenedor,contenedor,Direccion.Left,casillas)); output.AddRange(GetRangeForDirection(contenedor,contenedor,Direccion.Right,casillas)); return output; }
public override List <Casilla> GetMovementRange(Casilla contenedor, List <Casilla> casillas) { var output = new List <Casilla>(); output.AddRange(GetRangeForDirection(contenedor, contenedor, Direccion.Up, casillas)); output.AddRange(GetRangeForDirection(contenedor, contenedor, Direccion.Down, casillas)); output.AddRange(GetRangeForDirection(contenedor, contenedor, Direccion.Left, casillas)); output.AddRange(GetRangeForDirection(contenedor, contenedor, Direccion.Right, casillas)); return(output); }
private List <Casilla> MovimientoPieza(Casilla casilla) { return(casilla.PiezaContenida.GetMovementRange(casilla, _casillas)); var output = new List <Casilla>(); switch ((TipoPieza)casilla.PiezaContenida.Tipo) { case TipoPieza.Peon: output.AddRange(PeonRangeCheck(casilla)); break; case TipoPieza.Torre: output.AddRange(RangeCheck(casilla, casilla, Direccion.Up)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Down)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Left)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Right)); break; case TipoPieza.Caballero: output.AddRange(CaballeroRangeCheck(casilla)); break; case TipoPieza.Alfil: output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftUp)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightUp)); break; case TipoPieza.Reina: output.AddRange(RangeCheck(casilla, casilla, Direccion.Up)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightUp)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Right)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Down)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Left)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftUp)); break; case TipoPieza.Rey: output.AddRange(RangeCheck(casilla, casilla, Direccion.Up, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightUp, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Right, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightDown, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Down, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftDown, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Left, 1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftUp, 1)); //returnList.RemoveAll(casilla1 => CasillasEnPeligro(casilla,true).Contains(casilla1)); break; } return(output); }
protected Casilla NextCasilla(Casilla origen, Casilla siguiente, Direccion direccion, IEnumerable<Casilla> casillas) { var filaOffset = FilaOffset(direccion); var columnaOffset = ColumnaOffset(direccion); return casillas.FirstOrDefault(casilla1 => casilla1.Fila == siguiente.Fila + filaOffset && casilla1.Columna == siguiente.Columna + columnaOffset && (casilla1.PiezaContenida == null || (casilla1.PiezaContenida.Color != origen.PiezaContenida.Color && (TipoPieza)origen.PiezaContenida.Tipo != TipoPieza.Peon)) ); }
private IEnumerable <Casilla> GetRangeForDirection(Casilla origen, Casilla siguiente, Direccion direccion, IEnumerable <Casilla> casillas, int maximumRange = 9) { var output = new List <Casilla>(); if (maximumRange == 0) { return(output); } siguiente = NextCasilla(origen, siguiente, direccion, casillas); return(output); }
protected Casilla NextCasilla(Casilla origen, Casilla siguiente, Direccion direccion, IEnumerable <Casilla> casillas) { var filaOffset = FilaOffset(direccion); var columnaOffset = ColumnaOffset(direccion); return(casillas.FirstOrDefault(casilla1 => casilla1.Fila == siguiente.Fila + filaOffset && casilla1.Columna == siguiente.Columna + columnaOffset && (casilla1.PiezaContenida == null || (casilla1.PiezaContenida.Color != origen.PiezaContenida.Color && (TipoPieza)origen.PiezaContenida.Tipo != TipoPieza.Peon)) )); }
private Casilla NextCasilla(Casilla casillaOrigen, Casilla nextCasilla, Direccion direccion) { var filaOffset = FilaOffset(direccion); var columnaOffset = ColumnaOffset(direccion); return(_casillas.FirstOrDefault(casilla1 => casilla1.Fila == nextCasilla.Fila + filaOffset && casilla1.Columna == nextCasilla.Columna + columnaOffset && (casilla1.PiezaContenida == null || (casilla1.PiezaContenida.Color != casillaOrigen.PiezaContenida.Color && (TipoPieza)casillaOrigen.PiezaContenida.Tipo != TipoPieza.Peon) ))); }
private List <Casilla> CasillasEnPeligro(Casilla casillaKing) { var colorContrario = ColorContrario(casillaKing.PiezaContenida); var enemyPieces = _casillas.FindAll(casilla => casilla.PiezaContenida != null && casilla.PiezaContenida.Color == colorContrario); var casillasEnPeligro = new List <Casilla>(); foreach (var enemyPiece in enemyPieces) { casillasEnPeligro.AddRange(MovementPosibilitiesList(enemyPiece)); } return(casillasEnPeligro); }
private IEnumerable <Casilla> CaballeroRangeCheck(Casilla casilla) { var returnList = new List <Casilla>(); for (var i = 2; i >= -2; i--) { if (i == 0) { continue; } var j = (i == 2 || i == -2) ? 1 : 2; returnList.AddRange(_casillas.Where(casilla1 => casilla1.Fila == casilla.Fila + i && casilla1.Columna == casilla.Columna + j && (casilla1.PiezaContenida == null || casilla1.PiezaContenida.Color != casilla.PiezaContenida.Color))); returnList.AddRange(_casillas.Where(casilla1 => casilla1.Fila == casilla.Fila + i && casilla1.Columna == casilla.Columna - j && (casilla1.PiezaContenida == null || casilla1.PiezaContenida.Color != casilla.PiezaContenida.Color))); } return(returnList); }
private static bool IsCapturable(Casilla casilla, Casilla attackedCasilla) { return attackedCasilla != null && attackedCasilla.PiezaContenida != null && attackedCasilla.PiezaContenida.Color != casilla.PiezaContenida.Color; }
private IEnumerable<Casilla> PeonCaptureCheck(Casilla casilla) { var returnList = new List<Casilla>(); if (casilla.PiezaContenida.Color == ColorFicha.Blanco) { var enemigoUR = GetCasilla(casilla.Fila + 1, casilla.Columna + 1); var enemigoUL = GetCasilla(casilla.Fila + 1, casilla.Columna - 1); if (IsCapturable(casilla, enemigoUL)) returnList.Add(enemigoUL); if (IsCapturable(casilla, enemigoUR)) returnList.Add(enemigoUR); } else { var enemigoDR = GetCasilla(casilla.Fila - 1, casilla.Columna + 1); var enemigoDL = GetCasilla(casilla.Fila - 1, casilla.Columna - 1); if (IsCapturable(casilla, enemigoDL)) returnList.Add(enemigoDL); if (IsCapturable(casilla, enemigoDR)) returnList.Add(enemigoDR); } return returnList; }
private IEnumerable<Casilla> PeonRangeCheck(Casilla casilla) { Direccion direccion; int range; var returnValue = new List<Casilla>(); switch (casilla.PiezaContenida.Color) { case ColorFicha.Blanco: range = casilla.Fila == 2 ? 2 : 1; direccion = Direccion.Up; break; case ColorFicha.Negro: range = casilla.Fila == 7 ? 2 : 1; direccion = Direccion.Down; break; default: throw new ArgumentOutOfRangeException(); } returnValue.AddRange(RangeCheck(casilla,casilla,direccion,range)); returnValue.AddRange(PeonCaptureCheck(casilla)); return returnValue; }
private List<Casilla> CasillasEnPeligro(Casilla casillaKing) { var colorContrario = ColorContrario(casillaKing.PiezaContenida); var enemyPieces = _casillas.FindAll(casilla => casilla.PiezaContenida != null && casilla.PiezaContenida.Color == colorContrario); var casillasEnPeligro = new List<Casilla>(); foreach (var enemyPiece in enemyPieces) { casillasEnPeligro.AddRange(MovementPosibilitiesList(enemyPiece)); } return casillasEnPeligro; }
public Output MovePiece(Casilla casillaOrigen,Casilla casillaDestino,bool test = false) { var piezaOrigen = casillaOrigen.PiezaContenida; var piezaDesino = casillaDestino.PiezaContenida; if (piezaOrigen.Color != (ColorFicha) CurrentTurn) return Output.NotYourTurn; if (CheckCheck(piezaOrigen.Color)) { casillaOrigen.PiezaContenida = piezaOrigen; casillaDestino.PiezaContenida = piezaDesino; return Output.SelfCheck; } if(test) return Output.Success;; casillaDestino.PiezaContenida = casillaOrigen.PiezaContenida; casillaOrigen.PiezaContenida = null; NextTurn(); var output = CheckCheckMate(ColorContrario(piezaOrigen)); return output != Output.Success ? output : (CheckCheck(ColorContrario(piezaOrigen)) ? Output.Check : Output.Success); }
private IEnumerable<Casilla> CaballeroRangeCheck(Casilla casilla) { var returnList = new List<Casilla>(); for (var i = 2; i >= -2; i--) { if(i==0) continue; var j = (i == 2|| i ==-2) ? 1 : 2; returnList.AddRange(_casillas.Where(casilla1 => casilla1.Fila == casilla.Fila + i && casilla1.Columna == casilla.Columna + j && (casilla1.PiezaContenida == null || casilla1.PiezaContenida.Color != casilla.PiezaContenida.Color))); returnList.AddRange(_casillas.Where(casilla1 => casilla1.Fila == casilla.Fila + i && casilla1.Columna == casilla.Columna - j && (casilla1.PiezaContenida == null || casilla1.PiezaContenida.Color != casilla.PiezaContenida.Color))); } return returnList; }
private List<Casilla> MovimientoPieza(Casilla casilla) { return casilla.PiezaContenida.GetMovementRange(casilla, _casillas); var output = new List<Casilla>(); switch ((TipoPieza)casilla.PiezaContenida.Tipo) { case TipoPieza.Peon: output.AddRange(PeonRangeCheck(casilla)); break; case TipoPieza.Torre: output.AddRange(RangeCheck(casilla,casilla,Direccion.Up)); output.AddRange(RangeCheck(casilla,casilla,Direccion.Down)); output.AddRange(RangeCheck(casilla,casilla,Direccion.Left)); output.AddRange(RangeCheck(casilla,casilla,Direccion.Right)); break; case TipoPieza.Caballero: output.AddRange(CaballeroRangeCheck(casilla)); break; case TipoPieza.Alfil: output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftUp)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightUp)); break; case TipoPieza.Reina: output.AddRange(RangeCheck(casilla, casilla, Direccion.Up)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightUp)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Right)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Down)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftDown)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Left)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftUp)); break; case TipoPieza.Rey: output.AddRange(RangeCheck(casilla, casilla, Direccion.Up,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightUp,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Right,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.RightDown,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Down,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftDown,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.Left,1)); output.AddRange(RangeCheck(casilla, casilla, Direccion.LeftUp,1)); //returnList.RemoveAll(casilla1 => CasillasEnPeligro(casilla,true).Contains(casilla1)); break; } return output; }
public IEnumerable<Casilla> MovementPosibilitiesList(Casilla casilla) { var piezaEnCasilla = casilla.PiezaContenida; return piezaEnCasilla == null ? null : MovimientoPieza(casilla); }
public abstract List <Casilla> GetMovementRange(Casilla contenedor, List <Casilla> casillas);
public override List<Casilla> GetMovementRange(Casilla contenedor, List<Casilla> casillas) { throw new System.NotImplementedException(); }
private static bool IsCapturable(Casilla casilla, Casilla attackedCasilla) { return(attackedCasilla != null && attackedCasilla.PiezaContenida != null && attackedCasilla.PiezaContenida.Color != casilla.PiezaContenida.Color); }
public override List <Casilla> GetMovementRange(Casilla contenedor, List <Casilla> casillas) { throw new System.NotImplementedException(); }
public IEnumerable <Casilla> MovementPosibilitiesList(Casilla casilla) { var piezaEnCasilla = casilla.PiezaContenida; return(piezaEnCasilla == null ? null : MovimientoPieza(casilla)); }
private IEnumerable<Casilla> RangeCheck(Casilla casillaOrigen,Casilla nextCasilla, Direccion direccion,int maximumRange = 9) { var returnList = new List<Casilla>(); if (maximumRange == 0) return returnList; nextCasilla = NextCasilla(casillaOrigen, nextCasilla,direccion); if (nextCasilla == null) return returnList; if (casillaOrigen.PiezaContenida.Tipo == (int) TipoPieza.Peon && nextCasilla.PiezaContenida != null) return returnList; returnList.Add(nextCasilla); maximumRange--; if(nextCasilla.PiezaContenida == null) returnList.AddRange(RangeCheck(casillaOrigen,nextCasilla,direccion,maximumRange)); return returnList; }
private Casilla NextCasilla(Casilla casillaOrigen, Casilla nextCasilla, Direccion direccion) { var filaOffset = FilaOffset(direccion); var columnaOffset = ColumnaOffset(direccion); return _casillas.FirstOrDefault(casilla1 => casilla1.Fila == nextCasilla.Fila + filaOffset && casilla1.Columna == nextCasilla.Columna + columnaOffset && (casilla1.PiezaContenida == null || (casilla1.PiezaContenida.Color != casillaOrigen.PiezaContenida.Color && (TipoPieza)casillaOrigen.PiezaContenida.Tipo != TipoPieza.Peon) )); }
public abstract List<Casilla> GetMovementRange(Casilla contenedor, List<Casilla> casillas);