Example #1
0
        public override List <Tuple <int, int> > GetPossibleMoves(ChessBoard cb)
        {
            Tuple <int, int> position = Position;
            List <Tuple <int, int> >
            nonCaptureMoves    = new List <Tuple <int, int> >(),
                captureMoves   = new List <Tuple <int, int> >(),
                allMoves       = new List <Tuple <int, int> >();
            bool isPlayerBlack = (GetPlayer() == Player.Black);

            if (StartingPosition.Equals(position) &&
                cb.GetPieceInPosition(new Tuple <int, int>(position.Item1 + (isPlayerBlack ? 1 : -1), position.Item2)) ==
                null)
            {
                nonCaptureMoves.Add(new Tuple <int, int>(position.Item1 + (isPlayerBlack ? 2 : -2),
                                                         position.Item2)); // moveForwardDouble
            }

            nonCaptureMoves.Add(new Tuple <int, int>(position.Item1 + (isPlayerBlack ? 1 : -1),
                                                     position.Item2)); // moveForward

            captureMoves.Add(new Tuple <int, int>(position.Item1 + (isPlayerBlack ? 1 : -1),
                                                  position.Item2 + 1)); // moveCaptureRight
            captureMoves.Add(new Tuple <int, int>(position.Item1 + (isPlayerBlack ? 1 : -1),
                                                  position.Item2 - 1)); // moveCaptureLeft

            foreach (Tuple <int, int> move in nonCaptureMoves)
            {
                if (cb.GetPieceInPosition(move) == null)
                {
                    allMoves.Add(move);
                }
            }

            foreach (Tuple <int, int> move in captureMoves)
            {
                ChessPiece capturedPiece = cb.GetPieceInPosition(move);
                if (capturedPiece != null && capturedPiece.GetPlayer() != GetPlayer())
                {
                    allMoves.Add(move);
                }
            }

            return(allMoves);
        }