Beispiel #1
0
        // 実際にシミュレーションする 勝ち 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;
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        // 実際にシミュレーションする 勝ち 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;
        }