/// <summary> /// Wykonujemy symulacje /// </summary> /// <returns></returns> private double Rollout(MctsNode node, int numberOfLastKingMovesWithoutBeat) { int result = 0; CheckersBoard board = node.Board; PieceColor color = node.Color; while (true) { var moves = board.GetAllPossibleMoves(color); if (moves.Count > 0) { var move = moves[RandomGenerator.Next(0, moves.Count - 1)]; board = board.GetBoardAfterMove(move); if (move.OldPiece.IsKing && (move.BeatedPieces == null || move.BeatedPieces.Count == 0)) { numberOfLastKingMovesWithoutBeat++; } else { numberOfLastKingMovesWithoutBeat = 0; } if (numberOfLastKingMovesWithoutBeat > 49) { return(0.5); } } else { result = color == PieceColor.Black ? 1 : -1; break; } color = color == PieceColor.Black ? PieceColor.White : PieceColor.Black; } return(result); }