Design: Koordination zwischen Steuerelementen und ausführenden Klassen



  • Hallo zusammen,

    ich habe gerade ein grundsätzliches Problem beim Design im OO-Umfeld.

    Ich arbeite gerade an einem Spiel mit C++ auf dem Amiga und habe das Problem, wie ich von den Klassen, welche die Steuerung durch den menschlichen Spieler abarbeiten die entsprechenden Aufgaben an die ausführenden Klassen bekomme!

    Das akute Beispiel:
    Durch das Klicken eines Buttons signalisiert man dem Programm, dass man ein Gebäude errichten will. Dieses wird aber auf dem Spielfeld erst errichtet, wenn man mit der Maus in das Zielgebiet klickt. (Ein weiterer Klick auf den Button nimmt die Aktion wieder zurück.)

    Nun sind an dieser Aktion als Objekte neben dem Button - und einer zugeordneten Aktion bei seiner Aktivierung - der Cursor und der menschliche Spieler beteiligt.

    Beim Betätigen des Buttons wird die Aktion ausgelöst und der Cursor bekommt die Form des Gebäudes, die am Mauszeiger blinkend dargestellt wird.

    Nun die Frage: Wie bekomme ich am Besten die finale Aktion des Bauens dieses Gebäudes an den menschlichen Spieler (und weitere Objekte)? Der Button und seine Aktion sind daran nicht mehr beteiligt. Der Bau soll beginnen, wenn nun mit der Maus ins Zielgebiet geklickt wird. Wo speichere ich denn aber diesen "Zwischenzustand" ab? Meine bisherige Idee ist dies im Spielerobjekt zu tun. Also bei Aktivierung des Buttons wird im Spieler vermerkt, dass dieser das entsprechende Gebäude errichten möchte. Beim Klick ins Zielgebiet wird dann erst die endgültige Aktion ausgeführt.

    Der Nachteil an dieser Sache ist, dass man das Spielerobjekt demzufolge an vielen Stellen mitgeben muss!

    Das Ganze gilt ja auch für andere Aktionen (v.a. des menschlichen Spielers)!

    Gibt es da vielleicht irgendwelche guten Patterns o.ä.? Oder wie könnte man das eleganter lösen?

    Vielen Dank schon mal!

    Ciao



  • Also ich programmier grad auch ein game allerdings für windows und ich mache es so dass ich für meine GUI-Objekte einfach eine integerzahl festleg die dann beim klicken des objekts an eine funktion übergeben wird die dann die entsprechende reaktion ausführt (um funktionenpointer zu vermeiden)
    Was du da machst ist du schaltest von einem normalmodus in den "Baumodus".
    Bei meinem (etwas chaotischen) code würde ich das mit einer globalen variable lösen die den "Modus" speichert, sodass klar ist, dass du jetzt im Baumodus bist und wenn du mit der maus irgendwo hinfährst wird an entsprechender stelle evtl ein ghost-gebäude angezeigt bis zu entweder baust oder abbrichst.
    Welches gebäude du ausgewählt hast kannst du in einer separaten variable speichern.

    Das ist eine zugegebenermaßen eine etwas "nicht-OOP"-Lösung aber sie tuts, denn so mach ichs und es klappt ^^

    Gruß, TreffnonX


Log in to reply