web-dev-qa-db-fra.com

Comment puis-je changer la taille d'un tableau en C?

J'expérimente un peu avec gamestudio. Je fais maintenant un jeu de tir. J'ai un tableau avec le pointeur sur les ennemis. Je voudrais. à quand un ennemi est tué. le retirer de la liste. Et je veux aussi pouvoir créer de nouveaux ennemis.

Gamestudio utilise un langage de script appelé Lite-C. Il a la même syntaxe que C et sur le site Web, ils peuvent être compilés avec n’importe quel compilateur C. C'est du C pur, pas de C++ ou quoi que ce soit d'autre.

Je suis nouveau sur C. Je programme normalement dans les langages .NET et certains langages de script,

11
Aaron de Windt

Une fois qu'un tableau en C a été créé, il est défini. Vous avez besoin d'une structure de données dynamique telle qu'une liste chaînée ou une liste de tableaux.

1
user180825

Tu ne peux pas. Cela se fait normalement avec une allocation de mémoire dynamique.

// 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

Les tableaux sont statiques, vous ne pourrez donc pas changer sa taille. Vous devrez créer la structure de données de la liste liée. La liste peut s'allonger et diminuer à la demande.

3
user173424

Jetez un coup d'oeil à realloc qui vous permettra de redimensionner la mémoire pointée par un pointeur donné (qui, en C, les tableaux sont des pointeurs).

0
dj2

Comme NickTFried l'a suggéré, la liste chaînée est un moyen d'aller de l'avant. Une autre consiste à avoir une table assez grande pour contenir le nombre maximum d’objets que vous aurez et gérer (ceux qui sont valides ou non, combien d’ennemis sont actuellement dans la liste).

En ce qui concerne le redimensionnement, vous devez utiliser un pointeur au lieu d'un tableau et vous pouvez réaffecter, copier, etc., ce que vous ne voulez certainement pas faire dans un jeu.

Si la performance est un problème (et je suppose que c'est le cas), le tableau correctement attribué est probablement ce que j'utiliserais.

0
Matthieu