Beispiel #1
0
        private static void PlayGame(GameManager gameManager, GameStateStats gameStateStats, List <string> gameArchive, DepthFirstSearch depthFirstSearch, ComputerPlayer[] computerPlayers)
        {
            while (!gameManager.IsGameOver)
            {
                if (!gameManager.HasPlays)
                {
                    gameManager.NextTurn();
                    continue;
                }

                short?computerPlayIndex = null;

                gameStateStats.GenerateStats(gameManager, gameArchive);

                DepthFirstSearch.AnalysisNodeCollection.ClearMemory();
                depthFirstSearch.GetPlayWithBook(gameManager, gameStateStats, computerPlayers[gameManager.PlayerIndex], ref computerPlayIndex);

                //Console.Write(gameManager.Turn);
                //gameManager.Draw();
                //Console.WriteLine("Play " + computerPlayIndex.ToAlgebraicNotation());

                gameManager.PlacePiece(computerPlayIndex);
                gameManager.NextTurn();
            }
        }
Beispiel #2
0
        public void FullySymmetryTest()
        {
            var gameArchive = new List <string> {
                @"\MBJC[]ZUV^DRQbYcIOdkme<XiNn@HPAlj8aF_=GWf5:ogE;243>h`70?619,W",
                @"\MBJC[]ZUV^DRQbYcIOdkmeji<AW_nHgP:aflh2`X9o@031N8;4EG=5F?>76,B",
                @"\MBJC[]ZUV^DRQbYcIOe@HdmNjA<klPX`:ahif=WE;F8on4239g_0156?>7G,0",
                @"\MBJC[]ZUV^DRQbYcIWdkme<Xj@NiHPA8n9:a0l`ohGfFE=Og_215643;>7?,W",
                @"\MBJC[]ZUV^DRQbYceIdm_=AF<NEW;Xkgj43HP5621:Ofo@ln809?>7G`aih,B",
                @"\MBJC[]ZUV^DRQbc=eY;djkl<XOA3I@:25HiNF41E6GW>P`9_fgah?708onm,B",
                @"\MBJC[]ZUV^DRQbcY;OdlekXmAHfNWFEGI<543=6:@P29>7?1`hjon_gia80,B",
            };

            var gameManager = new GameManager();

            var positionStats = new GameStateStats();

            var canDraw        = false;
            var statsAvailable = false;

            positionStats.GenerateStats(gameManager, gameArchive, ref canDraw, ref statsAvailable);

            Assert.IsTrue(positionStats.PlayStats.ContainsKey((short)"e6".ToIndex()));
            Assert.IsTrue(positionStats.PlayStats.ContainsKey((short)"d3".ToIndex()));
            Assert.IsTrue(positionStats.PlayStats.ContainsKey((short)"c4".ToIndex()));
            Assert.IsTrue(positionStats.PlayStats.ContainsKey((short)"f5".ToIndex()));
        }
Beispiel #3
0
    void GeneratePositionStats()
    {
        if (IsReplaying)
        {
            return;
        }

        var position = _gameManager.Plays.ToChars();

        if (!_positionStats.ContainsKey(position))
        {
            _statsAvailable = false;
            var gameStateStats = new GameStateStats();
            _positionStats.Add(position, gameStateStats);
            var thread = new Thread(() => gameStateStats.GenerateStats(_gameManager, GameArchive, ref _canDrawStats, ref _statsAvailable));
            thread.Start();
        }
        else
        {
            _canDrawStats = true;
        }
    }
Beispiel #4
0
        public void Test()
        {
            var gameArchive = new List <string> {
                @"\MBJC[]ZUV^DRQbYcIOdkme<XiNn@HPAlj8aF_=GWf5:ogE;243>h`70?619,W",
                @"\MBJC[]ZUV^DRQbYcIOdkmeji<AW_nHgP:aflh2`X9o@031N8;4EG=5F?>76,B",
                @"\MBJC[]ZUV^DRQbYcIOe@HdmNjA<klPX`:ahif=WE;F8on4239g_0156?>7G,0",
                @"\MBJC[]ZUV^DRQbYcIWdkme<Xj@NiHPA8n9:a0l`ohGfFE=Og_215643;>7?,W",
                @"\MBJC[]ZUV^DRQbYceIdm_=AF<NEW;Xkgj43HP5621:Ofo@ln809?>7G`aih,B",
                @"\MBJC[]ZUV^DRQbc=eY;djkl<XOA3I@:25HiNF41E6GW>P`9_fgah?708onm,B",
                @"\MBJC[]ZUV^DRQbcY;OdlekXmAHfNWFEGI<543=6:@P29>7?1`hjon_gia80,B",
            };

            var positionStats = new GameStateStats();

            var playStats = positionStats.GenerateStats(@"\MBJC[]ZUV^DRQb", gameArchive);

            Assert.IsNotNull(playStats['Y'.ToIndex()]);
            Assert.AreEqual(5, playStats['Y'.ToIndex()].SubsetCount);
            Assert.AreEqual(2, playStats['Y'.ToIndex()].BlackWins);

            Assert.IsNotNull(playStats['c'.ToIndex()]);
            Assert.AreEqual(2, playStats['c'.ToIndex()].SubsetCount);
        }