OOP so korrekt? Browsergamebeispiel
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
eigenschaft
erben
frage
funktion
gestellt code
girokonto
handlung
intelligenz
klasse konto
klasse wesen
konto
objekt
problem
richtigen leben
sparbuch
vererben
verschiedene attribute
verschiedene konten
wesen
-
Hallo,
Ich beschäftige mich gerade mit OOP und wollte zum üben ein kleiens Browsergame programmieren.
Die wichtigsten Grundlagen denke ich kann ich mittlerweile soweit, mein Problem ist aber das ganze noch in die Realität um zu setzen.
Als Beispiel nehme ich in dem Game NPC(NoPlayerCharacter) die man töten kann.
Wenn man nun das NPC töten will wird es per
ausgelöst.?action=fight&npcID=11
Im Script habe ich mir das dann ungefähr dann so vor gestellt:
if($_GET['action'] == "fight") { $npc = new wesen($_GET['npcID']); // Per Konstruktor werden alle Daten zu dem NPC aus der DB gelesen und als Eigenschaften hinzugefügt $npc -> fight(); // Die Funktion rechnet aus ob der User oder das NPC gewinnt usw. }
Nun frage ich mich ist das so richtig oder habe ich OOP komplett falsch verstanden?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Soweit ok, aber es sollte eher in die Richtung gehen:
$user->fight( $npc ); // weil user ja auch ein objekt sein sollte
-
Wenn ich es in dem Objekt User die Funktion mache, soll ich dann in dieser Funktion auch noch das Objekt NPC erstellen(wegen der Eigenschaften...) oder ist das eher unnötig bzw. schlecht?
-
Naja du musst dir das wie im richtigen Leben vorstellen, wie es da geregelt ist und solange ein NPC keinen Kampf starten kann braucht es diese Funktion eigentlich nicht. Funktionen zu basteln, die nie gebraucht werden ist zwecklos. Da du auch nur ahnand von Werten und nicht Handlungen berechnest wer gewinnt ist auch keine Schnittstelle oder so notwendig.
-
Nunja, du kannst natürlich auch gewisse Funktion vererben.
Fallbeispiel:
Du hast die Klasse Konto. Auf Konto sind die Funktionen Einzahlen, Auszahlen
Nun hast du aber verschiedene Konten. z.B. Girokonto und Sparbuch.
Auf beiden brauchst du natürlich jeweils die Einzahlen und Auszahlen Funktion.
Kannst sie natürlich auch in die Klassen einzeln reinschreiben, aber sinnvollerweise Erbst du einfach die Funktionen aus der Klasse Konto.
Beim Girokonto brauchst du noch die Funktion Überweisen. Also kannst du sie entweder in Girokonto schreiben oder in Konto und von Konto erben. Da ein Sparbuch aber auch von Konto erbt, bekommt es auch die Funktion überweisen, darf es aber nicht haben. Also kommt die Funktion überweisen in Girokonto und nicht in Konto.
Das gleiche lässt sich auch auf dein Problem projezieren.
Nehmen wir die Klasse Wesen. Die hat verschiedene Attribute. z.B. Lebenspunkte, Intelligenz und so on.
NAtürlich sind Spieler und NPC's auch Wesen. Erben also die Attribute aus Wesen. Nun die frage. Angreifen. Können NPC's gegen NPC's kämpfen? Wenn nein, brauchst du die Funktion fight nur in User, da ja so oder so dann immer ein User im Fight verwickelt ist.
Anderfalls kannst du es natürlich in Wesen packen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage