Exemplo n.º 1
0
        // sees if we need to do enpassant
        protected bool TryEnPassant(int CurrentSquare, int TargetSquare)
        {
            Pieces.Piece CurrentPiece = (Pieces.Piece)GameData.g_CurrentGameState[CurrentSquare];

            if (CurrentPiece != null)
            {
                if (CurrentPiece.GetEnPassantMoves().Contains(TargetSquare))
                {
                    // do move
                    if (CurrentPiece.GetColor() == PColor.White)
                    {
                        GameData.g_CurrentGameState[TargetSquare - 8] = null;
                        GameData.g_CurrentGameState[CurrentSquare]    = null;
                        GameData.g_CurrentGameState[TargetSquare]     = CurrentPiece;
                        CurrentPiece.SetPosition(TargetSquare);
                        return(true);
                    }
                    // do move
                    else if (CurrentPiece.GetColor() == PColor.Black)
                    {
                        GameData.g_CurrentGameState[TargetSquare + 8] = null;
                        GameData.g_CurrentGameState[CurrentSquare]    = null;
                        GameData.g_CurrentGameState[TargetSquare]     = CurrentPiece;
                        CurrentPiece.SetPosition(TargetSquare);
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        // reset internal board to the current game state
        protected void ResetBoard()
        {
            Pieces.Piece CurrentPiece = null;

            // initialize our board
            for (int Position = 0; Position < GameData.g_StartingPositions.Length; Position++)
            {
                // create appropriate class
                switch ((PType)GameData.g_StartingPositions[Position])
                {
                case PType.BlackBishop:
                {
                    CurrentPiece = new Pieces.Bishop(PColor.Black);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.BlackKing:
                {
                    CurrentPiece = new Pieces.King(PColor.Black);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.BlackKnight:
                {
                    CurrentPiece = new Pieces.Knight(PColor.Black);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.BlackPawn:
                {
                    CurrentPiece = new Pieces.Pawn(PColor.Black);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.BlackQueen:
                {
                    CurrentPiece = new Pieces.Queen(PColor.Black);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.BlackRook:
                {
                    CurrentPiece = new Pieces.Rook(PColor.Black);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.WhiteBishop:
                {
                    CurrentPiece = new Pieces.Bishop(PColor.White);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.WhiteKing:
                {
                    CurrentPiece = new Pieces.King(PColor.White);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.WhiteKnight:
                {
                    CurrentPiece = new Pieces.Knight(PColor.White);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.WhitePawn:
                {
                    CurrentPiece = new Pieces.Pawn(PColor.White);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.WhiteQueen:
                {
                    CurrentPiece = new Pieces.Queen(PColor.White);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                case PType.WhiteRook:
                {
                    CurrentPiece = new Pieces.Rook(PColor.White);
                    CurrentPiece.SetPosition(Position);
                    break;
                }

                default:
                {
                    CurrentPiece = null;
                    break;
                }
                }

                // add piece to board
                GameData.g_CurrentGameState[Position] = CurrentPiece;
            }
        }
Exemplo n.º 3
0
        // sees if we can castle
        protected bool TryCastling(int CurrentSquare, int TargetSquare)
        {
            Pieces.Piece CurrentPiece = (Pieces.Piece)GameData.g_CurrentGameState[CurrentSquare];

            if (CurrentPiece != null)
            {
                int SquareDifference = TargetSquare - CurrentSquare;
                if (CurrentPiece.GetPieceType() == PType.WhiteKing)
                {
                    // white, long castle
                    if (SquareDifference == -2 && CurrentPiece.CanMoveTo(TargetSquare))
                    {
                        // do move
                        GameData.g_CurrentGameState[3] = GameData.g_CurrentGameState[0];
                        GameData.g_CurrentGameState[3].SetPosition(3);
                        GameData.g_CurrentGameState[0] = null;

                        GameData.g_CurrentGameState[2] = GameData.g_CurrentGameState[4];
                        GameData.g_CurrentGameState[4].SetPosition(4);
                        GameData.g_CurrentGameState[4] = null;
                        return(true);
                    }
                    // white, short castle
                    else if (SquareDifference == 2 && CurrentPiece.CanMoveTo(TargetSquare))
                    {
                        // do move
                        GameData.g_CurrentGameState[6] = GameData.g_CurrentGameState[4];
                        GameData.g_CurrentGameState[6].SetPosition(6);
                        GameData.g_CurrentGameState[4] = null;

                        GameData.g_CurrentGameState[5] = GameData.g_CurrentGameState[7];
                        GameData.g_CurrentGameState[5].SetPosition(5);
                        GameData.g_CurrentGameState[7] = null;
                        return(true);
                    }
                }
                else if (CurrentPiece.GetPieceType() == PType.BlackKing)
                {
                    // black, short castle
                    if (SquareDifference == 2 && CurrentPiece.CanMoveTo(TargetSquare))
                    {
                        // do move
                        GameData.g_CurrentGameState[61] = GameData.g_CurrentGameState[63];
                        GameData.g_CurrentGameState[61].SetPosition(61);
                        GameData.g_CurrentGameState[63] = null;

                        GameData.g_CurrentGameState[62] = GameData.g_CurrentGameState[60];
                        GameData.g_CurrentGameState[62].SetPosition(62);
                        GameData.g_CurrentGameState[60] = null;
                        return(true);
                    }
                    // black long castle
                    else if (SquareDifference == -2 && CurrentPiece.CanMoveTo(TargetSquare))
                    {
                        // do move
                        GameData.g_CurrentGameState[58] = GameData.g_CurrentGameState[60];
                        GameData.g_CurrentGameState[58].SetPosition(58);
                        GameData.g_CurrentGameState[60] = null;

                        GameData.g_CurrentGameState[59] = GameData.g_CurrentGameState[56];
                        GameData.g_CurrentGameState[59].SetPosition(59);
                        GameData.g_CurrentGameState[56] = null;
                        return(true);
                    }
                }
            }

            return(false);
        }