1

Bon alors voila mon truc c'est que je veux faire un boggle en C. Je précise qui chuis un gros newbie. Donc voila mon problème: je veux créer 16 listes contenant chacune 6 caractères. Après je veux tirer 1 caractère aléatoirement par liste et les placer dans une matrice de 4*4 aléatoirement. Bah c'est bien beau mais je sais pas comment on fait ca fait deux heures que je galère a trouver des explications mais je pense qu'il faut utiliser des pointeurs et je pige toujours pas pourquoi (d'ailleurs j'ai lu au moins 15 fois le tuto de squale sur les pointeurs et je capte toujours pas a quoi ca sert...).
Qqn peut m'aider ? Merci smile
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

2

Ben pour tes listes, tu les déclares comme ça :

char liste_1[6] = {caract1, caract2,...};

Et tu accedes aux éléments comme ça :

liste_1[numero_de_l_element]

Attention : Numerotation de 0 à 5 dans ton cas

Ensuite, tu fais ton tirage (j'espere que tu sais faire ça), et tu stockes dans ta mat 4x4, que tu déclares comme ça :

char mat[4][4];

et tu accedes aux éléments comme ça :

[i]mat[j]

Bon, cette méthode alloue la mémoire necessaire au moment de la compilation. Tu peux aussi utiliser les pointeurs, ce qui produira un code plus petit. Je reprend les déclarations :

char *liste1;
char *mat;


Ensuite, il faut allouer la memoire :

liste1 = malloc (6);
mat = malloc (16);


Tu utilises ensuite ces tableaux exactement pareil.
N'oublie pas dans ce cas de libérer la memoire à la fin, avec free.
Mon site perso : http://www.xwing.info

3

ok vais essayer ca, je reviens si j'ai un problème
merci smile
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

4

bon bah je crois que y'a un probleme pour ca:
char d1[6]={P,U,L,E,T,S};

bah j'ai: 'P' undeclared (first use in this function)

et c'est pareil pour toutes les lettres et pour toutes les listes...
faut mettre des guillemets ?
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

5

je crois bien oui smile
enfin t'aurais pu essayer et voir si ça marchait d'abord! grin
avatar
;)

6

bah je viens d'essayer et ca marche pas grin
help !
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

7

En tout cas le warning undeclared signifie qu'il considère P et les autres comme des variables, et pas comme des lettres
et puis moi j'ai pas d'erreurs en faisant
char test[4]={'e','r','t','y'};
faut mettre des guillemets simples !! (c'est peut-être là ton erreurconfus)
avatar
;)

8

ah bah voila, des guillemets simples !!
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

9

autre probleme:
je veux chopper une lettre par liste et j'ai des listes comme ca:
char d1[6]={'a','b','c','d','e','f'};
char d2[6]={'g','h','i','j','k','l'};
etc... jusuqa d16
j'aimerais donc chopper les lettres avec une boucle for, mais je sais pas comment augmenter le nombre x dans: dx (x numéro de la liste).
J'espere que je suis clair...
qqn sait ? merci smile
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

10

OK, je crois que tu veux faire un peu comme avec l'indirection en BASIC, non ?

On ne peut pas en C !
Il faut passer par des techniques secrètes !

par ex : dans ton cas, tu peux faire un tableau à 2 dimensions :
char d[2][7]={"abcdef","ghijkl"};
("abcdef" <=> {'a','b','c','d','e','f'})
Et pour accéder à un élément, tu fais une doucle :
for(i=0;i<2;i++)
 for(j=0;j<6;j++)
  DrawChar(6*j,8*i,d[i][j],1);
Je pense que ça devrait marcher....

11

pas bete ca, vais essayer
merci wink
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

12

ca marche impec cette technique, merci beaucoup top
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

13

("abcdef" <=> {'a','b','c','d','e','f'})


("abcdef" <=> {'a','b','c','d','e','f', ''} grinwink)
char d[2][7]={"abcdef","ghijkl"};


c bof quand tu as 2 textes de tailles différentes ça ... mieux vaut un :

*char d[2]={"abcdef","ghijkl"};

puis cette routine :
const char *d[2]={"abcdefjkhkjkhjk","ghijkl"}; int j, i=0; clrscr(); for(j=0;j<2;j++) {    for(i=0; *d[j] ; i++)    {       DrawChar(6*i ,8*j , *d[j]++ ,1);    } } ngetchx();
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

14

non mais ce ne sont pas des textes, ce sont des lettres, c'est bien un tableau de char...
juste que jackiechan91 avait la flemme d'écrire :
char d[2][6]={{'a','b','c','d','e','f'},{'g','h','i','j','k','l'}}
si j'ai bien compris. C'est donc pas un texte qui finit par
Et puis en ce qui concerne la taille, ce sont des dés, qui ont donc 6 faces ! Pas de problème donc.
j'ai bien compris stylobil ???
avatar
;)

15

ok wink, mais moi je parle du cas général quand on bosse sur un moteur de texte par exemple ! wink

une chaine : "abc" = {'a', 'b', 'c', '};

un tableau : {1,2,3,4,5,6};

le '' est que pour les chaines. wink
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

16

BiHi a écrit :
non mais ce ne sont pas des textes, ce sont des lettres, c'est bien un tableau de char...
juste que jackiechan91 avait la flemme d'écrire :
char d[2][6]={{'a','b','c','d','e','f'},{'g','h','i','j','k','l'}}
si j'ai bien compris. C'est donc pas un texte qui finit par
Et puis en ce qui concerne la taille, ce sont des dés, qui ont donc 6 faces ! Pas de problème donc. j'ai bien compris stylobil ???


c'est tout a fait ca: 16 dés donc 16 listes, 6 faces par dés donc 6 lettres par liste wink
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

17

Pim> donc t'avais rien à voir ! grin tongue
stylobil> ben c bon, problème résolu, on attends le boggle maintenant ! Si t'as d'autres problèmes, hésite pas !smile
avatar
;)

18

bah le boggle est fini
manque plus qu'une presentation digne de ce nom
j'ai mis un timer de 3 minutes mais j'ai un souci: j'utilise un buffer pour le timer et lorsque je relance une partie, le buffer ne se vide pas apparemment, donc ca fait un ptetit bug d'affichage au niveau du temps restant... comment fait-on pour vider un buffer ?
BiHi: merci grin
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

19

lol, ma routine est fantastique, elle est générale na !!!!! tonguetongue le jour où vous passerez à plusieurs tailles de txt pour des raisons x ou y, vous saurez faire au moins ! tonguetongue
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

20

Pim89 a écrit :
("abcdef" <=> {'a','b','c','d','e','f', ''} grinwink)

Ah oui, c'est vrai........roll
Pim89 a écrit :
lol, ma routine est fantastique, elle est générale na !!!!! tonguetongue le jour où vous passerez à plusieurs tailles de txt pour des raisons x ou y, vous saurez faire au moins ! tonguetongue


C'est vrai, la routine de Pim89 est super pratique.
Je n'y ai pas pensé ici.
Mais je l'utilise dans un de mes prog, et ça permet d'économmmiser pas mal de place, si on a des chaîne de taille différentes.

21

bah les tableaux de pointeurs quadn on a des chaines + ou - grandes, c'est le top ! topmais bon, ça doit encore s'optimiser ou faire un truc mieux que mon truc. oui
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

22

Pim89 a écrit :
("abcdef" <=> {'a','b','c','d','e','f', ''} grinwink)


erf, si tu as var[6]="abcdef";, ça sera equivalent à var[]={'a','b','c','d','e','f'};
Si ton tableau est trop petit, il fait petter le ''...
Mon site perso : http://www.xwing.info

23

Ouais, enfin il faut quand même l'utiliser seulement si on a des grandes différences de taille (pas un ou deux caractères de plus), parce que avec ta technique, chaque élément du tableau est un pointeur de 4 octets qui pointe sur la chaine, ce n'est pas négligeable.

24

chaque élément du tableau est un pointeur de 4 octets


heu, chaque élément du tableau ('a' , 'b' ect) ne fait qu'1 octet ?! confusconfus
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

25

guilc a écrit :
erf, si tu as var[6]="abcdef";, ça sera equivalent à var[]={'a','b','c','d','e','f'}; Si ton tableau est trop petit, il fait petter le ''...


tout à fait oui mais je parlais du cas où on déclare de cette façon : char str[]="abscd"; le compilateur va prévoir l'espace nécessaire pour le caractère nul wink. oui
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

26

Ah, bah je dis p-ê une connerie, mais je pense qu'avec cette déclaration :
char *tab[3]={"Salut","Comment","tu vas ?"};

de la place est réservée pour les chaînes : 23 octets
tab[0], tab[1] et tab[2] sont des pointeurs (qui prennent 4 octets) vers les chaines.
Donc en tout : 23+3*4=35 octets.
Non ?

27

ah ok, tu parlais de la place des pointeurs, pas des éléments du tableaux ... winkwinkoui

par contre pour l'espace requis par les pointeurs j'en sais trop rien en fait. sadsad
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

28

bah normalement *tab prend 1 octet car il pointe vers 3 pointeurs de type char

puis ensuite chacun des pointeurs *tab[0], *tab[1] et *tab[2] (vers lesquels *tab pointe) prennent aussi 1 octet chacun (car pointage vers chaine, donc type char).

Donc cette déclaration "coute" 4 octets en tout normalement, c bien ça.
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

29

Ben ça dépend de quelle déclaration tu parles wink

30

stylobil a écrit :
bah le boggle est fini
manque plus qu'une presentation digne de ce nom
j'ai mis un timer de 3 minutes mais j'ai un souci: j'utilise un buffer pour le timer et lorsque je relance une partie, le buffer ne se vide pas apparemment, donc ca fait un ptetit bug d'affichage au niveau du temps restant... comment fait-on pour vider un buffer ?
BiHi: merci grin


donc je reposte puisque c'est oublié appremment: comment on vide un buffer ?
"La violence est le dernier refuge de l'incompétence." Isaac Asimov