public override IList <Square> GetAvailableMoves(ChessBoard board) { Square cell = this.Square; List <Square> availableMoves = new List <Square>(); for (int dir = 0; dir < 4; dir++) { int x = this.Square.X; int y = this.Square.Y; Figure figure = null; while (figure == null) { if (dir < 2) { if (dir % 2 == 0) { x++; } else { x--; } } else { if (dir % 2 == 0) { y++; } else { y--; } } if (!board.IsValid(x, y)) { break; } if (board.IsEmpty(x, y)) { availableMoves.Add(new Square(x, y)); } else { figure = board.Figures[x, y]; if (figure.Color != this.Color) { availableMoves.Add(new Square(x, y)); } } } } return(availableMoves); }
public override IList <Square> GetAvailableMoves(ChessBoard board) { Square cell = this.Square; List <Square> availableMoves = new List <Square>(); if (board.IsValid(cell.X + 1, cell.Y + 2) && board.IsEmptyOrEnemyFigure(cell.X + 1, cell.Y + 2, this.Color)) { availableMoves.Add(new Square(cell.X + 1, cell.Y + 2)); } if (board.IsValid(cell.X - 1, cell.Y + 2) && board.IsEmptyOrEnemyFigure(cell.X - 1, cell.Y + 2, this.Color)) { availableMoves.Add(new Square(cell.X - 1, cell.Y + 2)); } if (board.IsValid(cell.X + 1, cell.Y - 2) && board.IsEmptyOrEnemyFigure(cell.X + 1, cell.Y - 2, this.Color)) { availableMoves.Add(new Square(cell.X + 1, cell.Y - 2)); } if (board.IsValid(cell.X - 1, cell.Y - 2) && board.IsEmptyOrEnemyFigure(cell.X - 1, cell.Y - 2, this.Color)) { availableMoves.Add(new Square(cell.X - 1, cell.Y - 2)); } if (board.IsValid(cell.X + 2, cell.Y + 1) && board.IsEmptyOrEnemyFigure(cell.X + 2, cell.Y + 1, this.Color)) { availableMoves.Add(new Square(cell.X + 2, cell.Y + 1)); } if (board.IsValid(cell.X + 2, cell.Y - 1) && board.IsEmptyOrEnemyFigure(cell.X + 2, cell.Y - 1, this.Color)) { availableMoves.Add(new Square(cell.X + 2, cell.Y - 1)); } if (board.IsValid(cell.X - 2, cell.Y + 1) && board.IsEmptyOrEnemyFigure(cell.X - 2, cell.Y + 1, this.Color)) { availableMoves.Add(new Square(cell.X - 2, cell.Y + 1)); } if (board.IsValid(cell.X - 2, cell.Y - 1) && board.IsEmptyOrEnemyFigure(cell.X - 2, cell.Y - 1, this.Color)) { availableMoves.Add(new Square(cell.X - 2, cell.Y - 1)); } return(availableMoves); }
public override IList <Square> GetAvailableMoves(ChessBoard board) { Square cell = this.Square; List <Square> availableMoves = new List <Square>(); if (this.Color == Color.WHITE) { if (board.IsValid(cell.X, cell.Y + 1) && board.IsEmpty(cell.X, cell.Y + 1)) { if (cell.Y == 1 && board.IsEmpty(cell.X, cell.Y + 2)) { availableMoves.Add(new Square(cell.X, cell.Y + 2)); } availableMoves.Add(new Square(cell.X, cell.Y + 1)); } if (board.IsValid(cell.X + 1, cell.Y + 1) && board.IsEnemyFigure(cell.X + 1, cell.Y + 1, this.Color)) { availableMoves.Add(new Square(cell.X + 1, cell.Y + 1)); } if (board.IsValid(cell.X - 1, cell.Y + 1) && board.IsEnemyFigure(cell.X - 1, cell.Y + 1, this.Color)) { availableMoves.Add(new Square(cell.X - 1, cell.Y + 1)); } } if (this.Color == Color.BLACK) { if (board.IsValid(cell.X, cell.Y - 1) && board.IsEmpty(cell.X, cell.Y - 1)) { if (cell.Y == 6 && board.IsEmpty(cell.X, cell.Y - 2)) { availableMoves.Add(new Square(cell.X, cell.Y - 2)); } availableMoves.Add(new Square(cell.X, cell.Y - 1)); } if (board.IsValid(cell.X + 1, cell.Y - 1) && board.IsEnemyFigure(cell.X + 1, cell.Y - 1, this.Color)) { availableMoves.Add(new Square(cell.X + 1, cell.Y - 1)); } if (board.IsValid(cell.X - 1, cell.Y - 1) && board.IsEnemyFigure(cell.X - 1, cell.Y - 1, this.Color)) { availableMoves.Add(new Square(cell.X - 1, cell.Y - 1)); } } return(availableMoves); }