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

            foreach (Location locFrom in board.GetPieces(PieceColor.White))
            {
                foreach (Location locTo in board.Get(locFrom).Piece.GetMoves(locFrom, board))
                {
                    var old = board.Get(locTo);
                    board.Set(locTo, board.Get(locFrom));
                    board.Set(locFrom, CellContent.Empty);
                    if (!IsBad())
                    {
                        hasMoves = true;
                    }
                    board.Set(locFrom, board.Get(locTo));
                    board.Set(locTo, old);
                }
            }
            if (isCheck)
            {
                if (hasMoves)
                {
                    Result = "check";
                }
                else
                {
                    Result = "mate";
                }
            }
            else
            if (hasMoves)
            {
                Result = "ok";
            }
            else
            {
                Result = "stalemate";
            }
        }
Ejemplo n.º 2
0
        private bool WhiteHasSafeMoves(Board board)
        {
            foreach (var pieceLocation in board.GetPieces(PieceColor.White))
            {
                if (board.Get(pieceLocation).Piece.GetMoves(pieceLocation, board).Any(moveTo => IsSafeMove(board, pieceLocation, moveTo)))
                {
                    return true;
                }
            }

            return false;
        }
Ejemplo n.º 3
0
 private bool WhiteKingHasCheck(Board board)
 {
     foreach (var location in board.GetPieces(PieceColor.Black))
     {
         var cell = board.Get(location);
         var moves = cell.Piece.GetMoves(location, board);
         if (moves.Any(destination => board.Get(destination).Is(PieceColor.White, Piece.King)))
         {
             return true;
         }
     }
     return false;
 }