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

1

11.03.2010, 16:09

Dynamisches Array bei Strategiespiel?

Hi

dynamische Arrays können ja v.a. dazu verwendet werden, wenn man ein Array erzeugen will, aber erst während der Laufzeit die Größe herauskriegt (der Spieler wird z.B. aufgefordert, die Größe einzutippen).

Wie ist das z.B. bei einem RTS, bei dem immer neue Einheiten erzeugt werden sollen und auch wieder vernichtet (wenn sie "sterben")?

Kann man da auch mit dynamischen Arrays vorgehen? Der Unterschied ist ja, dass es keine endgültige Größe des Arrays gibt, sondern diese sich dauernd ändert, wenn halt Einheiten erschaffen oder vernichtet werden.

Und wie ginge das mit anschließendem delete? Durch delete[] würde ja das ganze Array futsch gemacht, aber was, wenn man nur eine einzige Einheit, also ein einziges Element des Arrays beseitigen will?

Gruß
Sechem

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

2

11.03.2010, 16:15

Schau dir ambesten mal die Container-Templateklassen der STL an.
Namentlich: std::vector, std::list, etc. pp.

PS. Wenn du nur ein Element eines Arrays löschen willst, dann tust du es eben.
Ein delete[] würde das Array per se löschen, aber nicht die Objekte, auf die lediglich die Pointer im Array gespeichert sind.
Was ich meine, ist, dass...

C-/C++-Quelltext

1
2
3
4
5
Unit* aUnits = new Unit[ 2 ];
aUnits[ 0 ] = new Soldier();
aUnits[ 1 ] = new Tank();
// ...

delete [] aUnits;

... unweigerlich zu einem Memory-Leak führt.
<< an dieser Stelle ist eine Signatur verstorben >>

3

11.03.2010, 16:41

Mit dynamischen Arrays kann man arbeiten dazu schreibt man sich in der Regel eine eigenen Klasse die einen dynamischen Array verwendet. Da dabei aber häufig viele unnötige Fehler passieren, schließe ich mich meinem Vorredner an die STL-Container zu benutzen, da diese praktisch fehlerfrei mit einem gigantischen Funktionsumfang funktionieren.

4

11.03.2010, 16:50

Ok, so weit bin ich noch nicht aber seh ich mir dann bald wahrscheinlich mal an.
Danke für die Hilfe!

Dark Fly

Treue Seele

Beiträge: 163

Wohnort: Bielefeld

Beruf: Schüler

  • Private Nachricht senden

5

11.03.2010, 16:57

Hi,

da ich wenig Ahnung habe wollte ich mal fragen, was in einem solchen Fall gegen die Verwendung von Verketteten Listen spricht?
MfG Dark Fly

C-/C++-Quelltext

1
2
3
4
int *i;                     // Erstelle Zeiger
while(true)                 // führe Schleife immer aus
{new (int) = i;}            // allokiere frischen Speicher
                            // warte auf unendliche Langsamkeit....

idontknow

unregistriert

6

11.03.2010, 17:01

Nichts, std::vector/list ist ja ne verkettete Liste. Eher sollte man eine verwenden :)

Dark Fly

Treue Seele

Beiträge: 163

Wohnort: Bielefeld

Beruf: Schüler

  • Private Nachricht senden

7

11.03.2010, 17:03

uups... :oops:
die Antwort hab ich übersehen
thx
MfG Dark Fly

C-/C++-Quelltext

1
2
3
4
int *i;                     // Erstelle Zeiger
while(true)                 // führe Schleife immer aus
{new (int) = i;}            // allokiere frischen Speicher
                            // warte auf unendliche Langsamkeit....

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

11.03.2010, 17:52

seit wann ist std::vector eine verkettete liste?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

11.03.2010, 18:09

Oder anders formuliert:
std::vector <- gekapseltes array
std::list <- gekapselte doppelverlinkte liste
std::map <- gekapselter baum
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

10

11.03.2010, 18:28

Wie kommst du jetzt bei std::map auf Baum, Nox?
Vermutlich wird es in den meisten Fällen als Baum implementiert sein (zwecks Sortierung), aber nach Außen hin ist ein Dictionary.
<< an dieser Stelle ist eine Signatur verstorben >>

Werbeanzeige