public override bool Mover(int posY, int posX, List <Pieza> listadoPiezas) { //Logica movimiento torre var ultimoMovimientoPiezaMover = this.Movimientos.OrderByDescending(x => x.Tiempo).FirstOrDefault(); var result = false; if (posY == ultimoMovimientoPiezaMover.PosY) { var casillerosAnalizar = Math.Abs(posX - ultimoMovimientoPiezaMover.PosX); if (posX > ultimoMovimientoPiezaMover.PosX) { //Sumar Casilleros for (int i = 1; i <= casillerosAnalizar; i++) { var piezaAComer = Tablero.HayPieza(posY, ultimoMovimientoPiezaMover.PosX + i, listadoPiezas); if (piezaAComer != null) { if (piezaAComer.Id == this.Id) { continue; } if (piezaAComer.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (piezaAComer.Color != this.Color) { Pieza.Comer(piezaAComer, listadoPiezas); } } } } result = true; } else { //Restar Casilleros for (int i = 1; i <= casillerosAnalizar; i++) { var piezaAComer = Tablero.HayPieza(posY, ultimoMovimientoPiezaMover.PosX - i, listadoPiezas); if (piezaAComer != null) { if (piezaAComer.Id == this.Id) { continue; } if (piezaAComer.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (piezaAComer.Color != this.Color) { Pieza.Comer(piezaAComer, listadoPiezas); } } } } result = true; } } if (posX == ultimoMovimientoPiezaMover.PosX) { var casillerosAnalizar = Math.Abs(posY - ultimoMovimientoPiezaMover.PosY); if (posY > ultimoMovimientoPiezaMover.PosY) { //Sumar Casilleros for (int i = 1; i <= casillerosAnalizar; i++) { var piezaAComer = Tablero.HayPieza(ultimoMovimientoPiezaMover.PosY + i, posX, listadoPiezas); if (piezaAComer != null) { if (piezaAComer.Id == this.Id) { continue; } if (piezaAComer.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (piezaAComer.Color != this.Color) { Pieza.Comer(piezaAComer, listadoPiezas); } } } } result = true; } else { //Restar Casilleros for (int i = 1; i <= casillerosAnalizar; i++) { var piezaAComer = Tablero.HayPieza(ultimoMovimientoPiezaMover.PosY - i, posX, listadoPiezas); if (piezaAComer != null) { if (piezaAComer.Id == this.Id) { continue; } if (piezaAComer.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (piezaAComer.Color != this.Color) { Pieza.Comer(piezaAComer, listadoPiezas); } } } } result = true; } } return(result); }
public override bool Mover(int posY, int posX, List <Pieza> listadoPiezas) { var ultimoMovimientoPiezaMover = this.Movimientos.OrderByDescending(x => x.Tiempo).FirstOrDefault(); //Logica movimiento Alfil var result = false; //Posiciones validas ↓-→ for (int j = 1; j < 8; j++) { var posNuevaY = ultimoMovimientoPiezaMover.PosY + j; var posNuevaX = ultimoMovimientoPiezaMover.PosX + j; if (posNuevaY == posY && posNuevaX == posX) { //Movimiento Abajo - Derecha var casillerosAnalizarX = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX); var casillerosAnalizarY = Math.Abs(posNuevaY - ultimoMovimientoPiezaMover.PosY); for (int i = 1; i <= casillerosAnalizarX; i++) { var hayPieza = Tablero.HayPieza(ultimoMovimientoPiezaMover.PosY + i, ultimoMovimientoPiezaMover.PosX + i, listadoPiezas); if (hayPieza != null) { if (hayPieza.Id == this.Id) { continue; } if (hayPieza.Color == this.Color) { return(false); } if (i == casillerosAnalizarX) { if (hayPieza.Color != this.Color) { Pieza.Comer(hayPieza, listadoPiezas); } } } } result = true; } } //Posiciones validas ←-↑ for (int j = 1; j < 8; j++) { var posNuevaY = ultimoMovimientoPiezaMover.PosY - j; var posNuevaX = ultimoMovimientoPiezaMover.PosX - j; if (posNuevaY == posY && posNuevaX == posX) { //Movimiento Abajo - Derecha var casillerosAnalizar = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX); for (int i = 1; i <= casillerosAnalizar; i++) { var hayPieza = Tablero.HayPieza(casillerosAnalizar + i, casillerosAnalizar + i, listadoPiezas); if (hayPieza != null) { if (hayPieza.Id == this.Id) { continue; } if (hayPieza.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (hayPieza.Color != this.Color) { Pieza.Comer(hayPieza, listadoPiezas); } } } } result = true; } } //Posiciones validas ↓-← for (int j = 1; j < 8; j++) { var posNuevaY = ultimoMovimientoPiezaMover.PosY + j; var posNuevaX = ultimoMovimientoPiezaMover.PosX - j; if (posNuevaY == posY && posNuevaX == posX) { //Movimiento Abajo - Derecha var casillerosAnalizar = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX); for (int i = 1; i <= casillerosAnalizar; i++) { var hayPieza = Tablero.HayPieza(casillerosAnalizar + i, casillerosAnalizar - i, listadoPiezas); if (hayPieza != null) { if (hayPieza.Id == this.Id) { continue; } if (hayPieza.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (hayPieza.Color != this.Color) { Pieza.Comer(hayPieza, listadoPiezas); } } } } result = true; } } //Posiciones validas ↑-→ for (int j = 1; j < 8; j++) { var posNuevaY = ultimoMovimientoPiezaMover.PosY - j; var posNuevaX = ultimoMovimientoPiezaMover.PosX + j; if (posNuevaY == posY && posNuevaX == posX) { //Movimiento Abajo - Derecha var casillerosAnalizar = Math.Abs(posNuevaX - ultimoMovimientoPiezaMover.PosX); for (int i = 1; i <= casillerosAnalizar; i++) { var hayPieza = Tablero.HayPieza(casillerosAnalizar - i, casillerosAnalizar + i, listadoPiezas); if (hayPieza != null) { if (hayPieza.Id == this.Id) { continue; } if (hayPieza.Color == this.Color) { return(false); } if (i == casillerosAnalizar) { if (hayPieza.Color != this.Color) { Pieza.Comer(hayPieza, listadoPiezas); } } } } result = true; } } return(result); }