/// <summary>
        /// Entfernt Zucker und gibt die Zelle wieder frei.
        /// </summary>
        /// <param name="nahrung">Den zu entfernenden Zucker</param>
        public void EntferneZucker(CoreSugar sugar)
        {
            SugarHills.Remove(sugar);
            Cell cell = CellSpawnList.Find((x) => x.SpawnedFood == sugar);

            cell.SpawnedFood = null;
        }
Пример #2
0
 /// <summary>
 /// Removes all empty sugar-hills from list.
 /// </summary>
 private void removeSugar()
 {
     // TODO: speedup
     //List<CoreSugar> gemerkterZucker = new List<CoreSugar>();
     for (int i = 0; i < Playground.SugarHills.Count; i++)
     {
         CoreSugar zucker = Playground.SugarHills[i];
         if (zucker != null)
         {
             if (zucker.Menge == 0)
             {
                 //gemerkterZucker.Add(zucker);
                 //Löschen
                 Playground.EntferneZucker(zucker);
                 i--;
             }
         }
     }
     //for(int i = 0; i < gemerkterZucker.Count; i++) {
     //  CoreSugar zucker = gemerkterZucker[i];
     //  if(zucker != null) {
     //    Playground.SugarHills.Remove(zucker);
     //  }
     //}
     //gemerkterZucker.Clear();
 }
        /// <summary>
        /// Erzeugt einen neuen Zuckerhaufen.
        /// </summary>
        public void NeuerZucker()
        {
            Cell      cell   = findeRohstoffZelle();
            int       wert   = mapRandom.Next(SimulationSettings.Custom.SugarAmountMinimum, SimulationSettings.Custom.SugarAmountMaximum);
            Vector2D  punkt  = cell.Position + new Vector2D(mapRandom.Next(cell.Width), mapRandom.Next(cell.Height));
            CoreSugar zucker = new CoreSugar(punkt.X, punkt.Y, wert);

            SugarHills.Add(zucker);
            cell.SpawnedFood = zucker;
        }
Пример #4
0
 /// <summary>
 /// Prüft ob eine Ameise einen Zuckerhaufen sieht.
 /// </summary>
 /// <param name="ant">betroffene Ameise</param>
 private void ameiseUndZucker(CoreAnt ant)
 {
     for (int i = 0; i < Playground.SugarHills.Count; i++)
     {
         CoreSugar sugar      = Playground.SugarHills[i];
         int       entfernung = CoreCoordinate.BestimmeEntfernungI(ant.CoordinateBase, sugar.CoordinateBase);
         if (ant.ZielBase != sugar && entfernung <= ant.SichtweiteI)
         {
             PlayerCall.Spots(ant, sugar);
         }
     }
 }
Пример #5
0
        /// <summary>
        /// Prüft ob eine Ameise an ihrem Ziel angekommen ist.
        /// </summary>
        /// <param name="ant">betroffene Ameise</param>
        private static void ameiseUndZiel(CoreAnt ant)
        {
            // Ameisenbau.
            if (ant.ZielBase is CoreAnthill)
            {
                if (ant.GetragenesObstBase == null)
                {
                    ant.ZurückgelegteStreckeI = 0;
                    ant.ZielBase = null;
                    ant.SmelledMarker.Clear();
                    ant.colony.Statistik.CollectedFood += ant.AktuelleLastBase;
                    ant.AktuelleLastBase    = 0;
                    ant.AktuelleEnergieBase = ant.MaximaleEnergieBase;
                    ant.IstMüdeBase         = false;
                }
            }

            // Zuckerhaufen.
            else if (ant.ZielBase is CoreSugar)
            {
                CoreSugar zucker = (CoreSugar)ant.ZielBase;
                ant.ZielBase = null;
                if (zucker.Menge > 0)
                {
                    PlayerCall.TargetReached(ant, zucker);
                }
            }

            // Obststück.
            else if (ant.ZielBase is CoreFruit)
            {
                CoreFruit obst = (CoreFruit)ant.ZielBase;
                ant.ZielBase = null;
                if (obst.Menge > 0)
                {
                    PlayerCall.TargetReached(ant, obst);
                }
            }

            // Insekt.
            else if (ant.ZielBase is CoreInsect)
            {
            }

            // Anderes Ziel.
            else
            {
                ant.ZielBase = null;
            }
        }
Пример #6
0
        /// <summary>
        /// Perform call to "Spots(Sugar)" on given ant.
        /// </summary>
        /// <param name="ant">ant</param>
        /// <param name="sugar">sugar</param>
        public static void Spots(CoreAnt ant, CoreSugar sugar)
        {
            AreaChanged(
                null, new AreaChangeEventArgs(ant.colony.Player, Area.SpotsSugar));
            playerRights.PermitOnly();
            ant.NimmBefehleEntgegen = true;
            try {
                ant.SiehtBase(sugar);
            }
            catch (Exception ex) {
                throw new AiException("KI-Fehler in der Sieht(Zucker)-Methode", ex);
            }

            ant.NimmBefehleEntgegen = false;
            AreaChanged(
                null, new AreaChangeEventArgs(null, Area.Unknown));
        }
Пример #7
0
        /// <summary>
        /// Lässt das Insekt Zucker von einem Zuckerhaufen nehmen.
        /// </summary>
        /// <param name="zucker">Zuckerhaufen</param>
        internal void NimmBase(CoreSugar zucker)
        {
            if (!NimmBefehleEntgegen)
            {
                return;
            }
            int entfernung = CoreCoordinate.BestimmeEntfernungI(CoordinateBase, zucker.CoordinateBase);

            if (entfernung <= SimulationEnvironment.PLAYGROUND_UNIT)
            {
                int menge = Math.Min(MaximaleLastBase - aktuelleLast, zucker.Menge);
                AktuelleLastBase += menge;
                zucker.Menge     -= menge;
            }
            else
            {
                Thread.Sleep(0);
            }
        }
Пример #8
0
        /// <summary>
        /// Perform call to "TargetReached(Sugar)" on given ant.
        /// </summary>
        /// <param name="ant">ant</param>
        /// <param name="sugar">sugar</param>
        public static void TargetReached(CoreAnt ant, CoreSugar sugar)
        {
            AreaChanged(
                null,
                new AreaChangeEventArgs(ant.colony.Player, Area.ReachedSugar));
            playerRights.PermitOnly();
            ant.NimmBefehleEntgegen = true;
            try
            {
                ant.ZielErreichtBase(sugar);
            }
            catch (Exception ex)
            {
                throw new AiException(string.Format("{0}: KI-Fehler in der ZielErreicht(Zucker)-Methode", ant.colony.Player.Guid), ex);
            }

            ant.NimmBefehleEntgegen = false;
            AreaChanged(
                null, new AreaChangeEventArgs(null, Area.Unknown));
        }
Пример #9
0
 /// <summary>
 /// Wird einmal aufgerufen, wenn die Ameise einen Zuckerhaufen als Ziel
 /// hat und bei diesem ankommt.
 /// </summary>
 /// <param name="zucker">Der Zuckerhaufen.</param>
 internal virtual void ZielErreichtBase(CoreSugar zucker)
 {
 }
Пример #10
0
 /// <summary>
 /// Wird wiederholt aufgerufen, wenn die Ameise mindestens einen
 /// Zuckerhaufen sieht.
 /// </summary>
 /// <param name="zucker">Der nächstgelegene Zuckerhaufen.</param>
 internal virtual void SiehtBase(CoreSugar zucker)
 {
 }