#1 Le 27/01/2014, à 22:12
- kinezana
[Résolu] Comportement imprévisible avec rand() et un switch
Bonjour à tous !
Je ne sais pas vraiment si rand() et/ou le switch sont en cause, mais quand je fais tourner ce code :
for(i = 0;i<64;i++)
{
position.x = 100+i/8*75;
position.y = i%8*75;
r = rand()%5;
switch(r)
{
case 0:
SDL_BlitSurface(blue, NULL, ecran, &position);
printf("%d : bleue [%d;%d]\n",i, position.x, position.y);
grille[i] = 0;
break;
case 1:
SDL_BlitSurface(yellow, NULL, ecran, &position);
printf("%d : jaune [%d;%d]\n",i, position.x, position.y);
grille[i] = 1;
break;
case 2:
SDL_BlitSurface(purple, NULL, ecran, &position);
printf("%d : violette [%d;%d]\n",i, position.x, position.y);
grille[i] = 2;
break;
case 3:
SDL_BlitSurface(green, NULL, ecran, &position);
printf("%d : verte [%d;%d]\n",i, position.x, position.y);
grille[i] = 3;
break;
case 4:
SDL_BlitSurface(red, NULL, ecran, &position);
printf("%d : rouge [%d;%d]\n",i, position.x, position.y);
grille[i] = 4;
break;
}
if((i+1)%8 == 0)
printf("\n");
}
Ça fait une grille de 8*8 avec une génération aléatoire d'une couleur sur 5 possible dans chacune des cases. Comme je dois faire des opérations, je voudrai stocker un chiffre associé à une couleur dans un tableau int[64]. Normal quoi.
Sauf que j'ai l'impression que les "case" se mélangent entre eux.
Lorsque l'output est "rouge" (donc implique un case à 4), la case du tableau est bien 4, mais l'image affiché n'est pas celle associé à "red" etc...
L'allocation de la case du tableau et le printf sont toujours raccords, mais pas les images affichés. Et c'est irrégulier en plus.
Exemple d'output et d'affichage (oui c'est un Cnadycrush-like, je m'occupe !) :
0 : rouge [100;0]
1 : bleue [100;75]
2 : verte [100;150]
3 : verte [100;225]
4 : bleue [100;300]
5 : rouge [100;375]
6 : rouge [100;450]
7 : jaune [100;525]
8 : violette [175;0]
9 : jaune [175;75]
10 : rouge [175;150]
11 : verte [175;225]
12 : violette [175;300]
13 : rouge [175;375]
14 : violette [175;450]
15 : verte [175;525]
16 : bleue [250;0]
17 : violette [250;75]
18 : violette [250;150]
19 : verte [250;225]
20 : violette [250;300]
21 : verte [250;375]
22 : violette [250;450]
23 : rouge [250;525]
24 : verte [325;0]
25 : violette [325;75]
26 : jaune [325;150]
27 : rouge [325;225]
28 : verte [325;300]
29 : jaune [325;375]
30 : violette [325;450]
31 : rouge [325;525]
32 : verte [400;0]
33 : bleue [400;75]
34 : violette [400;150]
35 : verte [400;225]
36 : rouge [400;300]
37 : verte [400;375]
38 : bleue [400;450]
39 : verte [400;525]
40 : rouge [475;0]
41 : jaune [475;75]
42 : jaune [475;150]
43 : violette [475;225]
44 : bleue [475;300]
45 : verte [475;375]
46 : violette [475;450]
47 : bleue [475;525]
48 : verte [550;0]
49 : rouge [550;75]
50 : bleue [550;150]
51 : violette [550;225]
52 : rouge [550;300]
53 : violette [550;375]
54 : violette [550;450]
55 : violette [550;525]
56 : bleue [625;0]
57 : bleue [625;75]
58 : verte [625;150]
59 : bleue [625;225]
60 : jaune [625;300]
61 : bleue [625;375]
62 : rouge [625;450]
63 : jaune [625;525]
N'hésitez pas à demander des précisions et merci beaucoup d'avance !
Dernière modification par kinezana (Le 28/01/2014, à 03:09)
Hors ligne
#2 Le 28/01/2014, à 03:08
- kinezana
Re : [Résolu] Comportement imprévisible avec rand() et un switch
Wooookaaaay, donc à la ligne 3 et 4, ce n'est pas
position.x = 100+i/8*75;
position.y = i%8*75;
mais
position.x = 100+i%8*75;
position.y = i/8*75;
Je vais me pendre, au revoir.
Hors ligne