示例#1
0
 public static void DispatchActionsIfPresent()
 {
     if (IsEnable)
     {
         DispatchAction action = dispatchActions.Dequeue();
         if (!action.Executed)
         {
             action.ExecuteDispatch();
         }
     }
 }
        public static void DispatchActionsIfPresent()
        {
            bool isEnable = MainThreadDispatcher.IsEnable;

            if (isEnable)
            {
                DispatchAction dispatchAction = MainThreadDispatcher.dispatchActions.Dequeue();
                bool           flag           = !dispatchAction.Executed;
                if (flag)
                {
                    dispatchAction.ExecuteDispatch();
                }
            }
        }
 protected override JobHandle OnAction(DispatchAction da, JobHandle jobHandle)
 {
     return(jobHandle);
 }
示例#4
0
 protected void TestHandler(DispatchAction da) => dispatchedAction = da;
示例#5
0
    public List <string> GetMoves()
    {
        //
        Timer.Reset();
        Timer.Start();
        updateStun();
        updateContestedGhosts();
        updateExploringBoard();

        //Dispatch stunned
        Dashboard dashboard = Dashboards[Round];

        dashboard.Strategies.Add("Strategies for round " + Round);
        foreach (string busterID in BusterIDs)
        {
            int state = Entities[busterID].Positions[Round].State;
            if (state == StateStunned)
            {
                DispatchAction action = new DispatchAction()
                {
                    Type = DispatchActionType.Stunned
                };
                dashboard.DispatchActions[busterID] = action;
            }
        }

        //Dispatch stun - for every non-stunned enemy buster, find the corresponding stun-capable buster
        if (dashboard.StunTimers.Count(d => d.Value == 0) > 0) //Has available stun quota
        {
            int           enemyTeamID    = 1 - TeamID;
            List <Entity> roamingEnemies = Entities
                                           .Where(d => d.Value.Type == enemyTeamID && d.Value.Positions.ContainsKey(Round))
                                           .Where(d => d.Value.Positions[Round].State != StateStunned)
                                           .OrderByDescending(e => e.Value.Positions[Round].State == StateCarrying ? 10 : e.Value.Positions[Round].State) //Stun ghost carrying busters first
                                           .Select(d => d.Value).ToList();
            foreach (Entity enemyBuster in roamingEnemies)
            {
                List <string> nonDispatchedAvailableBusters = BusterIDs
                                                              .Where(bid => !dashboard.DispatchActions.ContainsKey(bid))
                                                              .Where(bid => dashboard.StunTimers[bid] == 0).ToList();
                foreach (string busterID in nonDispatchedAvailableBusters)
                {
                    EntityState es       = Entities[busterID].Positions[Round];
                    EntityState esEnemy  = enemyBuster.Positions[Round];
                    int         distance = Distance(es.X, es.Y, esEnemy.X, esEnemy.Y);
                    if (distance < LimStunMax)
                    {
                        DispatchAction action = new DispatchAction()
                        {
                            Type = DispatchActionType.Stun, EntityID = enemyBuster.ID
                        };
                        dashboard.DispatchActions[busterID] = action;
                        addStun(busterID, "" + (1 - TeamID) + "," + enemyBuster.ID);
                        break;
                    }
                }
            }
        }

        //Release and Return
        foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
        {
            EntityState es = Entities[busterID].Positions[Round];
            if (es.State == StateCarrying)
            {
                int distance = distanceFromHome(es.X, es.Y);
                //Release
                if (distance < LimBaseRange)
                {
                    DispatchAction releaseAction = new DispatchAction()
                    {
                        Type = DispatchActionType.Release, EntityID = es.Value
                    };
                    dashboard.DispatchActions[busterID] = releaseAction;
                    string key = "-1" + "," + es.Value;
                    Entities[key].Captured = true;
                    continue;
                }
                //Return
                DispatchAction returnAction = new DispatchAction()
                {
                    Type = DispatchActionType.Return, Target = Home, EntityID = es.Value
                };
                dashboard.DispatchActions[busterID] = returnAction;
            }
        }

        //Intercept

        //Bust
        int LimBustStamina = 16;
        int limBustStamina = LimBustStamina;

        if (Round > 32)
        {
            limBustStamina = 100;
        }
        if (Round > 20 && GhostCount < 10)
        {
            limBustStamina = 100;
        }
        if (Entities.Count(e => e.Value.Captured) > (GhostCount / 4))
        {
            limBustStamina = 100;
        }
        List <Entity> visibleGhosts = Entities
                                      .Where(d => !d.Value.Captured && d.Value.Type == GhostTypeID && d.Value.Positions.ContainsKey(Round))
                                      .Where(d => d.Value.Positions[Round].State < limBustStamina)
                                      .OrderBy(d => d.Value.Positions[Round].State)
                                      .Select(d => d.Value).ToList();

        foreach (Entity ghost in visibleGhosts)
        {
            foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
            {
                EntityState es       = Entities[busterID].Positions[Round];
                EntityState esGhost  = ghost.Positions[Round];
                int         distance = Distance(es.X, es.Y, esGhost.X, esGhost.Y);
                if (distance > LimBustMin && distance < LimBustMax)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Bust, EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    if (esGhost.State < 10)
                    {
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
                if (distance > LimBustMax && distance < LimVisibility)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(esGhost.X, esGhost.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
                if (distance > LimBustMax && distance < 6000 && esGhost.State > 5)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(esGhost.X, esGhost.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
                if (esGhost.State <= 1)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(esGhost.X, esGhost.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
                if (distance < LimBustMin)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(es.X, es.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
            }
        }

        //Contest
        foreach (int ghostID in dashboard.ContestedGhostsIDs)
        {
            //Number of busters
            EntityState es      = Entities.First(e => e.Value.Type == GhostTypeID && e.Value.ID == ghostID).Value.Positions[Round];
            int         busters = es.Value;
            //Number of our busters
            int numOurBusters   = Dashboards[Round - 1].DispatchActions.Count(a => (a.Value.Type == DispatchActionType.Bust) && (a.Value.EntityID == ghostID));
            int numEnemyBusters = busters - numOurBusters;
            //
            if (numEnemyBusters == busters)
            {
                continue;
            }
            //
            if (numEnemyBusters >= numOurBusters)
            {
                int required = numEnemyBusters - numOurBusters + 1;
                for (int i = 0; i < required; i++)
                {
                    foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
                    {
                        DispatchAction action = new DispatchAction()
                        {
                            Type = DispatchActionType.Contest, Target = new Point(es.X, es.Y), EntityID = ghostID
                        };
                        dashboard.DispatchActions[busterID] = action;
                        break;
                    }
                }
            }
        }

        //Find
        List <Entity> roundGhosts = Entities
                                    .Where(d => !d.Value.Captured && d.Value.Type == GhostTypeID && d.Value.Positions.ContainsKey(Round))
                                    .OrderBy(d => d.Value.Positions[Round].State)
                                    .Select(d => d.Value).ToList();
        List <int>         roundGhostIDs         = roundGhosts.Select(e => e.ID).ToList();
        List <GhostMemory> roundGhostMemories    = dashboard.GhostMemories;
        List <GhostMemory> previousGhostMemories = new List <GhostMemory>();

        foreach (Entity e in roundGhosts)
        {
            //
            if (dashboard.DispatchActions.Where(d => d.Value.EntityID == e.ID).Count() > 0)
            {
                continue;
            }
            //
            EntityState esGhost = e.Positions[Round];
            //
            string closestBusterID = BusterIDs
                                     .OrderBy(bid => Distance(esGhost.X, esGhost.Y, Entities[bid].Positions[Round].X, Entities[bid].Positions[Round].Y))
                                     .First();
            EntityState esBuster = Entities[closestBusterID].Positions[Round];
            Point       p        = ProjectGhost(esGhost.X, esGhost.Y, esBuster.X, esBuster.Y);
            //
            roundGhostMemories.Add(new GhostMemory()
            {
                GhostID = e.ID, Round = Round, X = p.X, Y = p.Y, Stamina = esGhost.State
            });
        }
        if (Round > 0)
        {
            previousGhostMemories = Dashboards[Round - 1].GhostMemories;
        }
        foreach (GhostMemory gm in previousGhostMemories)
        {
            //Updated this round so do not use the memory
            if (roundGhostIDs.Contains(gm.GhostID))
            {
                continue;
            }
            //Check if the point is within buster range
            bool found = false;
            foreach (string busterID in BusterIDs)
            {
                EntityState buster   = Entities[busterID].Positions[Round];
                int         distance = Distance(gm.X, gm.Y, buster.X, buster.Y);
                if (distance < LimVisibility)
                {
                    found = true; break;
                }
            }
            //Outside of buster visibility, carry over
            if (!found)
            {
                roundGhostMemories.Add(gm);
            }
        }
        foreach (GhostMemory gm in roundGhostMemories.Where(g => g.Stamina < limBustStamina).OrderBy(g => g.Stamina))
        {
            foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
            {
                DispatchAction action = new DispatchAction()
                {
                    Type   = DispatchActionType.Find,
                    Target = new Point(Math.Max(0, gm.X - LimBustMin + 100), Math.Max(0, gm.Y - LimBustMin + 100)), EntityID = gm.GhostID
                };
                dashboard.DispatchActions[busterID] = action;
                break;
            }
        }

        //Roam
        foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
        {
            Point          random = getExplore(busterID);
            DispatchAction action = new DispatchAction()
            {
                Type = DispatchActionType.Roam, Target = random
            };
            dashboard.DispatchActions[busterID] = action;
        }

        // MOVE x y | BUST id | RELEASE | STUN
        List <string> moves = new List <string>();

        foreach (string busterID in BusterIDs)
        {
            DispatchAction action = dashboard.DispatchActions[busterID];
            if (action.Type == DispatchActionType.Stunned)
            {
                EntityState stunnedBuster = Entities[busterID].Positions[Round];
                moves.Add("MOVE " + stunnedBuster.X + " " + stunnedBuster.Y + " Stunned");
            }
            if (action.Type == DispatchActionType.Stun)
            {
                moves.Add("STUN " + action.EntityID + " Stun! " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Return)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Return " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Release)
            {
                moves.Add("RELEASE" + " Release " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Intercept)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Intercept! " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Bust)
            {
                moves.Add("BUST " + action.EntityID + " Bust " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Contest)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Contest " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Chase)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Chase " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Herd)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Herd " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Find)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Find " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Roam)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Roam");
            }
        }

        //
        foreach (string line in dashboard.Predictions)
        {
            Console.Error.WriteLine(line);
        }
        foreach (string line in dashboard.Updates)
        {
            Console.Error.WriteLine(line);
        }
        //
        string stunTimer = "";

        foreach (string busterID in BusterIDs)
        {
            stunTimer += "(" + busterID + ")->" + dashboard.StunTimers[busterID] + " ";
        }
        stunTimer += "|| ";
        foreach (string busterID in EnemyBusterIDs)
        {
            stunTimer += "(" + busterID + ")->" + dashboard.StunTimers[busterID] + " ";
        }
        Console.Error.WriteLine("Timers " + stunTimer);
        //
        string contestedGhosts = "";

        foreach (int ghostID in dashboard.ContestedGhostsIDs)
        {
            EntityState es      = Entities.First(e => e.Value.Type == GhostTypeID && e.Value.ID == ghostID).Value.Positions[Round];
            int         busters = es.Value;
            contestedGhosts += "" + ghostID + "->" + busters + " ";
        }
        Console.Error.WriteLine("Contested " + contestedGhosts);
        //
        foreach (string line in dashboard.Strategies)
        {
            Console.Error.WriteLine(line);
        }
        Timer.Stop();
        long time = Timer.ElapsedMilliseconds;

        Console.Error.WriteLine("Timer " + time + "ms");
        //
        foreach (GhostMemory gm in dashboard.GhostMemories)
        {
            Console.Error.WriteLine("GM " + gm.GhostID + " " + gm.Round + " (" + gm.X + "," + gm.Y + ") " + gm.Stamina);
        }
        //
        Round++; return(moves);
    }
示例#6
0
    public List <string> GetMoves()
    {
        //
        updateStun();
        updateContestedGhosts();
        updateExploringBoard();

        //Dispatch stunned
        Dashboard dashboard = Dashboards[Round];

        dashboard.Strategies.Add("Strategies for round " + Round);
        foreach (string busterID in BusterIDs)
        {
            int state = Entities[busterID].Positions[Round].State;
            if (state == StateStunned)
            {
                DispatchAction action = new DispatchAction()
                {
                    Type = DispatchActionType.Stunned
                };
                dashboard.DispatchActions[busterID] = action;
            }
        }

        //Dispatch stun - for every non-stunned enemy buster, find the corresponding stun-capable buster
        if (dashboard.StunTimers.Count(d => d.Value == 0) > 0) //Has available stun quota
        {
            int           enemyTeamID    = 1 - TeamID;
            List <Entity> roamingEnemies = Entities
                                           .Where(d => d.Value.Type == enemyTeamID && d.Value.Positions.ContainsKey(Round))
                                           .Where(d => d.Value.Positions[Round].State != StateStunned)
                                           .OrderByDescending(e => e.Value.Positions[Round].State == StateCarrying ? 10 : e.Value.Positions[Round].State) //Stun ghost carrying busters first
                                           .Select(d => d.Value).ToList();
            foreach (Entity enemyBuster in roamingEnemies)
            {
                List <string> nonDispatchedAvailableBusters = BusterIDs
                                                              .Where(bid => !dashboard.DispatchActions.ContainsKey(bid))
                                                              .Where(bid => dashboard.StunTimers[bid] == 0).ToList();
                foreach (string busterID in nonDispatchedAvailableBusters)
                {
                    EntityState es       = Entities[busterID].Positions[Round];
                    EntityState esEnemy  = enemyBuster.Positions[Round];
                    int         distance = Distance(es.X, es.Y, esEnemy.X, esEnemy.Y);
                    if (distance < LimStunMax)
                    {
                        DispatchAction action = new DispatchAction()
                        {
                            Type = DispatchActionType.Stun, EntityID = enemyBuster.ID
                        };
                        dashboard.DispatchActions[busterID] = action;
                        addStun(busterID, "" + (1 - TeamID) + "," + enemyBuster.ID);
                        break;
                    }
                }
            }
        }

        //Release and Return
        foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
        {
            EntityState es = Entities[busterID].Positions[Round];
            if (es.State == StateCarrying)
            {
                int distance = distanceFromHome(es.X, es.Y);
                //Release
                if (distance < LimBaseRange)
                {
                    DispatchAction releaseAction = new DispatchAction()
                    {
                        Type = DispatchActionType.Release, EntityID = es.Value
                    };
                    dashboard.DispatchActions[busterID] = releaseAction;
                    string key = "-1" + "," + es.Value;
                    Entities[key].Captured = true;
                    continue;
                }
                //Return
                DispatchAction returnAction = new DispatchAction()
                {
                    Type = DispatchActionType.Return, Target = Home, EntityID = es.Value
                };
                dashboard.DispatchActions[busterID] = returnAction;
            }
        }

        //Intercept

        //Bust
        int LimBustStamina = 16;
        int limBustStamina = LimBustStamina;

        if (Round > 40)
        {
            limBustStamina = 100;
        }
        if (Round > 20 && GhostCount < 10)
        {
            limBustStamina = 100;
        }
        if (Entities.Count(e => e.Value.Captured) > (GhostCount / 4))
        {
            limBustStamina = 100;
        }
        List <Entity> visibleGhosts = Entities
                                      .Where(d => !d.Value.Captured && d.Value.Type == GhostTypeID && d.Value.Positions.ContainsKey(Round))
                                      .Where(d => d.Value.Positions[Round].State < limBustStamina)
                                      .OrderBy(d => d.Value.Positions[Round].State)
                                      .Select(d => d.Value).ToList();

        foreach (Entity ghost in visibleGhosts)
        {
            foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
            {
                EntityState es       = Entities[busterID].Positions[Round];
                EntityState esGhost  = ghost.Positions[Round];
                int         distance = Distance(es.X, es.Y, esGhost.X, esGhost.Y);
                if (distance > LimBustMin && distance < LimBustMax)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Bust, EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    if (esGhost.State < 10)
                    {
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
                if (distance > LimBustMax && distance < LimVisibility)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(esGhost.X, esGhost.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
                if (distance > LimBustMax && distance < 6000 && esGhost.State > 15)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(esGhost.X, esGhost.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
                if (esGhost.State <= 1)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(esGhost.X, esGhost.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
                if (distance < LimBustMin)
                {
                    DispatchAction action = new DispatchAction()
                    {
                        Type = DispatchActionType.Chase, Target = new Point(es.X, es.Y), EntityID = ghost.ID
                    };
                    dashboard.DispatchActions[busterID] = action;
                    continue;
                }
            }
        }

        //Contest
        foreach (int ghostID in dashboard.ContestedGhostsIDs)
        {
            EntityState es      = Entities.First(e => e.Value.Type == GhostTypeID && e.Value.ID == ghostID).Value.Positions[Round];
            int         busters = es.Value;
            foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
            {
                DispatchAction action = new DispatchAction()
                {
                    Type = DispatchActionType.Contest, Target = new Point(es.X, es.Y), EntityID = ghostID
                };
                dashboard.DispatchActions[busterID] = action;
                break;
            }
        }

        //Find
        foreach (string busterID in BusterIDs.Where(bid => !dashboard.DispatchActions.ContainsKey(bid)))
        {
            Point          random = getExplore(busterID);
            DispatchAction action = new DispatchAction()
            {
                Type = DispatchActionType.Roam, Target = random
            };
            dashboard.DispatchActions[busterID] = action;
        }

        // MOVE x y | BUST id | RELEASE | STUN
        List <string> moves = new List <string>();

        foreach (string busterID in BusterIDs)
        {
            DispatchAction action = dashboard.DispatchActions[busterID];
            if (action.Type == DispatchActionType.Stunned)
            {
                EntityState stunnedBuster = Entities[busterID].Positions[Round];
                moves.Add("MOVE " + stunnedBuster.X + " " + stunnedBuster.Y + " Stunned");
            }
            if (action.Type == DispatchActionType.Stun)
            {
                moves.Add("STUN " + action.EntityID + " Stun! " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Return)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Return " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Release)
            {
                moves.Add("RELEASE" + " Release " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Intercept)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Intercept! " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Bust)
            {
                moves.Add("BUST " + action.EntityID + " Bust " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Contest)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Contest " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Chase)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Chase " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Herd)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Herd " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Find)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Find " + action.EntityID);
            }
            if (action.Type == DispatchActionType.Roam)
            {
                moves.Add("MOVE " + action.Target.X + " " + action.Target.Y + " Roam");
            }
        }

        //
        foreach (string line in dashboard.Predictions)
        {
            Console.Error.WriteLine(line);
        }
        foreach (string line in dashboard.Updates)
        {
            Console.Error.WriteLine(line);
        }
        //
        string stunTimer = "";

        foreach (string busterID in BusterIDs)
        {
            stunTimer += "(" + busterID + ")->" + dashboard.StunTimers[busterID] + " ";
        }
        stunTimer += "|| ";
        foreach (string busterID in EnemyBusterIDs)
        {
            stunTimer += "(" + busterID + ")->" + dashboard.StunTimers[busterID] + " ";
        }
        Console.Error.WriteLine("Timers " + stunTimer);
        //
        string contestedGhosts = "";

        foreach (int ghostID in dashboard.ContestedGhostsIDs)
        {
            EntityState es      = Entities.First(e => e.Value.Type == GhostTypeID && e.Value.ID == ghostID).Value.Positions[Round];
            int         busters = es.Value;
            contestedGhosts += "" + ghostID + "->" + busters + " ";
        }
        Console.Error.WriteLine("Contested " + contestedGhosts);
        //
        foreach (string line in dashboard.Strategies)
        {
            Console.Error.WriteLine(line);
        }
        //
        Round++; return(moves);

        /*
         * //
         * Dictionary<int, string> ghostChasedBy = new Dictionary<int, string>();
         * Dictionary<int, string> busterStunnedBy = new Dictionary<int, string>();
         *
         * foreach (string busterID in BusterIDs)
         * {
         *  //
         *  EntityState buster = Entities[busterID].Positions[Round];
         *  bool carrying = (buster.State == 1);
         *  if (carrying)
         *  {
         *      int distance = distanceFromHome(buster.X, buster.Y);
         *      if (distance < LimBaseRange)
         *      {
         *          moves.Add("RELEASE");
         *          //
         *          int gid = buster.Value;
         *          string key = "-1" + "," + gid;
         *          Entities[key].Captured = true;
         *      }
         *      else
         *      {
         *          moves.Add("MOVE " + Home.X + " " + Home.Y + " Returning");
         *      }
         *      continue;
         *  }
         *
         *  //
         *  int stunBusterID = -1;
         *  if (stunBusterID >= 0)
         *  {
         *      if (!busterStunnedBy.ContainsKey(stunBusterID))
         *      {
         *          busterStunnedBy[stunBusterID] = busterID;
         *          addStun(busterID, "" + (1 - TeamID) + "," + stunBusterID);
         *          moves.Add("STUN " + stunBusterID);
         *          continue;
         *      }
         *  }
         *
         *  //
         *  bool inRange = false;
         *  foreach (Entity g in visibleGhosts)
         *  {
         *      int d = Distance(buster.X, buster.Y, g.Positions[Round].X, g.Positions[Round].Y);
         *      if (d > LimBustMin && d < LimBustMax)
         *      {
         *          ghostChasedBy[g.ID] = busterID;
         *          inRange = true;
         *          moves.Add("BUST " + g.ID);
         *          break;
         *      }
         *  }
         *  if (inRange) continue;
         *  foreach (Entity g in visibleGhosts)
         *  {
         *      int d = Distance(buster.X, buster.Y, g.Positions[Round].X, g.Positions[Round].Y);
         *      if (d > LimBustMax)
         *      {
         *          if (!ghostChasedBy.ContainsKey(g.ID))
         *          {
         *              ghostChasedBy[g.ID] = busterID;
         *              inRange = true;
         *              moves.Add("MOVE " + g.Positions[Round].X + " " + g.Positions[Round].Y + " Chase");
         *              break;
         *          }
         *      }
         *  }
         *  if (inRange) continue;
         *  foreach (Entity g in visibleGhosts)
         *  {
         *      int d = Distance(buster.X, buster.Y, g.Positions[Round].X, g.Positions[Round].Y);
         *      if (d < LimBustMin)
         *      {
         *          inRange = true;
         *          int ghostID = g.ID;
         *          moves.Add("MOVE " + buster.X + " " + buster.Y + " Wait");
         *          break;
         *      }
         *  }
         *  if (inRange) continue;
         *
         *  //
         *  Point random = getExplore(busterID);
         *  moves.Add("MOVE " + random.X + " " + random.Y + " Explore");
         * }
         * //
         * Round++;
         * return moves;
         */
    }
示例#7
0
 public void AddAction(DispatchAction action)
 {
     actions.Add(action);
 }