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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

09.07.2011, 21:37

Ich denke du gehst das Problem von der falschen Seite an. Eine Basisklasse für Türme klingt schonmal nicht verkehrt. Aber ich denk die Türme sollten eine eher aktivere Rolle einnehmen. Es gibt vielleicht Türme die mehr als einen Gegner gleichzeitig anvisieren können, oder Türme die gar keine spezifischen Gegner anvisieren sondern einen Effekt auf ein ganzes Gebiet ausüben. Gib deinen Türmen einfach eine Methode think() in der jeder Turm entscheiden kann was er tut. Deine Türme kennen dann je nach konkretem Typ die nötigen Schnittstellen zur Welt und können damit anstellen was sie wollen. Der eine fragt vielleicht alle Gegner in einem bestimmten Bereich der Karte ab und verteilt Schaden, der nächste tut was andres. Das hat zumindest bei unsrem Tower Defense Game ganz gut funktioniert so ;)

12

09.07.2011, 22:21

Das ist eine sehr originelle idee :)
Vielen dank für den denkanstoß, werde das mal so angehen :)

Mit freudigen grüßen
Ombalat

13

10.07.2011, 00:30

Du kannst natürlich auch mehrstufige Vererbung benutzen. Du könntest ShootingTower und MineTower von Tower ableiten und das sind dann jeweils wieder Basisklassen für alle Türme die schießen können, bzw. alle Türme die Minen legen (Türme legen Minen? na egal :D). Die think-Methode von Tower würde von ShootingTower und MineTower überschrieben, die dann entweder einen Gegner anvisieren und schießen, oder irgendwohin eine Mine legen.
Was beim schießen jetzt genau passiert, regelt wieder eine virtuelle Funktion, die alle von ShootingTower abgeleitete Klasse implementieren und so verschiedene Schussarten umsetzen.

So kannst du dann sehr schön ganz verschiedene Türme haben, alle Gemeinsamkeiten in einer Basisklasse haben und hast trotzdem keine Klasse, die unnötig viele Funktionen hat(wie sagt man doch so schön? Man soll immer eine minimale aber vollständige Schnittstelle anstreben).

Am besten planst du alles durch und Präsentierst hier deinen Entwurf, es gibt sicher Leute, die das gerne durchlesen und dir Verbesserungsvorschläge schreiben, inklusive Begründung, was genau dadurch für dich besser und einfacher wird.
Lieber dumm fragen, als dumm bleiben!

14

10.07.2011, 13:10

Ja, ich denke das werd ich machen :)
Hoffe man kann meinen entwurf dann auch nachvollziehen :P
Ich denke mal, im endeffekt wird es auf eine einfache oder zweifache vererbung hinauslaufen ;)

Ich melde mich wieder :)
Danke nocheinmal an alle =) Ich bin für eure Hilfe sehr dankbar !

15

10.07.2011, 15:59

Hallo, da bin ich wieder ^^
Ich überlege ja schon länger daran, wie ich die Türme relisieren soll und habe das jz einmal in Worte gefasst ^^
Ich hoffe, dass ihr meine Gedanken nachvollziehen könnt ^^

Hier ist jetzt mal mein Erster Entwurf des Turmsystems (im Anhang zu finden)

Liebe Grüße,
Ombalat

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ombalat« (11.07.2011, 17:58)


16

11.07.2011, 07:32

Nur mal so ne Randbemerkung. Zu deinen Türmen mit einem Ziel vielleicht kannst ja später auch noch einbauen das nicht nur der erste gegener angegriffen wird sonder auch der letzte/stärkste/schwächste.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

17

11.07.2011, 14:27

Ich denke mal, dass ist nicht sonderlich schwer zum realisieren :) werde ich mit einbeziehen!

Ich habe mir jetzt überlegt, bezüglich der Vererbungsstruktur, die ihr aus der pdf entnehmen könnt, wie ich die dann Verwenden würde.

Ich würde die Think Methode als äusserste Schnittstelle verwenden und in der Basisklasse CTower als rein Virtuelle Funktion definieren (also auf 0 setzten).
In den beiden Abgeleiteten Funktionen würde ich dann die Think Methode implementieren. Und zwar würde ich dort dann eine Update Funktion und eine Render Funktion aufrufen (Falls man die Render Funktion nicht besser über die Basisklasse CTower extra aufrufen können sollte). Und die Updatefunktion wiederum würde ich dann in den abgeleiteten tatsächlichen Türmen überschreiben und so die einzelnen Türme dann programmieren.

Ich weiß nicht ... kling meiner meinung nach irgendwie n bissi nach Overflow?
Wäre es da nicht besser, die 2. Ableitungsstufe (CSingleTarget und CAreaEffect) weg zu lassen und und die Türme direkt über die Think Methode zu implementieren?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

11.07.2011, 14:32

Wäre es da nicht besser, die 2. Ableitungsstufe (CSingleTarget und CAreaEffect) weg zu lassen und und die Türme direkt über die Think Methode zu implementieren?

Find ich auch. Aber gut, du könntest natürlich schon die Logik die sich darum kümmert einen Effekt auf alle Gegner in einem Gebiet anzuwenden in eine gemeinsame Basis packen wenn du viele solche Türme hast:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
class AreaEffect : public Tower
{
protected:
  virtual void affect(const std::list<Enemy*>& enemies) = 0;
public:
  void think()
  {
    ...
    affect(enemies)
    ...
  }
};

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (11.07.2011, 14:40)


19

11.07.2011, 16:23

Stimmt, das scheint mir eine bessere lösung zu sein :)
Ich danke dir

Edit: Ich werde die pdf überarbeiten und später nocheinmal updaten .. Ich schreibe hier ein Edit, wenn ich es upgedatet hab ;)

Edit2: Ich habe jz die pdf upgedatet. Bin aber irgendwie gerade etwas unzufrieden damit ... hab das gefühl, dass man das irgenwie besser machen kann :|
Ich füge die Datei an meinen ersten Post an, damit ihr nciht immer mitten drinnen danach suchen müsst und lösche die alte Version ;)
Danke für eure Hilfe, bin schon gespannt, was ihr dazu sagt

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »Ombalat« (11.07.2011, 17:57)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

11.07.2011, 20:28

Das läuft in etwa auf das hinaus, was wir mal gemacht haben: Es gab Objekte und KIs. Jedes Objekt konnte eine KI haben durch welche es kontrolliert wurde. Das ließe sich bei dir auch prima in Türme und Waffen aufschlüsseln oder sogar von Waffen separate Zielsysteme. Dadurch ergeben sich sehr einfach sehr viele zusammenstellbar Kombinationen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige