예제 #1
0
        protected void GetPlayerInfo(ResponseGameInfo gameInfo, uint playerId, string opponentId)
        {
            string enemyName = string.Empty;

            foreach (var playerInfo in gameInfo.PlayerInfo)
            {
                if (playerInfo.PlayerId == playerId)
                {
                    ActualRace   = playerInfo.RaceActual;
                    SelectedRace = playerInfo.RaceRequested;
                }
                else
                {
                    if (playerInfo.PlayerName != null)
                    {
                        enemyName = playerInfo.PlayerName;
                    }
                    EnemyRace         = playerInfo.RaceRequested;
                    EnemySelectedRace = playerInfo.RaceRequested;
                }
            }

            EnemyPlayer = EnemyPlayerService.Enemies.FirstOrDefault(e => e.Id == opponentId);
            if (opponentId == "test" && EnemyPlayer == null)
            {
                EnemyPlayer = new EnemyPlayer.EnemyPlayer {
                    ChatMatches = new List <string>(), Games = new List <Game>(), Id = opponentId, Name = "test"
                };
            }
            if (EnemyPlayer == null)
            {
                EnemyPlayer = new EnemyPlayer.EnemyPlayer {
                    ChatMatches = new List <string>(), Games = new List <Game>(), Id = opponentId, Name = enemyName
                };
            }
        }
예제 #2
0
        public List <string> GetBestBuild(EnemyPlayer.EnemyPlayer enemyBot, List <List <string> > buildSequences, string map, List <EnemyPlayer.EnemyPlayer> enemyBots, Race enemyRace)
        {
            List <string> debugMessage = new List <string>();

            debugMessage.Add($"Choosing build against {enemyBot.Name} - {enemyBot.Id} on {map}");
            Console.WriteLine($"Choosing build against {enemyBot.Name} - {enemyBot.Id} on {map}");

            var bestBuildSequence = buildSequences.First();

            var    mapGames   = enemyBot.Games.Where(g => g.MapName == map).Where(g => g.EnemyRace == enemyRace); // it is possible a bot could be updated and change races on the ladder
            Record bestRecord = null;                                                                             //GetSequenceRecord(mapGames, bestBuildSequence);
            //Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
            //debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
            var record = GetRecord(mapGames);

            Console.WriteLine($"Same enemy, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            debugMessage.Add($"Same enemy, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            if (mapGames.Count() > 0)
            {
                // check games on this map
                foreach (var buildSequence in buildSequences)
                {
                    var buildRecord = GetSequenceRecord(mapGames, buildSequence);
                    if (BetterBuild(bestRecord, buildRecord))
                    {
                        bestBuildSequence = buildSequence;
                        bestRecord        = buildRecord;
                        Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                        debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                    }
                }
            }

            record = GetRecord(enemyBot.Games.Where(g => g.EnemyRace == enemyRace));
            Console.WriteLine($"Same enemy, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            debugMessage.Add($"Same enemy, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            if (bestRecord == null || bestRecord.Wins.Count() == 0)
            {
                // check games on other maps
                foreach (var buildSequence in buildSequences)
                {
                    if (GetSequenceRecord(mapGames, buildSequence).Losses.Count() > 0)
                    {
                        continue;
                    }
                    var buildRecord = GetSequenceRecord(enemyBot.Games.Where(g => g.EnemyRace == enemyRace), buildSequence);
                    Debug.WriteLine($"{string.Join(" ", buildSequence)} {buildRecord.Wins.Count()}-{buildRecord.Ties.Count()}-{buildRecord.Losses.Count()}");
                    if (BetterBuild(bestRecord, buildRecord))
                    {
                        bestBuildSequence = buildSequence;
                        bestRecord        = buildRecord;
                        Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                        debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                    }
                }
            }

            record = GetRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace).Where(g => g.MapName == map));
            Console.WriteLine($"All enemies, same race, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            debugMessage.Add($"All enemies, same race, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            if (bestRecord.Wins.Count() == 0)
            {
                // check games on this map from other bots of the same race
                foreach (var buildSequence in buildSequences)
                {
                    if (GetSequenceRecord(mapGames, buildSequence).Losses.Count() > 0)
                    {
                        continue;
                    }
                    var buildRecord = GetSequenceRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace).Where(g => g.MapName == map), buildSequence);
                    if (BetterBuild(bestRecord, buildRecord))
                    {
                        bestBuildSequence = buildSequence;
                        bestRecord        = buildRecord;
                        Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                        debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                    }
                }
            }

            record = GetRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace));
            Console.WriteLine($"All enemies, same race, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            debugMessage.Add($"All enemies, same race, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}");
            if (bestRecord.Wins.Count() == 0)
            {
                // check games on other maps from other bots of the same race
                foreach (var buildSequence in buildSequences)
                {
                    if (GetSequenceRecord(mapGames, buildSequence).Losses.Count() > 0)
                    {
                        continue;
                    }
                    var buildRecord = GetSequenceRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace), buildSequence);
                    if (BetterBuild(bestRecord, buildRecord))
                    {
                        bestBuildSequence = buildSequence;
                        bestRecord        = buildRecord;
                        Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                        debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}");
                    }
                }
            }

            Console.WriteLine($"Chosen Build Sequence: {string.Join(" ", bestBuildSequence)}");
            debugMessage.Add($"Chosen Build Sequence: {string.Join(" ", bestBuildSequence)}");
            Console.WriteLine($"Record: Wins: {bestRecord.Wins.Count()} Losses: {bestRecord.Losses.Count()} Ties: {bestRecord.Ties.Count()}");
            debugMessage.Add($"Record: Wins: {bestRecord.Wins.Count()} Losses: {bestRecord.Losses.Count()} Ties: {bestRecord.Ties.Count()}");
            //ChatManager.SendDebugChatMessages(debugMessage);

            return(bestBuildSequence);
        }