Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

1

27.06.2013, 17:08

Wie am besten Klassen anordnen?

Ich hab' da mal ein Verständnisproblem,

ich arbeite zurzeit an einem TowerDefense Spiel. Es gibt 2 verschieden Towerarten Wälle und Angriffstower, die gibt es auch jeweils in zwei unterarten, Holz und Stein. So, bisher hab ich das ganze in einer Klasse, welche immer größer wird. Dazu kommen dann noch die AI Klasse, Map Klasse und Player Klasse. Ich hab' mir jetzt überlegt eine Towerklasse zu erstellen, danach eine Wall und AttackTowerklasse die beide von Tower erben, oder wäre es Sinnvoller noch extra Klassen für die Wood und Stone Tower zu erstellen?

Dann hab' hab ich noch eine weitere Frage. Bisher hab ich die Klassen so nacheinander included: tower->towermanager->map->ai->aimanager->player->main
Gibt's da Sinnvollere Anordnungen?

MfG Dreat

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

27.06.2013, 17:39

Da wir den Code und dein Projekt nicht kennen können wir nur ins Blaue raten. Ist bestimmt klug so wie es ist;) Was die einzelnen Ableitungen deiner Klasse angeht, dass kann man pauschal auch nicht sagen. So gibt es halt verschiedene Möglichkeiten. Ableiten würde ich nur wenn du wirklich die Klasse spezialisieren musst. Es ist nicht besonders schön Dinge wie folgendes zu schreiben:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
void Tower::DoAnything()
{
    switch(type)
    {
        case type1:
            // ...
        break;
        case type2:
            // ...
        break;
        / ...
    }
}


Dadurch pumpst du deinen Code langsam auf und das wird unschön. Solange die Türme sich nur durch Werte unterscheiden musst du nicht genauer spezialisieren. Wenn die Türme sich zum Beispiel nur durch ihre Attacken unterscheiden, so kannst du theoretisch gut das Strategy-Pattern anwenden. So kannst du verschiedene Türme mit gleichen Attacken durch die selben Klassen abbilden. In Verbindung dazu bietet sich oft eine Factory an um die jeweiligen Klassen zu erstellen. In deinem Fall gehört das unter Umständen zum Manager. Soll heißen, es gibt eine Klasse die weiß wie ein Turm eines bestimmtes Typs erstellt wird und mit welchen Daten diese Instanz gefüttert wird. Wenn die Türme natürlich zu unterschiedlich sind, macht es sicherlich sinn irgendwann verschiedene Klassen für die einzelnen Türme zu verwenden. Da muss man aber immer den speziellen Fall betrachten. Guck dir Strategy doch einfach mal und und danach versuchst du das was du für am sinnvollsten hältst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“