Hilfe - bei OOP Ansatz
Pudding
- programmiertechnik
Hallo,
ich wollte mich mal mit OOP probieren, weil mein Skript inzwischen überquillt. Jetzt bräuchte ich ein wenig hilfe bei dem Ansatz in welche classen ich das ganze zerlegen soll. Kurz zum Ablauf:
Ligaspiel: Es gibt eine Menge X Spieler die teilnehmen. Jeder Spieler hat unterschiedliche stärken der vorgegebenen fahigkeiten. Als erstes sollen alle Angriffswerte ermimttel werden und dann soll jeder 1mal angreifen(sortiert nach der Angriffsstärke). Natürlich wird der Gegner per zufall aus der Menge der verbleibenden spieler ausgewählt(exklusiv sich selbst natürlich). Nach jeden Angriff muss überprüft werden, ob noch alle Spiele "leben" ... damit nicht sinnlos auf einen mit keiner energie eingeschlagen wird. Eine Runde bedeutet also, das jeder der X Spieler 1mal einen per zufall ausgewählten gegner angegriffen hat. ist eine runde zuende, wird von den noch lebenden spieler wieder die Angriffswerte neu berechnet und die runde beginnt von vorne.
Ich überlege jetzt wie ich es zerlegen soll. also auf jeden fall wollte ich eine klasse spieler mit den eigenschaften machen ... und jetzt stecke ich schon so ein bischen ... wie weiter ? ne klasse ligaspiel, die abgeleitet wird von spielern ... naja, vielleicht hat ja einer eine gute idee für die unterteilung der klassen ... wäre für jeden rat mehr als dankbar ....
Hallo Pudding,
also auf jeden fall wollte ich eine klasse spieler mit den eigenschaften machen ...
Das klingt einleuchtend, weil es das zugrunde liegende Problem direkt in den code überträgt. So wie du das jetzt beschrieben hast, war's das aber wohl auch schon. Ich würde mir das jetzt so vorstellen, dass irgend ein Container die "lebenden" Spieler enthält und eine Schleife über den Elementen dieses Containers iteriert. Für jeden Spieler wird dann eine relatif einfache Operation ausgeführt (Kampf mit zufälligem Gegner). Dieses Schleife wird von einer zweiten Schleife ummantelt, die zuerst die innere Schleife mit den Kämpfen ausführt, anschließend die Spieler mit Energie <= 0 eliminiert und dann die Angriffstärken der verbleibenden Spieler berechnet (wie auch immer das geht). Die äußere Schleife wird verlassen, sobald maximal ein Spieler übrig bleibt.
Welche weiteren Klassen du nun brauchst, hängt davon ab, was dein Programm konkret machen soll. Wenn du beispielsweise die einzelnen Kämpfe grafisch darstellen willst, wirst du diese Grafik sicher irgendwie auslagern wollen. Ob du dafür weitere Klassen verwendest oder die Daten in die vorhandene Spieler-Klasse reinpackst ist ein Implementierungsdetail. Eventuell Brauchst du weitere Klassen für Gegenstände wie Kettensägen oder Billardkugeln ;-)
Vielleicht willst du den Ablauf der Kämpfe protokollieren. Dann wäre eine Kampf-Klasse sinnvoll, die die wichtigsten Informationen zu einem Kampf enthält. Das wäre dann aber wohl eher eine einfache Datenstruktur ohne Methoden ("struct" in C++, "record" in ObjectPascal). Dafür bräuchtest du dann wieder einen Container, der alle Kämpfe in einer festen Reihenfolge enthält (wahrscheinlich so etwas wie eine linked-list bzw. queue).
Oder du möchtest verschiedene Schläge zulassen. Jeder Schlag könnte aus einer Stärke und einer Richtung bestehen. (Ich mag solche Spiele eigentlich nicht, aber ich muss zugeben, dass es interessant ist, über verschiedene Implementierungsmöglichkeiten nachzudenken.)
ne klasse ligaspiel, die abgeleitet wird von spielern ...
Wozu? Willst du mehrere Ligaspiele ablaufen lassen und dann vergleichen können? Dann fände ich es aber nicht sinnvoll, diese Klasse von Spieler abzuleiten. Ich würde eher an irgend etwas denken, dass einen Container aller Spieler und die Liste der Kämpfe enthält.
Vererbungshierarchien sehe ich hier im Moment höchstens, wenn es verschiedene Typen von Spielern geben soll - z.B. Menschen, Tiere und Roboter. Dann könnten diese Spielertypen eigene Methoden enthalten, die den Verlust von Energie berechnen, wenn auf sie eingeschlagen wurde.
War jetzt viel wirres Zeug auf einmal, aber ich weiß eben nicht genau, was dein Programm wirklich machen soll. Ich bin ein Fan von guten objektorientierten Programmierstielen, aber für das grundlegende Spiel, so wie du es beschrieben hast, würde ich persönlich nicht unnötig viele Klassen einführen.
Viel Erfolg,
Robert