GameStatus SwitchStatus(Color currentColor) { var enemyColor = currentColor == Color.White ? Color.Black : Color.White; var enemyKingBoardCell = King.FindKing(BoardCells, enemyColor); var enemyKingCell = new Cell(enemyKingBoardCell.Row, enemyKingBoardCell.Column); var enemyAcceptableCells = GetAllAcceptableCells(enemyColor); if (BaseChessman.IsCellUnderShah(BoardCells, enemyKingCell, enemyColor)) { if (enemyAcceptableCells.Any()) { return(currentColor == Color.White ? GameStatus.ShahForBlack : GameStatus.ShahForWhite); } return(currentColor == Color.White ? GameStatus.WhiteWin : GameStatus.BlackWin); } if (!enemyAcceptableCells.Any()) { return(currentColor == Color.White ? GameStatus.StalemateForBlack : GameStatus.StalemateForWhite); } if (AreOnlyKingOnTheBoard()) { return(GameStatus.Draw); } return(currentColor == Color.White ? GameStatus.BlackTurn : GameStatus.WhiteTurn); }
void MakeCastlingIfPossible( BaseChessman chessman, Cell oldPosition, Cell newPosition) { if (chessman.Type != ChessmenType.King || !(chessman is King)) { return; } var isCastling = Math.Abs(oldPosition.Column - newPosition.Column) == 2; if (!isCastling) { return; } var isLeftCastling = oldPosition.Column > newPosition.Column; var oldRookColumn = isLeftCastling ? 0 : 7; var newRookColumn = isLeftCastling ? 3 : 5; var rook = new Rook(chessman.Color); BoardCells[oldPosition.Row, oldRookColumn].Chessman = null; BoardCells[oldPosition.Row, newRookColumn].Chessman = rook; }
static void ChangeTypeInCasePawnAndPossible( ref BaseChessman chessman, Cell newPosition, ChessmenType?newType) { if (chessman.Type != ChessmenType.Pawn || !((Pawn)chessman).IsLastRow(newPosition.Row)) { return; } if (!newType.HasValue) { throw new ArgumentException("New type should be set"); } if (newType == ChessmenType.Pawn || newType == ChessmenType.King) { throw new ArgumentException("New type can not be Pawn or King"); } chessman = ChessmanFactory.TryToCreateChessman(chessman.Color, newType.Value); }
static void SetColor(BaseChessman chessman, int row) { chessman.Color = IsStartBlackRow(row) ? Color.Black : Color.White; }
public BoardCell(int row, int column, BaseChessman chessman) : base(row, column) { Chessman = chessman; }