コード例 #1
0
        public static void GenerateMaTiInstances()
        {
            // Generate MaTi instances
            RandomizerSimple random = new RandomizerSimple(0);
            // Generate original MaTi set
            Instance tiny   = InstanceGenerator.GenerateMaTiLayoutTiny(random, new SettingConfiguration(), new ControlConfiguration());
            Instance small  = InstanceGenerator.GenerateMaTiLayoutSmall(random, new SettingConfiguration(), new ControlConfiguration());
            Instance medium = InstanceGenerator.GenerateMaTiLayoutMedium(random, new SettingConfiguration(), new ControlConfiguration());
            Instance large  = InstanceGenerator.GenerateMaTiLayoutLarge(random, new SettingConfiguration(), new ControlConfiguration());
            Instance huge   = InstanceGenerator.GenerateMaTiLayoutHuge(random, new SettingConfiguration(), new ControlConfiguration());

            InstanceIO.WriteInstance("MaTiTiny.xinst", tiny);
            InstanceIO.WriteInstance("MaTiSmall.xinst", small);
            InstanceIO.WriteInstance("MaTiMedium.xinst", medium);
            InstanceIO.WriteInstance("MaTiLarge.xinst", large);
            InstanceIO.WriteInstance("MaTiHuge.xinst", huge);
            // Generate alternative MaTi set
            InstanceIO.WriteInstance("MaTiPico.xinst", InstanceGenerator.GenerateMaTiLayoutPico(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiNano.xinst", InstanceGenerator.GenerateMaTiLayoutNano(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiMicro.xinst", InstanceGenerator.GenerateMaTiLayoutMicro(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiMilli.xinst", InstanceGenerator.GenerateMaTiLayoutMilli(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiCenti.xinst", InstanceGenerator.GenerateMaTiLayoutCenti(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiDeca.xinst", InstanceGenerator.GenerateMaTiLayoutDeca(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiHecto.xinst", InstanceGenerator.GenerateMaTiLayoutHecto(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiKilo.xinst", InstanceGenerator.GenerateMaTiLayoutKilo(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiMega.xinst", InstanceGenerator.GenerateMaTiLayoutMega(random, new SettingConfiguration(), new ControlConfiguration()));
            InstanceIO.WriteInstance("MaTiGiga.xinst", InstanceGenerator.GenerateMaTiLayoutGiga(random, new SettingConfiguration(), new ControlConfiguration()));
        }
コード例 #2
0
 /// <summary>
 /// Updates the element to the specified time.
 /// </summary>
 /// <param name="lastTime">The time before the update.</param>
 /// <param name="currentTime">The time to update to.</param>
 public void Update(double lastTime, double currentTime)
 {
     if (_potentialCrashBots.Any())
     {
         // Remember whether there was a collision overall
         bool anyCollision = false;
         // Check all bots that sensed a potential collision
         foreach (var crashBot in _potentialCrashBots)
         {
             // Log the potential collision
             _instance.LogInfo("Investigating potential collision of " + crashBot.GetIdentfierString() + " ...");
             // Check quad-tree for collisions (consider the pod too)
             if (// Check for collisions with other bots
                 crashBot.Tier.BotQuadTree.IsCollision(crashBot) ||
                 // Check for collisions with the tier boundaries
                 (crashBot.X - crashBot.Radius < 0 || crashBot.X + crashBot.Radius > crashBot.Tier.Length || crashBot.Y - crashBot.Radius < 0 || crashBot.Y + crashBot.Radius > crashBot.Tier.Width) ||
                 // Check for collisions with other pods
                 (crashBot.Pod != null && crashBot.Pod.Tier.PodQuadTree.IsCollision(crashBot.Pod)))
             {
                 // Remember that we have a collision
                 anyCollision = true;
                 // ---> Debug: Log info about the crash pilot
                 _instance.LogSevere("Bot" + crashBot.ID.ToString() + " crashed! Information:");
                 _instance.LogSevere(
                     " X: " + crashBot.X.ToString(IOConstants.FORMATTER) +
                     " Y: " + crashBot.Y.ToString(IOConstants.FORMATTER) +
                     " Radius: " + crashBot.Radius.ToString(IOConstants.FORMATTER) +
                     " Orientation: " + crashBot.Orientation.ToString(IOConstants.FORMATTER) +
                     " Bucket: " + (crashBot.Pod != null ? crashBot.Pod.ID.ToString() : " <null>"));
                 // Check multiple radii for other bots and pods
                 for (int i = 2; i < 5; i++)
                 {
                     _instance.LogSevere("Potential crash partners (bots) within " + i.ToString() + " * radius:");
                     foreach (var potentialCrashBot in _instance.Compound.BotCurrentTier[crashBot].GetBotsWithinDistance(crashBot.X, crashBot.Y, i * crashBot.Radius).Where(b => b != crashBot))
                     {
                         _instance.LogSevere(
                             "Bot: " + potentialCrashBot.ID.ToString() +
                             " X: " + potentialCrashBot.X.ToString(IOConstants.FORMATTER) +
                             " Y: " + potentialCrashBot.Y.ToString(IOConstants.FORMATTER) +
                             " Orientation: " + potentialCrashBot.Orientation.ToString(IOConstants.FORMATTER));
                     }
                     _instance.LogSevere("Potential crash partners (pods) within " + i.ToString() + " * radius:");
                     foreach (var potentialCrashPod in _instance.Compound.BotCurrentTier[crashBot].GetPodsWithinDistance(crashBot.X, crashBot.Y, i * crashBot.Radius).Where(p => p != crashBot.Pod))
                     {
                         _instance.LogSevere(
                             "Pod: " + potentialCrashPod.ID.ToString() +
                             " X: " + potentialCrashPod.X.ToString(IOConstants.FORMATTER) +
                             " Y: " + potentialCrashPod.Y.ToString(IOConstants.FORMATTER) +
                             " Orientation: " + potentialCrashPod.Orientation.ToString(IOConstants.FORMATTER));
                     }
                 }
             }
         }
         // Handle collision, if there was one
         if (anyCollision)
         {
             // Save instance
             string debugInstanceFile = System.IO.Path.Combine(_instance.SettingConfig.StatisticsDirectory, "debug.xinst");
             _instance.LogSevere("Logging snapshot of crash situation to " + debugInstanceFile + " ...");
             InstanceIO.WriteInstance(debugInstanceFile, _instance);
             _instance.LogSevere("We're done here!");
             // This is not allowed anymore
             throw new Exception("Unmanaged Operation: collisions are not expected anymore!");
         }
         else
         {
             // There was no collision at all - we can clear the potential crash bots
             _potentialCrashBots.Clear();
         }
     }
 }