Пример #1
0
 public AI(Chess.Game.Player other) :
     base(other)
 {
 }
Пример #2
0
 public SimpleAI(Chess.Game.Player other) :
     base(other)
 {
 }
Пример #3
0
 protected Player(Chess.Game.Player other) :
     base(other)
 {
 }
Пример #4
0
 public Game(Board board, Chess.Game.Player player0, Chess.Game.Player player1) :
     base(board, player0, player1)
 {
 }
Пример #5
0
 public Game(Chess.Game.Board board, Chess.Game.Player player0, Chess.Game.Player player1) :
     base(board, player0, player1)
 {
     Board2D.InitializeGraphicalElements();
     Board2D.Initialize2DCoordinates(new Vec2 <uint>((MainWindowSize.Width / 4), (MainWindowSize.Height / 32)));
 }
Пример #6
0
        public IEnumerable <Move> GetMoves()
        {
            List <Move> moves = new List <Move>();

            Chess.Game.Player otherPlayer = (GetPlayer() == Chess.Game.Player.BLACK ? Chess.Game.Player.WHITE : Chess.Game.Player.BLACK);
            int enPassantYPos             = (GetPlayer() == Chess.Game.Player.BLACK ? 4 : 5);

            // Moves on chessboard relative to player.
            int oneStep   = Field.Y + (GetPlayer() == Chess.Game.Player.BLACK ? -1 : +1);
            int twoSteps  = Field.Y + (GetPlayer() == Chess.Game.Player.BLACK ? -2 : +2);
            int leftStep  = Field.X + (GetPlayer() == Chess.Game.Player.BLACK ? +1 : -1);
            int rightStep = Field.X + (GetPlayer() == Chess.Game.Player.BLACK ? -1 : +1);

            // Initial move
            if (!moveHistory.Any() &&
                !Chessboard.Fields[Field.X][oneStep].isOccupied() &&
                !Chessboard.Fields[Field.X][twoSteps].isOccupied())
            {
                moves.Add(new Move(Field.X, twoSteps, Move.MoveType.MOVE));
            }

            // 1 turn forward
            if (isInChessboard(oneStep))
            {
                // Move forward
                if (!Chessboard.Fields[Field.X][oneStep].isOccupied())
                {
                    moves.Add(new Move(Field.X, oneStep, Move.MoveType.MOVE));
                }

                // Attack right-forward
                if (isInChessboard(rightStep) &&
                    Chessboard.Fields[rightStep][oneStep].isOccupied(player: otherPlayer))
                {
                    moves.Add(new Move(rightStep, oneStep, Move.MoveType.ATTACK));
                }

                // Attack left-forward
                if (isInChessboard(leftStep) &&
                    Chessboard.Fields[leftStep][oneStep].isOccupied(player: otherPlayer))
                {
                    moves.Add(new Move(leftStep, oneStep, Move.MoveType.ATTACK));
                }
            }

            // en passant
            if (Field.Y == enPassantYPos)
            {
                if (isInChessboard(rightStep) &&
                    Chessboard.Fields[rightStep][Field.Y].isOccupied(ChessPiece.PieceType.PAWN, otherPlayer) &&
                    Chessboard.Fields[rightStep][Field.Y].Piece.moveHistory.Count == 1 &&
                    !enPassantRightLost)
                {
                    enPassantRightLost = true;
                    moves.Add(new Move(rightStep, Field.Y, Move.MoveType.EN_PASSANT));
                }

                if (isInChessboard(leftStep) &&
                    Chessboard.Fields[leftStep][Field.Y].isOccupied(ChessPiece.PieceType.PAWN, otherPlayer) &&
                    Chessboard.Fields[leftStep][Field.Y].Piece.moveHistory.Count == 1 &&
                    !enPassantLeftLost)
                {
                    enPassantLeftLost = true;
                    moves.Add(new Move(leftStep, Field.Y, Move.MoveType.EN_PASSANT));
                }
            }

            return(moves);
        }
Пример #7
0
 public Pawn(Chess.Game.Player color)
 {
     base.player = color;
 }