Problème de detections de déplacement dans le jeu du taquin.
Résolu/Fermé
Naraka77
Messages postés
10
Date d'inscription
jeudi 15 novembre 2012
Statut
Membre
Dernière intervention
9 janvier 2014
-
15 nov. 2012 à 18:49
Naraka77 Messages postés 10 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 9 janvier 2014 - 16 nov. 2012 à 11:13
Naraka77 Messages postés 10 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 9 janvier 2014 - 16 nov. 2012 à 11:13
A voir également:
- Problème de detections de déplacement dans le jeu du taquin.
- 94 jeu - Télécharger - Puzzle & Réflexion
- Historique déplacement google - Guide
- Jeu zuma - Télécharger - Jeux vidéo
- Jeux de moto: jeu de course 3d - Télécharger - Course
- Jeu du pendu - Télécharger - Vie quotidienne
1 réponse
Utilisateur anonyme
16 nov. 2012 à 08:48
16 nov. 2012 à 08:48
Bonjour
Comment est définie et initialisée la variable plateau que tu passes à creer_plateau ? Je suis prêt à parier que c'est un simple int ** non initialisé. Dans ce cas, normal que ça plante dès que tu fais plateau[i]...
Si c'est bien ça, tu aurais dû le passer par référence et l'allouer dans creer_plateau. Je n'ai pas l'habitude du C++, je ne suis pas sûr de l'écriture du passage par référence ni de l'allocation d'un tableau d'int *, mais ça doit ressembler à :
void creer_plateau(int **&plateau, int nb_ligne, int nb_colonne){
int i, j;
int tmp = 0, randval_i = 0, randval_j = 0;
plateau=new int*[nb_colonne];
for (i = 0; i < nb_colonne; i++) plateau[i] = new int[nb_colonne];
De plus...
Dans l'initialisation de ton tableau, tu mélanges les indices :
for (i = 0; i < nb_colonne; i++) plateau[i] = new int[nb_colonne]; i est l'indice de colonne
for(i = 0; i < nb_ligne; i++)
for (j = 0; j < nb_colonne; j++) plateau[i][j] = i * nb_colonne + j;
i est devenu l'indice de ligne
Note que si ton plateau est carré, ça ne doit pas gêner.
Remarque sur ton calcul de nb_deplacements : il est faux, il n'y a que 2 déplacements dans les coins.
Il est inutilement compliqué : tu n'as pas besoin de variable nb_deplacements, il suffit de faire return 4, return 3 ou return 2 selon les cas ; ça évite les else qui alourdissent l'écriture. Personnellement, je n'aurais pas fait de fonction, mais initialisé un tableau du nombre de déplacements en même temps que le tableau initial, plus qu'à "piocher" dedans en cours de partie.
Comment est définie et initialisée la variable plateau que tu passes à creer_plateau ? Je suis prêt à parier que c'est un simple int ** non initialisé. Dans ce cas, normal que ça plante dès que tu fais plateau[i]...
Si c'est bien ça, tu aurais dû le passer par référence et l'allouer dans creer_plateau. Je n'ai pas l'habitude du C++, je ne suis pas sûr de l'écriture du passage par référence ni de l'allocation d'un tableau d'int *, mais ça doit ressembler à :
void creer_plateau(int **&plateau, int nb_ligne, int nb_colonne){
int i, j;
int tmp = 0, randval_i = 0, randval_j = 0;
plateau=new int*[nb_colonne];
for (i = 0; i < nb_colonne; i++) plateau[i] = new int[nb_colonne];
De plus...
Dans l'initialisation de ton tableau, tu mélanges les indices :
for (i = 0; i < nb_colonne; i++) plateau[i] = new int[nb_colonne]; i est l'indice de colonne
for(i = 0; i < nb_ligne; i++)
for (j = 0; j < nb_colonne; j++) plateau[i][j] = i * nb_colonne + j;
i est devenu l'indice de ligne
Note que si ton plateau est carré, ça ne doit pas gêner.
Remarque sur ton calcul de nb_deplacements : il est faux, il n'y a que 2 déplacements dans les coins.
Il est inutilement compliqué : tu n'as pas besoin de variable nb_deplacements, il suffit de faire return 4, return 3 ou return 2 selon les cas ; ça évite les else qui alourdissent l'écriture. Personnellement, je n'aurais pas fait de fonction, mais initialisé un tableau du nombre de déplacements en même temps que le tableau initial, plus qu'à "piocher" dedans en cours de partie.
16 nov. 2012 à 11:13
Tout d'abord, merci d'avoir pris la peine de me répondre !
Ensuite, merci, il est claire que maintenant, le programme marche beaucoup mieux, du moins, il ne plante plus pour l'instant.
Pour ce qui est des déplacements, oui, j'avoue que je me suis un peux compliqué la vie, mais j'ai changé tellement de fois mon code, car je croyais que le problème venait de cette fonction, que j'en ai fais quelques erreurs du coup. Je vais donc prendre en considération ce que tu m'as dis.
Merci encore une fois !