1

Je suis débutant en C, j'ai lu les tutoriaux de Pascal Martin, et quelques autres.
Je voudrais créer un trableau à 2 dimensions nommé carte, de 13 lignes et 23 colonnes.
Tous les tutoriaux que j'ai lus initialisent le tableau à sa déclaration : int carte[13][23] = {{5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0}, //dédale                                                    {5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0}};}

Comment faire pour le déclarer à un endroit, sans lui donner de valeur bien précise, et l'initialiser ensuite ?

2

3

Non, c'est là que je rencontre un problème en fait : je ne sais pas quelle est la syntaxe pour l'initialiser : ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};faut il faire de cette manière :     carte[13][23] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //sans labyrinthe                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0. Ca ne marche pas ! En effet, je crois qu'il essaye de mettre tout mon tableau dans la "cellule" 13/23.

4

c'est parce que tu ne peux pas l'initialiser en dehors de la déclaration smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

Si tu veux juste remplir ton tableau de zéro, tu peux utiliser memset.

6

Et pour autre chose que "partout le même nombre", tu peux sans doute utiliser un memcpy...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

7

JE vous explique mon cas, pourque vous puissiez me dire comment faire. En fait, je suis en train de faire un petit jeu pour TI68k : un snakeII, comme celui sur les Nokia. Le terrain de jeu est représenté par une matrice de 13 sur 23, que je remplit par différentes valeurs. Dans le menu du départ, le joueur peut choisir un "labyrinthe", c'est à dire une map ou il y a des murs. Il y a en tout 5 map avec des murs, et 1 sans murs. La chaîne string_carte prend des valeurs en fonction du labyrinthe choisit par le joueur. (y < nbr_lignes -1){                     if (carte[y+1][x] == 5) BitmapPut(origine_x + x*4, origine_y + y*4 + 2, pointeur_mur, ScrRect, A_XOR);                }                     }      } } Avant de commencer le jeu, il faut déclarer et initialiser la matrice de 13 sur 23 en fonction du labyrinthe qu'à choisi le joueur. Ensuite, par un algorithme simple, je trace la carte sur l'écran. if (string_carte == "Aucun"){ int carte[13][23] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, //sans labyrinthe                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};} else if (string_carte == "Boîte"){ int carte[13][23] = {{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}, //boîte                                                 {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}};} else if (string_carte == "Tunnel"){ int carte[13][23] = {{5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5}, //tunnel                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5}};} else if (string_carte == "Spirale"){ int carte[13][23] = {{0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0}, //spirale                                                    {0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,5,0,0,0,0,5,5,5,5,5,5,5,5,5},                                                    {0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0},                                                    {5,5,5,5,5,5,5,5,5,0,0,0,0,5,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0}};}       else if (string_carte == "Barrage"){ int carte[13][23] = {{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}, //barrage                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,5,0,5,5,5,5,5,5,5,0,5,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,5,0,5,5,5,5,5,5,5,0,5,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,5},                                                    {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},                                                    {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}};} else if (string_carte == "Dédale"){ int carte[13][23] = {{5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0}, //dédale                                                    {5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                                                    {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0},                                                    {0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0}};} //algorithme de dessin des murs printf("%d",carte[0][0]); ngetchx(); int x,y ; for (y = 0; y <= nbr_lignes-1; y++){      for (x = 0; x <= nbr_col-1; x++){           if (carte[y][x] == 5) {                BitmapPut(origine_x + x*4, origine_y + y*4, pointeur_mur, ScrRect, A_XOR);                if (x < nbr_col-1){                     if (carte[y][x+1] == 5) BitmapPut(origine_x + x*4 +2, origine_y + y*4, pointeur_mur, ScrRect, A_XOR);                }                if . Mon problème : à la compilation avec TIGCC, une erreur surgit : "'carte' undeclared (first use in this function)". C'est cela que ne comprends pas. Si quelqu'un pouvait m'aider, parceque là, je suis dans une impasse, et je n'ai aucune idée !
Merci !

8

la définition est locale: dès que tu sors du bloc { } , ce n'est plus déclaré.


Ce que je peux te conseiller, c'est de mettre en global un tableau de 6 tableaux const contenant tes valeurs.
Ensuite, tu les utilises comme tu veux: soit directement, soit si tu dois les modifier, tu recopies le bon dans un 6e tableau avec un memcpy, au début de chaque level...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

9

Six tableaux de cette taille-là, surtout s'il doit les laisser en int (-> short, éviter "int" qui n'est pas portable), c'est quand même lourd...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

10

Ben... de toute façon, il en aura besoin, de ces données
Ce dont je parle, c'est de données statiques...
Ou bien, les mettres dans des fichiers à part (des fichiers de niveau)
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

11

Ok, merci les gars !

12

Au fait, tes string_carte == , ils ont toutes les chances d'être toujours faux, car == comparera les adresses des chaines.
En C, tu dois utiliser la fonction strcmp() qui renvoit zéro si les chaines sont identiques.

Donc, tu remplaces tes if( string_carte == "boulet" ) par des if( strcmp(string_carte, "boulet") == 0 ) et les comparaisons marcheront...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

13

> Ou bien, les mettre dans des fichiers à part (des fichiers de niveau)
Ce n'est utile que s'il est prévu qu'il puisse y en avoir beaucoup, car il y a un peu de code pour rechercher les fichiers.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

14

tismaster> si tu ne compte pas mettre plus de 256 tiles différents, tu peux faire des tableaux de char
(ça prends 2x moins de place)

15

16

./15: Je ne vois pas ce que ca a de moche ou de inefficace ?

17

C'est plus lisible que if( !strcmp(...) ) , surtout pour quelqu'un qui débute: On oublie facilement le point d'exclamation...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

18

Personellement, je trouve que c'est de une mauvaise politique que de l'utiliser sur quelque chose pouvant valoir autre chose que 0 ou 1 (ie un booleen C).

19

Moi, je l'utilise généralement pour les booléens et les pointeurs, et ça doit être tout.
Et encore, généralement, c'est seulement pour tester s'ils sont vrais: Pour tester s'ils sont faux, je préfère mettre un == NULL/FALSE plutot qu'un ! qu'on loupe facilement...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.