Suche sinnvolle Umsetzungsmöglichkeit
-
Hullo! Bin Anfänger und gerade an einem kleinen Projekt dran: Ich möchte ein simples Spiel erstellen, in welchem der Spieler ein kleines virtuelles Dorf besitzt, über Rohstoffe verfügt und diese nach Lust und Laune für Gebäude und Waffen ausgeben kann, wobei jedes Gebäude Einfluss auf irgend etwas Anderes hat.
Zum Beispiel, der Marktplatz erhöht die Laune des Vokes, welche wiederrum die Produktivität aller Minen und Holzfällerhütten steigt. Ein ähnliches Prinzip wie bei diversen Browser-Games, wie zb Die Stämme.
Es wird definitiv nur einen Spieler geben (erstmal). Habe für diesen jetzt eine Klasse deklariert und in dieser unter 'protected' als float's die Rohstoff-Variabeln + Dorfname, Einwohnerzahl, Statistiken ueber Siege und Niederlagen (Kampfsystem ist aber noch nicht mal in Planung
) etc etc. Unter public habe ich dann die Zugriffsfunktionen. Erstmal bin ich mir nicht sicher, ob eine Klasse mit nur einer Instanz überhaupt sinnvoll ist, oder ob es da eine praktischere Lösung gibt.
So, jetzt habe ich noch eine Klasse geschrieben, die sich von der Spielerklasse ableitet und die Gebäude verwaltet. Wo ich dass so schreibe, merke ich noch mehr, dass das eigentlich keinen Sinn hat.Wie würdet ihr denn die Häuser einbinden? Jedes kann mehrere Stufen haben, dh weiter 'ausgebaut' werden, nimmt Einfluss auf Andere Sachen etc.
Irgendwelche Ideen? Danke
-
bDidas schrieb:
Hullo! Bin Anfänger und gerade an einem kleinen Projekt dran: Ich möchte ein simples Spiel erstellen, in welchem der Spieler ein kleines virtuelles Dorf besitzt, über Rohstoffe verfügt und diese nach Lust und Laune für Gebäude und Waffen ausgeben kann, wobei jedes Gebäude Einfluss auf irgend etwas Anderes hat.
Zum Beispiel, der Marktplatz erhöht die Laune des Vokes, welche wiederrum die Produktivität aller Minen und Holzfällerhütten steigt. Ein ähnliches Prinzip wie bei diversen Browser-Games, wie zb Die Stämme.
Es wird definitiv nur einen Spieler geben (erstmal). Habe für diesen jetzt eine Klasse deklariert und in dieser unter 'protected' als float's die Rohstoff-Variabeln + Dorfname, Einwohnerzahl, Statistiken ueber Siege und Niederlagen (Kampfsystem ist aber noch nicht mal in Planung
) etc etc. Unter public habe ich dann die Zugriffsfunktionen. Erstmal bin ich mir nicht sicher, ob eine Klasse mit nur einer Instanz überhaupt sinnvoll ist, oder ob es da eine praktischere Lösung gibt.
So, jetzt habe ich noch eine Klasse geschrieben, die sich von der Spielerklasse ableitet und die Gebäude verwaltet. Wo ich dass so schreibe, merke ich noch mehr, dass das eigentlich keinen Sinn hat.Wie würdet ihr denn die Häuser einbinden? Jedes kann mehrere Stufen haben, dh weiter 'ausgebaut' werden, nimmt Einfluss auf Andere Sachen etc.
Irgendwelche Ideen? Danke
Ich würde die verschiedenen Häuser in als Klassen aufeinander aufbauen. Also die Basisklasse CBasisHaus beherrscht alles, was jedes Haus kann, z.B. es hat ne tür, ne klingel, wat weiß ich.
CLevel1Haus rockt schon gleich ne ecke mehr und erbt alles was CBasisHaus kann, aber es hat z.B. einen keller oder so.
Natürlich macht es keinen Sinn, das Haus vom Spieler abzuleiten, das siehst Du schon richtig. Ich benutze ja auch nicht meine Kaffeemaschine als Auto.
-
Das ist schonmal eine gute Idee. Und was würdest du mit dem Spieler machen? Die Häuser brauchen ja andauernd Zugriff auf Eigenschaften, die konstant seien müssen... Wo ich grad das Wort konstant schreibe... Für einige Sachen, wie zum Beispiel klasseninterne Variabeln wie Zähler kann ich ja als const deklarieren, aber was mache ich mich den Rohstoffen, die ja unter Spieler deklariert sind? Jedes Haus kostet ja
X Holz
Y Eisen
X Goldetc. Und für jeden einzelnen Wert eine Zugriffsfunktion schreiben ist ja auch nicht das wahre. Hatte mal irgendwo was von einer Singleton-Klasse gelesen, aber nie wirlich verstanden wofür man die anwendet. Aber da stand was von 'blabla... wenn man nur eine Instanz erzeugen will'. Könnt ich in dem Fall was damit anfangen? Oder ist die Spieler Klasse einfach nur unnötig? Als global definieren will ich die Variabeln aber nicht. Das kann ja nicht das Ziel sein, einen miserablen Stil zu praktizieren.!
Grüße!
-
Das sind alles Design-Fragen.
Grundsätzlich würde ich es so angehen: Alles, was Du überall brauchst, solltest Du in Objekte packen. Deswegen heißt es ja auch Objekt-Orientierte Programmierung.
Wenn sich ein Preis z. B. aus einem Preis dieser drei Währungen zusammensetzt, kannst Du eine Preis struct definieren, in der festgelegt wird, wieviele Eisen, wieviele Holz usw. das kostet. Eine Instanz davon kannst du in den protected Bereich Deines BasisHauses legen.
Theoretisch könnten alle käuflichen Objekte z. B. von einer CTradableItem Basisklasse erben. Die könnte als Eigenschaft so eine Struct haben und zum Beispiel einen Pointer zu ihrem Besitzer. Aber darüber hinaus noch sinnvolle Methoden wie Buy() haben. Oder einen bool ob sie gerade handelbar, also verkäuflich ist.
Um Dein Rohstoffhandelssystem sinnvoll zu machen, solltest Du ein Handelssystem entwickeln, dass z. B. über eine statische Klasse laufen kann. Bei diesem System ist es wichtig, dass wenn eine Menge einer Währung irgendwo hinzugefügt wird, es auch woanders weggenommen wird.
Das sind jetzt nur so wilde Gedanken in 3 Minuten von mir, bei sowas lohnt es sich, sich ordentlich hinzusetzen und das auszudenken. Oder in den Source-Code von Half-Life 2 zu schauen
Naja, da gibt es eben viele Möglichkeiten.
Versuch bei diesen Design Fragen immer möglichst abstrakt, objektbezogen, und modular zu denken. EDIT: Achja, und vorallem anwendungsbezogen! Deswegen sollte man auch solche Fragen beantworten wie: Was soll das Spiel können? Warum gibt es Holz, und Eisen etc. worin unterscheiden die sich. Haben die einen relativen Wert zu einander. Ist dieser dynamisch?
-
Vielen Dank für deine Antwort!
Ich werde mich mal dran setzen.