Bonsoir a tous,
je viens demander votre aide car cela fait des jours que je bosse sur mon 2048. Et m'approchant de la fin, je m'apercois que mes grosses fonctions de déplacements ne gèrent pas un cas particulier. Elles sont toutes contrsuites sur le même modèle a peu près, et je n'arrive pas a contourner ce problème voici mon code et le screen du bug :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 GRILLE mvtHaut( GRILLE gr, int* p){ int i = 0; // Parcours toute ma matrice while ( i <= 3){ for(int j = 1; j <= 3; j++){ int k = j; // La k-ieme case va avancer et faire les fusions si besoin while( k != 0 ){ if (gr.tab[k-1][i] == 0 ){ gr.tab[k-1][i] = gr.tab[k][i]; gr.tab[k][i] = 0; } if ( gr.tab[k][i] == gr.tab[k-1][i]){ gr.tab[k-1][i]*=2; gr.tab[k][i] = 0; *p += gr.tab[k-1][i];//score //si je fais une fusion j'arrete et je passe a la case suivante k = 1; } k--; } } i++; } return gr; }
La colonne de gauche devrait me donner la suite : <8,8,2,0>
Petite explication pour mon code, j'utilise une structure qui est une matrice (de la forme int tab[][]). L'idée du code est de partir d'une case après la case la plus en haut (Pour ce problème je vous ai fournis le mouvement vers le haut). Et je fais parcourir ladite case jusqu'en haut de la grille. Une fois arrivée a son chemin je descend et fait pareil pour la suivante, et je fusionne si possible.
Le problème est, dans ce cas, mon k qui represente le trajet de la case a la position [0][2], va refaire une fusion alors que celle-ci n'est pas voulue !
Veuillez excuser mes explications un peu balbutiante et j'espere que vous verrez ce que mes yeux n'ont pas vu.
Merci d'avance
Partager