Les strucutures de tableau en C win
Résolu
poparnassus
Messages postés
426
Date d'inscription
Statut
Membre
Dernière intervention
-
SanzenSekai Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
SanzenSekai Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je me suis aperçu que je ne maîtrisai pas les tableaux, donc petit exercice je code le fameux jeux SNACK.
J'ai besoin d'un tableau de dimension "n" où "n" represente le nombre de block du serpent et donc pour chaque valeur de block_n[i] je dois avoir x et y. ( position du point i={x,y} )
Du coup je veux que ma structure "snacke" soit un tableau
Comment on déclare une structure de tableau ?
je défini la taille de mon serpent soit "int nb_block" dans ma structure mais je crois que je ne le fais pas au bon endroit car je veux que "nb_block" soit la taille de mon tableau de structure.
merci
Je me suis aperçu que je ne maîtrisai pas les tableaux, donc petit exercice je code le fameux jeux SNACK.
J'ai besoin d'un tableau de dimension "n" où "n" represente le nombre de block du serpent et donc pour chaque valeur de block_n[i] je dois avoir x et y. ( position du point i={x,y} )
typedef struct SNACKE SNACKE; struct SNACKE { int snack_speed; int block_n[2]; //x et y int nb_block; }; void init_jeux(FENETRE *ecran,SNACKE *snacke,JEUX *jeux) { //init snacke snacke->nb_block= 1; snacke->snack_speed = 1; //Position de depart du serpent snacke->block_n[0]=jeux->Rlevel_1.w/2; snacke->block_n[1]=jeux->Rlevel_1.h/2; } main() { SNACKE snacke; init_jeux(&snacke); while(quit) { //Mon programme } }
Du coup je veux que ma structure "snacke" soit un tableau
Comment on déclare une structure de tableau ?
je défini la taille de mon serpent soit "int nb_block" dans ma structure mais je crois que je ne le fais pas au bon endroit car je veux que "nb_block" soit la taille de mon tableau de structure.
merci
A voir également:
- Les strucutures de tableau en C win
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Win rar - Télécharger - Compression & Décompression
2 réponses
int block_n[2]; fait un tableau de int,
struct SNACKE snake[100]; fera un tableau de taille 100 avec ta structure a chaque cellule.
Mais je ne comprend pas ce que tu veux dire quand tu parles de structure de tableau...
Tu pourrais être plus clair ?
struct SNACKE snake[100]; fera un tableau de taille 100 avec ta structure a chaque cellule.
Mais je ne comprend pas ce que tu veux dire quand tu parles de structure de tableau...
Tu pourrais être plus clair ?
Si tu veux faire des tableaux a taille "variable" tu peux utiliser la fonction malloc.
Par exemple si tu as une fonction qui prend en paramètre un int "taille" et que tu veux créer un tableau de taille éléments tu fais quelque chose comme ;
void machin (int taille) {
SNACKE * snake ;
snake = malloc (taille * sizeof (SNACKE)) ;
}
Tu peux alors utiliser snake plus ou moins comme si tu avais fait
SNACKE snacke[taille];
Par contre une fois que tu a fais appel a malloc tu ne peux toujours pas modifier la taille de ton tableau, si tu veux quelque chose de vraiment variable il te faut faire une liste comme dit plus haut.
Et lorsque que tu a fini d'utiliser ton tableau tu dois faire appel a la fonction free.
Dans mon exemple tu dois écrire ;
free (snake) ;
Par exemple si tu as une fonction qui prend en paramètre un int "taille" et que tu veux créer un tableau de taille éléments tu fais quelque chose comme ;
void machin (int taille) {
SNACKE * snake ;
snake = malloc (taille * sizeof (SNACKE)) ;
}
Tu peux alors utiliser snake plus ou moins comme si tu avais fait
SNACKE snacke[taille];
Par contre une fois que tu a fais appel a malloc tu ne peux toujours pas modifier la taille de ton tableau, si tu veux quelque chose de vraiment variable il te faut faire une liste comme dit plus haut.
Et lorsque que tu a fini d'utiliser ton tableau tu dois faire appel a la fonction free.
Dans mon exemple tu dois écrire ;
free (snake) ;
En effet, si la taille du tableau doit changer on peut en créer un nouveau, copier dedans et libérer l'ancien (la fonction realloc() fait déjà tout cela).
On peut aussi utiliser une liste qui est moins contraignante à la réallocation mémoire mais a aussi beaucoup d'autres inconvénients (complexe à écrire, consomme plus de mémoire, risque d'effet 'gruyère', pas d'accès direct il faut parcourir la liste pour trouver le i-ème élément)
On peut aussi utiliser une liste qui est moins contraignante à la réallocation mémoire mais a aussi beaucoup d'autres inconvénients (complexe à écrire, consomme plus de mémoire, risque d'effet 'gruyère', pas d'accès direct il faut parcourir la liste pour trouver le i-ème élément)
Tu peux te faire un module pour créer des listes simplement chaînée, elles te seront suffisantes pour ton projet!
J'ai trouvé ce lien qui les explique, rien de bien compliqué si tu maîtrises à peu près les pointeurs!
https://nicolasj.developpez.com/articles/listesimple/
J'ai trouvé ce lien qui les explique, rien de bien compliqué si tu maîtrises à peu près les pointeurs!
https://nicolasj.developpez.com/articles/listesimple/
Du coup j'ai fait ceci
Du coup:
M'affiche la valeur de
J'ai un warning sur toute mes fonction qui font appel a Ya un truc que je fais de travers ^^
Si tu déclares ta structure de position comme étant juste un simple tableau alors ça ne sert à rien, tu encapsules juste ton tableau dans une structure ce qui est inutile!
Avec n un entier qui te permet ainsi de faire un tableau de longueur n qui pourra contenir tes positions!
Par contre la valeur est fixe, il faudra faire attention à ne pas dépasser la longueur du tableau au niveau des indices que tu utiliseras! Tu peux sinon faire ton tableau en utilisant les pointeurs (voire même créer ton propre module de tableau) mais cela te demandera plus de temps!
Parce que comme j'ai fait ci dessus J'ai bien un tableau snacke[100] mais seulement 2 variable x et y alors qu'il me faut autant de variable x et y que de block_n