BlackJack hat geschrieben:@Pygoscelis papua: Auch nach diesem Beitrag ist mir immer noch nicht klar was ”Gebäude” denn nun eigentlich ist. Jedes Gebäude muss woanders gebaut werden können oder Gebäudetypen müssen woanders gebaut werden können? Deine Register-Funktion erstellt Gebäude oder Gebäudetypen? Was von `self` wird in der `can_build()`-Methode denn verwendet? Nur die Position? Die könnte man auch als Argument übergeben. Dir ist klar das es auch Klassenmethoden und statische Methoden gibt? Und Metaklassen? Und das man die Trennung zwischen Gebäude und Gebäudetyp auch tatsächlich durch zwei Klassen erreichen kann? Oder vielleicht auch einfach durch eine oder mehrere Funktionen?
Ok vieleicht habe ich mich etwas unverständlich ausgedrückt, normaler weise meint Gebäude die Instanz und Gebäudetyp die Klasse.
Natürlich muss nur jeder Gebäudetyp eine woanders gebaut werden können, das hängt dann von anderen Gebäuden rundrum bzw. von den
"Landschaftlichen" Eingenschaften ab. Da die Position auch in andern Funktionen, wie z.B. on_turn_start verwendet werden wird, macht es auch snn, diese schon bein __init__ zu übergeben, da sie sich eh nicht ändert ( meine Gebäude laufen nicht

)
für can_build wird außerdem vermutlich erst mal nichts übergeben, ich überlege gerade nur, wie die Funktion dann tatsächlich auf die Karte zugreift.
Eventuell muss die als Argument übergeben werden.
Klassenmethoden habe ich mir schon mal angeschaut, ich habe sie aber noch nicht verwendet. Sollte ich soetwas für can_build verwenden, um keine instanz haben zu müssen oder wie geht das?
Über statische Methoden habe ich noch nicht viel gehört, vieleicht könntest du mir einen guten Link senden? Sonst suche ich auch selber, etwas habe ich das auch schon gemacht.
Und Zuerst hatte ich auch Building als Metaklasse realisiert, aber hier ist eben meine Frage:
ist es Sinn der Sache jedes mal für die kleinen Änderungen (von Meta-gebäude zu einzelnem Gebäudetyp) eine Neue Klasse zu schreiben,
wie ich das jetzt verstanden habe schon. Oder?
BlackJack hat geschrieben:
Eine Register-Funktion die etwas erstellt ist übrigens ein bisschen überraschend, da würde man eher erwarten das die, nun ja etwas registriert und nichts zurück gibt. Und dann vielleicht auch eine Methode auf einer Klasse ist, die die registrierten Objekte verwaltet.
Die Register Funktion erstellt die Klasse und registriert sie für die Oberklasse Game (methode von Game) (bis jetzt ist das ein ablegen in einer Liste)
um dann überprüfen zu können welche Gebäude es gibt, diese dann aufzulisten bzw. nach dem Namen dann ein Gebäudetyp zum bauen auszuwählen.
BlackJack hat geschrieben:
Wenn die ”Funktionen” das Verhalten der Gebäude charakterisieren, dann willst Du entweder eine Klasse pro Gebäudetyp, wo das verhalten dann halt als Methoden umgesetzt wird, oder das Strategie-Muster wenn die Verhalten selbst noch mal parametrisiert und vielleicht auch verschieden kombiniert werden sollen.
Ich persönlich würde wohl mit einem Gebäude(typ) als ganz normale Klasse anfangen. Und dann sieht man, wenn man anfängt den nächsten zu schreiben, was man da an Gemeinsamkeiten/Unterschiede hat, ohne das man bei so etwas wie dynamisch Klassen per Funktion zu erstellen landet. Was mir ein bisschen zu viel Magie wäre, vor allem weil ich den Sinn hier nicht sehe.
Ok wie ich das jetzt verstanden habe wird jedes Gebäude eine Klasse sein die von Building (Metaklasse) erbt, vermutlich werden es erstmal auch garnicht 200 Gebäudetypen ...

bis jetzt sind 7 in den Meilensteinen festgelegt ...
Habe ich das jetzt so richtig verstanden?