Hallo allerseits,
Ich entwickle ein Strategiespiel. Darin soll es Einheiten mit mehreren Waffen geben: z.B.
TCollosusUnit: 6 Waffen
TCrusaderUnit: 3 Waffen
Ich habe als Überklasse gemacht:
TMultiWeaponMilitaryUnit
Dadurch kann ich in CheckForATK() (welche prüft ob gegnerische Einheiten in der Reichweite sind) einfach sagen for i:= 0 to CountOfWeapons do ...
Jetzt ist meine Frage, wie ich es am besten löse, dass die Einheiten unterschiedlich viele Waffen haben.
Erster Lösungsansatz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TMilitaryUnitMultiWeapon = class (TMilitaryUnit) protected FWeapons: TList; public procedure CheckForToATK (); override; procedure Shoot (Weapon, ToX, ToY, OnUnit: integer); override; procedure Reload (); override; end; |
In die Liste füge ich dann den Record TWeaponInformation hinzu (je nach Waffenanzahl unterschiedlich viele). Allerdings komm ich mit TList nicht gut zurecht, weil ich nicht weiß ob man da jetzt irgendwie speicher reservieren muss oder net.
Zweiter Lösungsansatz
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TMilitaryUnitMultiWeapon = class (TMilitaryUnit) protected FWeapons: array of TWeaponInformation; public procedure CheckForToATK (); override; procedure Shoot (Weapon, ToX, ToY, OnUnit: integer); override; procedure Reload (); override; end; |
Hier ist logischerweise die Frage ob ich dann in den einzelnen Klassen sagen müsste:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TCollosusUnit = class (TMilitaryUnit) protected FWeapons: array[0..5] of TWeaponInformation; end;
constructor TCollosusUnit.Create (Team, AtX, AtY: cardinal); begin SetLength(FWeapons, 5); end; |
Allerdings dauert der SetLength Befehl ja ziemlich lange, was mich eher nicht zu einem Freund dieses Lösungswegs macht.
Also, falls die Frage etwas unklar ist:
Ist TList für diesen Fall besser, obwohl die Zahl der Waffen pro Einheit eigentlich immer gleich bleibt oder ist ein array besser? Und wenn TList besser ist: Muss ich dafür Speicher reservieren oder so?
Danke im voraus.
"Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."