# Wirtschaftssystem mit externen Daten aufbauen



## vulcanus (19. Apr 2019)

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


----------



## Javinner (19. Apr 2019)

@vulcanus StrategyMuster?


----------



## mrBrown (19. Apr 2019)

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





vulcanus hat gesagt.:


> Fernab von jedem Framework wollte ich mal versuchen ein Wirtschaftssystem zu entwickeln, sprich:
> 
> - Ressourcen, wie Kohle, Wald, Eisen
> - Gebäude
> ...



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:


```
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 (20. Apr 2019)

Hi,

erstmal danke für die Antworten  

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

@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:



```
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


----------



## mihe7 (20. Apr 2019)

mrBrown hat gesagt.:


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


Kann mich hier mal jemand aufklären, worin hier das Pattern bestehen soll? Fasse gleichartige Objekte zu Klassen zusammen?!?


----------



## mrBrown (21. Apr 2019)

mihe7 hat gesagt.:


> 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?


vulcanus hat gesagt.:


> 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. 


vulcanus hat gesagt.:


> 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.


----------



## mihe7 (21. Apr 2019)

mrBrown hat gesagt.:


> Trennen von Instanz und Typ, abseits von Klassen?


Ich verstehe immer noch nicht, was daran das Pattern sein soll. Wenn der Typ im Modell benötigt wird, dann wird der halt modelliert und fertig.


----------

