Statische und nicht statische Völker - Definition?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Statische und nicht statische Völker - Definition?

      Hallo,

      ich bin es noch einmal. Ich habe da noch eine kleine Frage. Und zwar, bin ich, wie ich gerade gemerkt habe, mit meinen in die Kategorie "statische Völker" hineingerutscht. Was da der unterschied zu nicht-statischen Völkern ist, habe ich gerade nach ein paar Testmatches mit anderen Beta-Testern gemerkt. Während ich wie wild meine Duftstoffe in die Gegend schieße, verzichten die anderen darauf fast komplett. Und tatsächlich hatte ich statische Methoden verwendet (allerdings nicht für ein Gedächtnis, ich wollte einfach nur nicht die Klasse instanzieren, da es eher Helferfunktionen sind). Also habe ich die ganzen statischen Sachen rausgenommen und "normal" implementiert. Jetzt steht in meinem Quelltext kein einziges mal "static". Allerdings bin ich immer noch als statisches Volk deklariert. Ich frage mich, wieso? Nach was wird hier gegangen?

      Folgende Abweichungen von dem "Normalvorgehen" habe ich bei meinen Ameisen:


      - Ich besitze 2 verschiedene Dateien, da ich eine Helferklasse in eine externe Datei ausgelagert habe

      - Insgesamt besitze ich 3 Klassen: Die Helferklasse, mein Ameisenvolk
      und eine Kastenklasse, die ich nur angelegt habe, um nicht jedes mal den
      String für die Kasten eingeben zu müssen, da fehleranfällig (Quellcode
      angehangen).

      - Ich habe 2 zusätzliche private Variable in meiner Ameisenklasse definiert


      Projektmappe habe ich auch bereits bereinigt und neu erstellt. Bin etwas ratlos und über jeden Tipp sehr erfreut.

      Quellcode

      1. class Kasten
      2. {
      3. public const string KASTEN_STANDARD = "Standard";
      4. public const string KASTEN_SCHNUEFFLER = "Schnueffler";
      5. public const string KASTEN_OBSTSAMMLER = "Obstsammler";
      6. public const string KASTEN_ZUCKERSAMMLER = "Zuckersammler";
      7. public const string KASTEN_KAEMPFER = "Kaempfer";
      8. }
    • Hallo Ameisenbär :)
      Statische
      Völker sind eigentlich Völker die mit dem AntMe! Projekt ausgeliefert
      werden. Das bedeutet, dass statische Völker nicht geändert werden können
      sondern nur für Demonstrationszwecke von AntMe sind. :)

      Danke für deine Antwort. Ich glaube allerdings, es nicht die ganze
      Wahrheit. Mein Vater spielt das Spiel auch und versucht damit gerade
      Programmieren zu lernen. Er ist aber trotz starker Abweichung von den
      Beispielcodes noch als "Nicht-statisch" gekennzeichnet. Ich werde, wenn
      ich mal viel Zeit habe und meine Prüfungen hinter mir gelassen habe,
      gucken, woran es wirklich liegt, indem ich teilweise Komponenten aus
      meinen "Ameisencode" (Achtung: Verwechslungsgefahr :huh:, hier steht "code") entferne und gucke, wann ich wieder als Nicht-statisches Volk angesehen werde.



      Liebe Grüße :)
    • In der Profiversion habe ich folgende Zeilen Code gefunden:

      Quellcode

      1. Type[] types = assembly.GetTypes();
      2. foreach (Type type in types) {
      3. // Suche nach statischen Variablen und bestimme so, ob der Spieler
      4. // ein globales Gedächtnis für seine Ameisen benutzt.
      5. BindingFlags flags =
      6. BindingFlags.Public | BindingFlags.NonPublic |
      7. BindingFlags.Static | BindingFlags.SetField;
      8. staticVariables |= type.GetFields(flags).Length > 0;
      9. }
      (Profi\SimulationCore\Simulation\AnalysisHost.cs)

      Leider bin ich mir nicht ganz sicher, was sie bedeuten... In "assembly.GetTypes();" komme ich nicht näher rein, um zu sehen, was da passiert. Aber anscheinend darf keine der gesetzten Types auf public, nonpublic, static oder setField sein, damit es als nichtstatisches Volk anerkannt wird... gibt es Möglichkeiten irgendwie in das assembly reinzugucken?
    • Eine Möglichkeit in die Assembly zu schauen gibt es aber das ist wirklich nicht empfehlenswert für einen (noch) Anfänger. Eigentlich geht es darum, dass du wirklich keine statischen Variablen in deinem Code nutzen sollst. :)

      Das ganze ist halt mit den Reflection APIs verbunden und auf die möchte ich hier auch nicht näher eingehen weil das ein Level zu hoch ist. :P

      Aber zur Interesse kann ich dir hier den Link empfehlen: msdn.microsoft.com/de-de/libra…on.assembly.gettypes.aspx
      AntMe!-Forum.de Administrator, Kontakt - kontakt@antme-forum.net

    • DerAmeisenbaer schrieb:

      Eine Möglichkeit in die Assembly zu schauen gibt es aber das ist wirklich nicht empfehlenswert für einen (noch) Anfänger. Eigentlich geht es darum, dass du wirklich keine statischen Variablen in deinem Code nutzen sollst. :)

      Das ganze ist halt mit den Reflection APIs verbunden und auf die möchte ich hier auch nicht näher eingehen weil das ein Level zu hoch ist. :P

      Aber zur Interesse kann ich dir hier den Link empfehlen: msdn.microsoft.com/de-de/libra…on.assembly.gettypes.aspx
      Hmm, kann sein, das ich da noch nicht ganz durchsteige :) Was ich aber definitiv weiß ist, dass ich keine statische Variable mehr in meinem Code verwende. Kann dir diesen auch gerne mal schicken, wenn du magst.
    • Hallo in die Runde. Kurze Aufklärung zu diesem Thema. Mir ist bewusst, dass die Aufteilung in statisch und nicht-statisch auf den ersten Blick ein wenig verwirrend ist. Vielleicht sollte ich zur Aufklärung ein wenig weiter ausholen.

      In der objektorientierten Programmierung ist es üblich, dass Informationen, die eine Instanz einer Klasse (das Objekt) hält, dort gekapselt werden. Das hat zur Folge, dass nur diese eine Instanz darüber bescheid weiß. Angewendet auf unsere Ameisen bedeutet das, dass Ameise B keine Ahnung von den Dingen hat, die Ameise A in ihre lokale Variable (ihr Gedächtnis) geschrieben hat. Und das ist auch gut so.

      In Sprachen wie C# gibt es aber nun einen weitere Art der Variablen-Deklaration, die die darin gespeicherten Informationen klassenweit verfügbar machen. Wenn also Ameise A irgendwas in eine solche Variable schreibt, kann Ameise B diese Information direkt weiter verwenden. Wir nennen das in AntMe! ein globales Gedächtnis. Definiert werden solche Variablen mit dem Schlüsselwort "static". Hieraus ist auch der Begriff "statische Ameise" entstanden.

      Ursprünglich wollten wir die Verwendung solcher statischen Konstrukte verbieten, aber haben sehr schnell festgestellt, dass man damit vollkommen andere Problemstellungen erhält und das Spiel auf eine ganz andere Weise Spaß macht. Aus diesem Grund unterscheiden wir nun diese beiden Typen im Spiel. Der Online-Server erlaubt deshalb auch nur das Herausfordern einer Ameise aus der selben Kategorie.

      Kurz zusammengefasst: Statische Ameisen verwenden global verfügbare Variablen, nicht-statische Ameisen speichern Daten dagegen nur in lokalen Variablen.
      =========================================
      Tom Wendel @ AntMe! Team (
      tom@antme.net)
      http://www.antme.net
      =========================================