Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
 }
Exemple #5
0
 public BoardCell(int row, int column, BaseChessman chessman)
     : base(row, column)
 {
     Chessman = chessman;
 }