Ejemplo n.º 1
0
        public static async Task GetRandomFights([NotNull] Player player, [NotNull] Player opp, [NotNull] RefreshBB refresh, int builds = 100, int positions = 200, int cores = 8)
        {
            if (Running == true)
            {
                return;
            }

            Running            = true;
            _refreshBB         = refresh;
            _refreshBB.Bplayer = player.GetString();
            _refreshBB.Bopp    = opp.GetString();

            source   = new CancellationTokenSource();
            token    = source.Token;
            _empty   = new ManualResetEvent(false);
            CORES    = cores;
            MaxValue = 0;

            BUILDS                = builds;
            POSITIONS             = positions;
            _refreshBB.TOTAL_DONE = 0;
            _refreshBB.TOTAL      = positions;

            START = DateTime.UtcNow;
            END   = DateTime.MinValue;

            _jobs_random = new BlockingCollection <int>();

            for (int i = 0; i < 40000; i++)
            {
                _jobs_random.Add(i);
            }

            for (int i = 0; i < 8; i++)
            {
                Thread thread = new Thread(OnHandlerStartRandom)
                {
                    IsBackground = true
                };                      //Mark 'false' if you want to prevent program exit until jobs finish
                thread.Start();
            }

            while (!_empty.WaitOne(1000))
            {
                Console.WriteLine(_jobs_random.Count());
                _refreshBB.Update = !_refreshBB.Update;
                if (!_jobs_random.Any())
                {
                    break;
                }
            }
            END               = DateTime.UtcNow;
            Running           = false;
            _refreshBB.Update = !_refreshBB.Update;
        }
Ejemplo n.º 2
0
        public static async Task GetBestBuild([NotNull] Player player, [NotNull] Player opp, [NotNull] RefreshBB refreshBB, int builds = 100, int positions = 200, int cores = 8)
        {
            if (Running == true)
            {
                return;
            }
            _refreshBB = refreshBB;
            _refreshBB.Init();
            Running = true;
            opp.SoftReset();
            opp.Units             = UnitPool.Units.Where(x => x.Race == opp.Race && x.Cost > 0).ToList();
            _refreshBB.Bopp       = opp.GetString();
            _refreshBB.Bplayer    = player.GetString();
            _refreshBB.BestBuild  = _refreshBB.Bplayer;
            _refreshBB.WorstBuild = _refreshBB.Bplayer;

            _player = player;
            _opp    = opp;

            source   = new CancellationTokenSource();
            token    = source.Token;
            _empty   = new ManualResetEvent(false);
            CORES    = cores;
            MaxValue = 0;

            BUILDS                = builds;
            POSITIONS             = positions;
            _refreshBB.TOTAL_DONE = 0;
            _refreshBB.TOTAL      = builds * positions + builds;

            START = DateTime.UtcNow;
            END   = DateTime.MinValue;

            _jobs_build    = new BlockingCollection <BBuildJob>();
            _jobs_position = new BlockingCollection <BBuildJob>();

            foreach (Unit unit in player.Units.Where(y => y.Status != UnitStatuses.Available))
            {
                MaxValue += unit.Cost;
            }

            GameHistory game = new GameHistory();

            game.ID          = paxgame.GetGameID();
            game.battlefield = new Battlefield();
            Player myplayer = player.SoftCopy();
            Player myopp    = opp.SoftCopy();

            game.Players.Add(myplayer);
            myplayer.Game = game;
            game.Players.Add(myopp);
            myopp.Game = game;
            myplayer.SetString(_refreshBB.Bplayer);
            _refreshBB.MineralsCurrent = myplayer.MineralsCurrent;
            myopp.SetString(_refreshBB.Bopp);
            GameService.GenFight(game).GetAwaiter().GetResult();
            StatsService.GenRoundStats(game, false).GetAwaiter().GetResult();
            Stats result    = new Stats();
            Stats oppresult = new Stats();

            result.DamageDone            = game.Stats.Last().Damage[1];
            result.MineralValueKilled    = game.Stats.Last().Killed[1];
            oppresult.DamageDone         = game.Stats.Last().Damage[0];
            oppresult.MineralValueKilled = game.Stats.Last().Killed[0];
            _refreshBB.BestStats         = result;
            _refreshBB.BestStatsOpp      = oppresult;

            for (int i = 0; i < BUILDS; i++)
            {
                BBuildJob job = new BBuildJob();
                job.PlayerBuild = _refreshBB.Bplayer;
                job.OppBuild    = _refreshBB.Bopp;
                job.Minerals    = _refreshBB.MineralsCurrent;
                _jobs_build.Add(job);
            }

            for (int i = 0; i < 1; i++)
            {
                Thread thread = new Thread(OnHandlerStartBuild)
                {
                    IsBackground = true
                };                      //Mark 'false' if you want to prevent program exit until jobs finish
                thread.Start();
            }

            for (int i = 0; i < 8; i++)
            {
                Thread thread = new Thread(OnHandlerStartPosition)
                {
                    IsBackground = true
                };                      //Mark 'false' if you want to prevent program exit until jobs finish
                thread.Start();
            }

            while (!_empty.WaitOne(1000))
            {
                Console.WriteLine(_jobs_position.Count + _jobs_build.Count);
                _refreshBB.Update = !_refreshBB.Update;
                if (!_jobs_position.Any())
                {
                    break;
                }
            }
            END               = DateTime.UtcNow;
            Running           = false;
            _refreshBB.Update = !_refreshBB.Update;
        }