Example #1
0
 public ChessPiece this[ChessboardTile tile]
 {
     get
     {
         int row, column;
         ChessboardTileHelper.TileToIndexes(tile, out row, out column);
         return(this[row, column]);
     }
     set
     {
         int row, column;
         ChessboardTileHelper.TileToIndexes(tile, out row, out column);
         this[row, column] = value;
     }
 }
Example #2
0
        public bool TrySelect(ChessPlayer player, ChessboardTile tile)
        {
            int row, column;

            ChessboardTileHelper.TileToIndexes(tile, out row, out column);

            if (m_board[row, column] != null && m_board[row, column].Color == player)
            {
                m_board[row, column].Selected = true;
                m_selectedRow    = row;
                m_selectedColumn = column;
                return(true);
            }

            return(false);
        }
Example #3
0
        public bool IsUndo(ChessboardTile tile)
        {
            int row, column;

            ChessboardTileHelper.TileToIndexes(tile, out row, out column);

            if (row == m_selectedRow && column == m_selectedColumn)
            {
                m_board[m_selectedRow, m_selectedColumn].Selected = false;
                m_selectedRow    = -1;
                m_selectedColumn = -1;
                return(true);
            }

            return(false);
        }
Example #4
0
        public bool TryMove(ChessPlayer player, ChessboardTile tile)
        {
            int row, column;

            ChessboardTileHelper.TileToIndexes(tile, out row, out column);

            //Normal move
            if (m_board[m_selectedRow, m_selectedColumn].CanMove(row, column))
            {
                //Pick up the piece
                ChessPiece movingPiece = m_board[m_selectedRow, m_selectedColumn];
                m_board[m_selectedRow, m_selectedColumn] = null;
                m_selectedRow    = -1;
                m_selectedColumn = -1;

                //Update the piece
                movingPiece.Selected  = false;
                movingPiece.FirstMove = false;

                //Check for winning/losing
                if (row == m_whiteKing.CurrentRow && column == m_whiteKing.CurrentColumn)
                {
                    m_winningPlayer = ChessPlayer.Black;
                }
                if (row == m_blackKing.CurrentRow && column == m_blackKing.CurrentColumn)
                {
                    m_winningPlayer = ChessPlayer.White;
                }

                //Check for rochade (white, kingside)
                if (movingPiece == m_whiteKing && row == 0 && column == 6)
                {
                    WhiteRook rookSpot = m_board[0, 7] as WhiteRook;
                    if (rookSpot != null && rookSpot.FirstMove)
                    {
                        //We can do the rochade
                        m_board[0, 7]      = movingPiece;
                        m_board[0, 6]      = rookSpot;
                        rookSpot.FirstMove = false;
                    }
                }

                //Check for rochade (black, queenside)
                if (movingPiece == m_blackKing && row == 7 && column == 1)
                {
                    BlackRook rookSpot = m_board[7, 0] as BlackRook;
                    if (rookSpot != null && rookSpot.FirstMove)
                    {
                        //We can do the rochade
                        m_board[7, 0]      = movingPiece;
                        m_board[7, 1]      = rookSpot;
                        rookSpot.FirstMove = false;
                    }
                }

                //Check for rochade (black, kingside)
                if (movingPiece == m_blackKing && row == 7 && column == 6)
                {
                    BlackRook rookSpot = m_board[7, 7] as BlackRook;
                    if (rookSpot != null && rookSpot.FirstMove)
                    {
                        //We can do the rochade
                        m_board[7, 7]      = movingPiece;
                        m_board[7, 6]      = rookSpot;
                        rookSpot.FirstMove = false;
                    }
                }

                //Put down the piece
                m_board[row, column] = movingPiece;

                //Clear selection

                return(true);
            }

            //Rochade (white, queenside)
            if (m_board[m_selectedRow, m_selectedColumn] is WhiteKing &&
                m_whiteKing.FirstMove &&
                row == 0 &&
                column == 1 &&
                m_board[0, 1] == null &&
                m_board[0, 2] == null &&
                m_board[0, 3] == null)
            {
                WhiteRook rookSpot = m_board[0, 0] as WhiteRook;
                if (rookSpot != null && rookSpot.FirstMove)
                {
                    //Pickup the king
                    m_board[m_selectedRow, m_selectedColumn] = null;

                    //Deselect him
                    m_selectedRow        = -1;
                    m_selectedColumn     = -1;
                    m_whiteKing.Selected = false;

                    //Move
                    m_board[0, 1] = m_whiteKing;
                    m_board[0, 2] = rookSpot;

                    //Mark first moves
                    m_whiteKing.FirstMove = false;
                    rookSpot.FirstMove    = false;

                    //Teel the move was a success
                    return(true);
                }
            }

            //Rochade (white, kingside)
            if (m_board[m_selectedRow, m_selectedColumn] is WhiteKing &&
                m_whiteKing.FirstMove &&
                row == 0 &&
                column == 6 &&
                m_board[0, 5] == null &&
                m_board[0, 6] == null)
            {
                WhiteRook rookSpot = m_board[0, 7] as WhiteRook;
                if (rookSpot != null && rookSpot.FirstMove)
                {
                    //Pickup the king
                    m_board[m_selectedRow, m_selectedColumn] = null;

                    //Deselect him
                    m_selectedRow        = -1;
                    m_selectedColumn     = -1;
                    m_whiteKing.Selected = false;

                    //Move
                    m_board[0, 6] = m_whiteKing;
                    m_board[0, 5] = rookSpot;

                    //Mark first moves
                    m_whiteKing.FirstMove = false;
                    rookSpot.FirstMove    = false;

                    //Teel the move was a success
                    return(true);
                }
            }

            //Rochade (black, queenside)
            if (m_board[m_selectedRow, m_selectedColumn] is BlackKing &&
                m_blackKing.FirstMove &&
                row == 7 &&
                column == 1 &&
                m_board[7, 1] == null &&
                m_board[7, 2] == null &&
                m_board[7, 3] == null)
            {
                BlackRook rookSpot = m_board[7, 0] as BlackRook;
                if (rookSpot != null && rookSpot.FirstMove)
                {
                    //Pickup the king
                    m_board[m_selectedRow, m_selectedColumn] = null;

                    //Deselect him
                    m_selectedRow        = -1;
                    m_selectedColumn     = -1;
                    m_blackKing.Selected = false;

                    //Move
                    m_board[7, 1] = m_blackKing;
                    m_board[7, 2] = rookSpot;

                    //Mark first moves
                    m_blackKing.FirstMove = false;
                    rookSpot.FirstMove    = false;

                    //Teel the move was a success
                    return(true);
                }
            }

            //Rochade (black, kingside)
            if (m_board[m_selectedRow, m_selectedColumn] is BlackKing &&
                m_blackKing.FirstMove &&
                row == 7 &&
                column == 6 &&
                m_board[7, 5] == null &&
                m_board[7, 6] == null)
            {
                BlackRook rookSpot = m_board[7, 7] as BlackRook;
                if (rookSpot != null && rookSpot.FirstMove)
                {
                    //Pickup the king
                    m_board[m_selectedRow, m_selectedColumn] = null;

                    //Deselect him
                    m_selectedRow        = -1;
                    m_selectedColumn     = -1;
                    m_blackKing.Selected = false;

                    //Move
                    m_board[7, 6] = m_blackKing;
                    m_board[7, 5] = rookSpot;

                    //Mark first moves
                    m_blackKing.FirstMove = false;
                    rookSpot.FirstMove    = false;

                    //Teel the move was a success
                    return(true);
                }
            }

            return(false);
        }