public override bool[,] PossibleMovements() { bool[,] matrix = new bool[Board.Rows, Board.Cols]; Position pos = new Position(0, 0); // up pos.Row = Position.Row - 1; pos.Col = Position.Col; while (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color) { break; } pos.Row--; } // right pos.Row = Position.Row; pos.Col = Position.Col + 1; while (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color) { break; } pos.Col++; } // down pos.Row = Position.Row + 1; pos.Col = Position.Col; while (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color) { break; } pos.Row++; } // left pos.Row = Position.Row; pos.Col = Position.Col - 1; while (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color) { break; } pos.Col--; } return(matrix); }
public override bool[,] PossibleMovements() { bool[,] matrix = new bool[Board.Rows, Board.Cols]; Position pos = new Position(0, 0); if (Color == Color.White) { pos.Row = Position.Row - 1; pos.Col = Position.Col; if (Board.IsValidPosition(pos) && FreePosition(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row - 2; pos.Col = Position.Col; if (Board.IsValidPosition(pos) && FreePosition(pos) && QtyMovements == 0) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row - 1; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && HasOpponent(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row - 1; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && HasOpponent(pos)) { matrix[pos.Row, pos.Col] = true; } // En Passant if (Position.Row == 3) { Position leftPos = new Position(Position.Row, Position.Col - 1); if (Board.IsValidPosition(leftPos) && HasOpponent(leftPos) && Board.GetPiece(leftPos) == Game.VulnerableEnPassant) { matrix[leftPos.Row - 1, leftPos.Col] = true; } Position rightPos = new Position(Position.Row, Position.Col + 1); if (Board.IsValidPosition(rightPos) && HasOpponent(rightPos) && Board.GetPiece(rightPos) == Game.VulnerableEnPassant) { matrix[rightPos.Row - 1, rightPos.Col] = true; } } } else { pos.Row = Position.Row + 1; pos.Col = Position.Col; if (Board.IsValidPosition(pos) && FreePosition(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 2; pos.Col = Position.Col; if (Board.IsValidPosition(pos) && FreePosition(pos) && QtyMovements == 0) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 1; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && HasOpponent(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 1; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && HasOpponent(pos)) { matrix[pos.Row, pos.Col] = true; } // En Passant if (Position.Row == 4) { Position leftPos = new Position(Position.Row, Position.Col - 1); if (Board.IsValidPosition(leftPos) && HasOpponent(leftPos) && Board.GetPiece(leftPos) == Game.VulnerableEnPassant) { matrix[leftPos.Row + 1, leftPos.Col] = true; } Position rightPos = new Position(Position.Row, Position.Col + 1); if (Board.IsValidPosition(rightPos) && HasOpponent(rightPos) && Board.GetPiece(rightPos) == Game.VulnerableEnPassant) { matrix[rightPos.Row + 1, rightPos.Col] = true; } } } return(matrix); }
public override bool[,] PossibleMovements() { bool[,] matrix = new bool[Board.Rows, Board.Cols]; Position pos = new Position(0, 0); pos.Row = Position.Row - 1; pos.Col = Position.Col - 2; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row - 1; pos.Col = Position.Col + 2; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row - 2; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row - 2; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 1; pos.Col = Position.Col + 2; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 1; pos.Col = Position.Col - 2; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 2; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } pos.Row = Position.Row + 2; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } return(matrix); }
public override bool[,] PossibleMovements() { bool[,] matrix = new bool[Board.Rows, Board.Cols]; Position pos = new Position(0, 0); // up pos.Row = Position.Row - 1; pos.Col = Position.Col; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // up right pos.Row = Position.Row - 1; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // right pos.Row = Position.Row; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // down right pos.Row = Position.Row + 1; pos.Col = Position.Col + 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // down pos.Row = Position.Row + 1; pos.Col = Position.Col; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // down left pos.Row = Position.Row + 1; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // left pos.Row = Position.Row; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // up left pos.Row = Position.Row - 1; pos.Col = Position.Col - 1; if (Board.IsValidPosition(pos) && CanMove(pos)) { matrix[pos.Row, pos.Col] = true; } // Castling if (QtyMovements == 0 && !Game.Check) { Position posRook1 = new Position(Position.Row, Position.Col + 3); if (CheckRookForCastling(posRook1)) { Position pos1 = new Position(Position.Row, Position.Col + 1); Position pos2 = new Position(Position.Row, Position.Col + 2); if (Board.GetPiece(pos1) == null && Board.GetPiece(pos2) == null) { matrix[Position.Row, Position.Col + 2] = true; } } Position posRook2 = new Position(Position.Row, Position.Col - 4); if (CheckRookForCastling(posRook2)) { Position pos1 = new Position(Position.Row, Position.Col - 1); Position pos2 = new Position(Position.Row, Position.Col - 2); Position pos3 = new Position(Position.Row, Position.Col - 3); if (Board.GetPiece(pos1) == null && Board.GetPiece(pos2) == null && Board.GetPiece(pos3) == null) { matrix[Position.Row, Position.Col - 2] = true; } } } return(matrix); }