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; } }
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); }
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); }
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); }