Example #1
0
        /// <summary>
        /// Sets the piece on a board square. Don't call this function to update bord when moving a piece,
        /// only call it to place one piece directly on board.
        /// </summary>
        /// <param name="square">The square to place a piece.</param>
        /// <param name="piece">The piece to place. To remove a piece use "Piece.None".</param>
        public void PlacePiece(Square square, Piece piece)
        {
            //Hash out current piece on square
            if (m_squares[(int)square] != Piece.None)
            {
                m_boardHash.HashFlipPieceSquare(m_squares[(int)square], square);
            }

            //Hash in new piece
            if (piece != Piece.None)
            {
                m_boardHash.HashFlipPieceSquare(piece, square);
            }

            //Update quick indexes
            switch (GetPieceColor(piece))
            {
            case PieceColor.White:
                m_whiteLocationList.PlacePiece(square);
                m_blackLocationList.RemovePiece(square);
                break;

            case PieceColor.Black:
                m_blackLocationList.PlacePiece(square);
                m_whiteLocationList.RemovePiece(square);
                break;

            case PieceColor.None:
                m_whiteLocationList.RemovePiece(square);
                m_blackLocationList.RemovePiece(square);
                break;
            }

            //Place piece on board
            m_squares[(int)square] = piece;

            //and update king location
            if (piece == Piece.WhiteKing)
            {
                m_whiteKingLocation = square;
            }

            if (piece == Piece.BlackKing)
            {
                m_blackKingLocation = square;
            }
        }