Wirtschaftssystem mit externen Daten aufbauen

vulcanus

Mitglied
Hi zusammen und schonmal frohe Ostern :)

Fernab von jedem Framework wollte ich mal versuchen ein Wirtschaftssystem zu entwickeln, sprich:

- Ressourcen, wie Kohle, Wald, Eisen
- Gebäude
— zur Förderung: Holzfäller, Mine
— zur Veredlung: Schwert, Bauressourcen
— zur Ausbildung: Schwertkämpfer, Zimmermann

Jetzt will ich nicht jedes Objekt in eine eigene Klasse gießen, sondern das Ganze auslagern. Hab da zum Beispiel an YAML gedacht, aber ich weiß nicht so recht wie ich den Aspekt X baut Y mit Ressourcen Z1 und Z2 abbilden kann. Mit Pattern wie dem Typ-Pattern komme ich auch nicht weiter.
Kann mir da jemand einen Tipp geben? Gibt es bei sowas vielleicht schon ein bewertes Vorgehen?

Dankeschön und schöne Grüße
 

mrBrown

Super-Moderator
Mitarbeiter
Mit Type-Pattern meinst du sowas: http://gameprogrammingpatterns.com/type-object.html#the-pattern ?



Fernab von jedem Framework wollte ich mal versuchen ein Wirtschaftssystem zu entwickeln, sprich:

- Ressourcen, wie Kohle, Wald, Eisen
- Gebäude
— zur Förderung: Holzfäller, Mine
— zur Veredlung: Schwert, Bauressourcen
— zur Ausbildung: Schwertkämpfer, Zimmermann

Jetzt will ich nicht jedes Objekt in eine eigene Klasse gießen, sondern das Ganze auslagern. Hab da zum Beispiel an YAML gedacht, aber ich weiß nicht so recht wie ich den Aspekt X baut Y mit Ressourcen Z1 und Z2 abbilden kann.

Den genannten Aspekte kannst du genau so abbilden, wie du es dort beschrieben hast ;)

Ein Gebäude X (zb Schwertschmiede) produziert Y (Schwert) mit Z1 (Holz) und Z2 (Eisen), als beispielhafter YAML:

YAML:
Mine:
  produziert:
    - Eisen
Holfäller:
  produziert:
    - Holz
Schwertschmiede:
  produziert: Schwert
  verbraucht:
    - Eisen
    - Holz
Kaserne
  produziert: Schwertkämpfer
  verbraucht:
    - Schwert

Das ganze muss man nur noch sinnvoll auf Klassen und Objekte abbilden, zB mit zwei Klassen, Material und GebäudeTyp. Eisen, Holz, Schwert sind Instanzen von Material, Schwertschmiede und Kaserne entsprechend von GebäudeTyp (und GebäudeTyp hat eine Liste von produzierten und verbrauchten Materialien).
Gebaute Gebäude sind dann von der Klasse Gebäude, und haben als Attribut den GebäudeTyp.


Ist natürlich je nach Anforderung anzupassen, zB kann man das "verbraucht und produziert" noch in einem Art "Rezept"-Objekt zusammenfassen, oder verschieden GebäudeTyp-Klassen einführen, je nachdem wie stark die sich unterscheiden.
 

vulcanus

Mitglied
Hi,

erstmal danke für die Antworten :)

@Javinner
Kann mir das mit dem Strategie-Pattern grad nicht vorstellen im Bezug auf externe Daten o_O

@mrBrown
Jip, dieses Pattern meinte ich mit Typ-Pattern
Und Dankeschön für das Beispiel ^^.
Hierbei werden z.B. die Materialien ja nur durch einen String dargestellt. Was ist, wenn ich diese weitere Attribute besitzen wie Startwert für Leben beim Schwertkämpfer oder Bonus gegen andere Einheiten oder Gewicht beim Holz?

Könnte ich da eine "Extra" YAML-Liste aufsetzen, in etwa so:


YAML:
Wirtschaft:
    Mine:
      produziert:
        - Eisen
    Holfäller:
      produziert:
        - Holz
    Schwertschmiede:
      produziert: Schwert
      verbraucht:
        - Eisen
        - Holz
    Kaserne
      produziert: Schwertkämpfer
      verbraucht:
        - Schwert
Material:
    Eisen:
        Gewicht: 10
    Holz:
        Gewicht: 2
    Schwert:
        Gewicht: 5
Einheit:
    Schwertkämpfer:
        Leben: 100
        Stärke: 6
        Bonus: Magier

Und wäre es besser, ein Framework wie SnapeYAML zu verwenden oder sollte ich gleich etwas eigenes schreiben? Hab ich zwar noch nie gemacht, aber irgendwann ist ja immer das erste mal ^^.

Vielen Dank! und schöne Grüße

Nico
 

mrBrown

Super-Moderator
Mitarbeiter
Kann mich hier mal jemand aufklären, worin hier das Pattern bestehen soll? Fasse gleichartige Objekte zu Klassen zusammen?!?
Trennen von Instanz und Typ, abseits von Klassen?
Hierbei werden z.B. die Materialien ja nur durch einen String dargestellt. Was ist, wenn ich diese weitere Attribute besitzen wie Startwert für Leben beim Schwertkämpfer oder Bonus gegen andere Einheiten oder Gewicht beim Holz?
Wo werden sie denn als String dargestellt? Das können ganz normale Objekte mit allen möglichen Attributen sein. Das was in der yaml steht, sind nur Verweise auf das jeweilige Objekt.
Und wäre es besser, ein Framework wie SnapeYAML zu verwenden oder sollte ich gleich etwas eigenes schreiben? Hab ich zwar noch nie gemacht, aber irgendwann ist ja immer das erste mal ^^.
Nimm eine Library zum Parsen, selbst geschrieben enthält das nahezu immer nicht berücksichtigte Randfälle.
 

Oben