web-dev-qa-db-de.com

Wie kann ich die Größe eines Arrays in C ändern?

Ich experimentiere ein bisschen mit Gamestudio. Ich mache jetzt ein Shooter-Spiel. Ich habe ein Array mit den Zeigern auf die Feinde. Ich will. bis wann ein Feind getötet wird. entferne ihn von der Liste. Und ich möchte auch neue Feinde erschaffen können.

Gamestudio verwendet eine Skriptsprache namens lite-C. Es hat die gleiche Syntax wie C und auf der Website heißt es, dass es mit jedem C-Compiler kompiliert werden kann. Es ist reines C, kein C++ oder irgendetwas anderes.

Ich bin neu in C. Ich programmiere normalerweise in .NET-Sprachen und einigen Skriptsprachen.

11
Aaron de Windt

Sobald ein Array in C erstellt wurde, wird es festgelegt. Sie benötigen eine dynamische Datenstruktur wie eine verknüpfte Liste oder eine ArrayList

1
user180825

Das kannst du nicht. Dies erfolgt normalerweise mit dynamischer Speicherzuweisung.

// Like "ENEMY enemies[100]", but from the heap
ENEMY* enemies = malloc(100 * sizeof(ENEMY));
if (!enemies) { error handling }

// You can index pointers just like arrays.
enemies[0] = CreateEnemy();

// Make the array bigger
ENEMY* more_enemies = realloc(enemies, 200 * sizeof(ENEMY));
if (!more_enemies) { error handling }
enemies = more_enemies;

// Clean up when you're done.
free(enemies);
23
dan04

Arrays sind statisch, sodass Sie ihre Größe nicht ändern können. Sie müssen die Datenstruktur der verknüpften Liste erstellen. Die Liste kann bei Bedarf erweitert und verkleinert werden.

3
user173424

Schauen Sie sich realloc an, mit dem Sie die Größe des Speichers ändern können, auf den ein bestimmter Zeiger zeigt (in C sind Arrays Zeiger).

0
dj2

Wie NickTFried vorschlug, ist Linked List eine Möglichkeit. Eine andere ist, einen Tisch zu haben, der groß genug ist, um die maximale Anzahl von Gegenständen aufzunehmen, die Sie jemals haben werden, und diesen zu verwalten (welche sind gültig oder nicht, wie viele Gegner sind derzeit in der Liste).

Was die Größenänderung angeht, müssten Sie einen Zeiger anstelle einer Tabelle verwenden, und Sie könnten diese neu zuweisen, kopieren und so weiter ... definitiv nichts, was Sie in einem Spiel tun möchten.

Wenn Leistung ein Problem ist (und ich vermute es ist), ist die richtig zugewiesene Tabelle wahrscheinlich das, was ich verwenden würde.

0
Matthieu