Ejemplo n.º 1
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var isCheck  = IsCheckFor(PieceColor.White);
            var hasMoves = false;

            foreach (var locFrom in board.GetPiecesLocations(PieceColor.White))
            {
                foreach (var locTo in board.GetPiece(locFrom).GetMoves(locFrom, board))
                {
                    var old = board.GetPiece(locTo);
                    board.Set(locTo, board.GetPiece(locFrom));
                    board.Set(locFrom, null);
                    if (!IsCheckFor(PieceColor.White))
                    {
                        hasMoves = true;
                    }
                    board.Set(locFrom, board.GetPiece(locTo));
                    board.Set(locTo, old);
                }
            }
            if (isCheck)
            {
                ChessStatus = hasMoves ? ChessStatus.Check : ChessStatus.Mate;
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 2
0
        // Определяет мат, шах или пат разным.
        public void CalculateChessStatus(PieceColor color)
        {
            //board = newBoard;
            var isCheck  = IsCheckForKing(color);
            var hasMoves = HasMoves(color);

            if (isCheck)
            {
                if (hasMoves)
                {
                    ChessStatus = ChessStatus.Check;
                }
                else
                {
                    ChessStatus = ChessStatus.Mate;
                }
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 3
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus(PieceColor playerColor = PieceColor.White)
        {
            var isCheck  = IsCheck(playerColor);
            var hasMoves = false;

            foreach (var startLocation in board.GetPiecesPositions(playerColor))
            {
                foreach (var nextPossibleLocation in board.GetPiece(startLocation).GetMoves(startLocation, board))
                {
                    var old = board.GetPiece(nextPossibleLocation);
                    board.Set(nextPossibleLocation, board.GetPiece(startLocation));
                    board.Set(startLocation, null);
                    if (!IsCheck(playerColor))
                    {
                        hasMoves = true;
                    }
                    board.Set(startLocation, board.GetPiece(nextPossibleLocation));
                    board.Set(nextPossibleLocation, old);
                }
            }

            if (isCheck)
            {
                ChessStatus = hasMoves ? ChessStatus.Check : ChessStatus.Mate;
            }
            else
            {
                ChessStatus = hasMoves ? ChessStatus.Ok : ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 4
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus(PieceColor color)
        {
            var isCheck  = IsCheck(color);
            var hasMoves = HasMoves();

            ChessStatus = GetChessStatus(isCheck, hasMoves);
        }
Ejemplo n.º 5
0
        public void CalculateChessStatus(PieceColor color)
        {
            Boolean isCheck  = IsCheck(color);
            Boolean hasMoves = HasMoves(color);

            ChessStatus = isCheck switch
            {
                true when hasMoves => ChessStatus.Check,
                          true => ChessStatus.Mate,
                          false when hasMoves => ChessStatus.Ok,
                          false => ChessStatus.Stalemate
            };
        }
Ejemplo n.º 6
0
        public void CalculateChessStatus(PieceColor color)
        {
            var isCheck  = IsCheck(color);
            var hasMoves = HasMoves(color);

            if (isCheck)
            {
                ChessStatus = hasMoves ? ChessStatus.Check : ChessStatus.Mate;
            }
            else
            {
                ChessStatus = hasMoves ? ChessStatus.Ok : ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 7
0
 private static void SetStatus(bool isCheck, bool hasMoves)
 {
     if (isCheck)
     {
         ChessStatus = hasMoves ? ChessStatus.Check : ChessStatus.Mate;
     }
     else if (hasMoves)
     {
         ChessStatus = ChessStatus.Ok;
     }
     else
     {
         ChessStatus = ChessStatus.Stalemate;
     }
 }
Ejemplo n.º 8
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var hasMoves = HasMoves();

            if (IsCheckForWhite())
            {
                ChessStatus = hasMoves ? ChessStatus.Check : ChessStatus.Mate;
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 9
0
        // Определяет мат, шах или пат белым.
        public static ChessStatus CalculateChessStatus(PieceColor color)
        {
            var isCheck  = IsCheck(color);
            var hasMoves = DoesKingHasMoves(color);

            foreach (var locFrom in board.GetPieces(PieceColor.White))
            {
                foreach (var locTo in board.GetPiece(locFrom).GetMoves(locFrom, board))
                {
                    var old = board.GetPiece(locTo);
                    board.Set(locTo, board.GetPiece(locFrom));
                    board.Set(locFrom, null);
                    if (!IsCheck(color))
                    {
                        hasMoves = true;
                    }
                    board.Set(locFrom, board.GetPiece(locTo));
                    board.Set(locTo, old);
                }
            }

            if (isCheck)
            {
                if (hasMoves)
                {
                    ChessStatus = ChessStatus.Check;
                }
                else
                {
                    ChessStatus = ChessStatus.Mate;
                }
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }

            return(ChessStatus);
        }
Ejemplo n.º 10
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var isCheck  = IsCheckForWhite(board);
            var hasMoves = board.GetPieces(PieceColor.White)
                           .Any(whiteLocation => board.GetPiece(whiteLocation).GetMoves(whiteLocation, board)
                                .Any(locTo => HasSafeMoves(whiteLocation, locTo, false)));

            if (isCheck)
            {
                ChessStatus = hasMoves ? ChessStatus.Check : ChessStatus.Mate;
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 11
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var isCheck = IsCheckForWhite(board);

            var hasMoves = board.GetPieces(PieceColor.White)
                           .Any(whiteLocation =>
                                board.GetPiece(whiteLocation)
                                .GetMoves(whiteLocation, board)
                                .Any(x => CheckForSafeMoves(whiteLocation, x)));

//			if (isCheck)
//				if (hasMoves)
//					ChessStatus = ChessStatus.Check;
//				else ChessStatus = ChessStatus.Mate;
//			else if (hasMoves) ChessStatus = ChessStatus.Ok;
//			else ChessStatus = ChessStatus.Stalemate;
            if (isCheck && hasMoves)
            {
                ChessStatus = ChessStatus.Check;
            }
        }
Ejemplo n.º 12
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var isCheck  = IsCheckForWhite();
            var hasMoves = false;

            foreach (var locFrom in board.GetPieces(PieceColor.White))
            {
                foreach (var locTo in board.Get(locFrom).Piece.GetMoves(locFrom, board))
                {
                    var old = board.Get(locTo);
                    board.Set(locTo, board.Get(locFrom));
                    board.Set(locFrom, ColoredPiece.Empty);
                    if (!IsCheckForWhite())
                    {
                        hasMoves = true;
                    }
                    board.Set(locFrom, board.Get(locTo));
                    board.Set(locTo, old);
                }
            }
            if (isCheck)
            {
                if (hasMoves)
                {
                    ChessStatus = ChessStatus.Check;
                }
                else
                {
                    ChessStatus = ChessStatus.Mate;
                }
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
        }
Ejemplo n.º 13
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var isCheck  = IsCheck(PieceColor.White);
            var hasMoves = false;

            foreach (var locFrom in board.GetPieces(PieceColor.White))
            {
                foreach (var locTo in board.GetPiece(locFrom).GetMoves(locFrom, board))
                {
                    var old = board.GetPiece(locTo);
                    Exchange(locTo, locFrom, board.GetPiece(locFrom), null);
                    if (!IsCheck(PieceColor.White))
                    {
                        hasMoves = true;
                    }
                    Exchange(locFrom, locTo, board.GetPiece(locTo), old);
                }
            }
            if (isCheck)
            {
                if (hasMoves)
                {
                    ChessStatus = ChessStatus.Check;
                }
                else
                {
                    ChessStatus = ChessStatus.Mate;
                }
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
            ChessStatus = hasMoves ? isCheck ? ChessStatus.Check : ChessStatus.Mate : ChessStatus.Stalemate
        }
Ejemplo n.º 14
0
        // Определяет мат, шах или пат белым.
        public static void CalculateChessStatus()
        {
            var isCheck  = IsCheckForWhite();
            var hasMoves = false;

            foreach (var locFrom in board.GetPiecesLocations(PieceColor.White))
            {
                foreach (var locTo in board.GetPiece(locFrom).GetMoves(locFrom, board))
                {
                    var currentPiece = board.GetPiece(locTo);

                    MakeStep(locTo, locFrom);

                    hasMoves = !IsCheckForWhite();
                    MakeStep(locFrom, locTo, currentPiece);
                }
            }
            if (isCheck)
            {
                if (hasMoves)
                {
                    ChessStatus = ChessStatus.Check;
                }
                else
                {
                    ChessStatus = ChessStatus.Mate;
                }
            }
            else if (hasMoves)
            {
                ChessStatus = ChessStatus.Ok;
            }
            else
            {
                ChessStatus = ChessStatus.Stalemate;
            }
        }