// 実際にシミュレーションする 勝ち 1 引き分け 0.5 負け 0 // 自分相手の手はランダム public float SimulateRandomPlay(eStoneType player) { GameTree node = GameTree; int n = node.GetEnableMoveNodes().Count; while (n != 0) { node = new GameTree(node.GetEnableMoveNodes()[Random.Range(0, n)]); n = node.GetEnableMoveNodes().Count; } int ret = ReversiUtils.JudgeResult(node.Board); if (player == eStoneType.White) ret *= -1; return ret / 2f + 0.5f; }
private int SimulateRandomPlay(GameTree tree, eStoneType player) { GameTree node = tree; int n = node.GetEnableMoveNodes().Count; // ゲームが終了するまでやる while(n != 0) { node = new GameTree(node.GetEnableMoveNodes()[Random.Range(0, n)]); n = node.GetEnableMoveNodes().Count; } int ret = ReversiUtils.JudgeResult(node.Board); if (player == eStoneType.White) ret *= -1; return ret; }
// 実際にシミュレーションする 勝ち 1 引き分け 0.5 負け 0 // 相手の手法を引数で渡す public float SimulateSelectedPlay(eStoneType player, BasePlayer opponent) { GameTree node = GameTree; int n = node.GetEnableMoveNodes().Count; while(n != 0) { // 自分の番ならランダムに 相手の番なら指定した手法を用いて考える if(node.StoneType == player) node = new GameTree(node.GetEnableMoveNodes()[Random.Range(0, n)]); else node = opponent.Play(node); n = node.GetEnableMoveNodes().Count; } int ret = ReversiUtils.JudgeResult(node.Board); if (player == eStoneType.White) ret *= -1; return ret / 2f + 0.5f; }