Bonjour, suite au tutoriel sur le C, j'ai essayé de faire le puissance 4 mais j'ai un soucis.
Voilà le code des fonctions :
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #include <stdio.h> #include <stdlib.h> #include "puiss4Proto.h" void Puiss4_alloc(Puiss4 A, int lignes, int colonnes) { int i; A->data = malloc(sizeof(char*) * lignes); if(A->data == NULL) { fprintf(stderr, "Puiss4_alloc : Echec de l'allocation\n"); } for(i = 0 ; i < colonnes ; i++) { A->data[i] = malloc(sizeof(char) * colonnes); if(A->data[i] == NULL) { fprintf(stderr, "Puiss4_alloc : Echech de l'allocation\n"); } } } Puiss4 Puiss4_create(int lignes, int colonnes, char caractere) { int j, i; Puiss4 A = malloc(sizeof(struct _Puiss4)); A->lignes = lignes; A->colonnes = colonnes; A->caractere = caractere; Puiss4_alloc(A, lignes, colonnes); for(j = 0 ; j < lignes ; j++) { for(i = 0 ; i < colonnes ; i++) { A->data[j][i] = caractere; } } return A; } void Puiss4_print(Puiss4 A) { int j, i; for(j = 0 ; j < A->lignes ; j++) { printf("\n"); for(i = 0 ; i < A->colonnes ; i++) { printf("| "); printf("%c", A->data[j][i]); } } } void Puiss4_destroy(Puiss4 A, int lignes, int colonnes) { int j; for(j = 0 ; j < lignes ; j++) { free(A->data[j]); } free(A); } void Puiss4_add(Puiss4 A, int nb_case, char caractere) { int j; if((nb_case > A->colonnes) || (nb_case < 0)) { fprintf(stderr, "Puiss4_add : %d out of bounds\n", nb_case); } int current_indice = Puiss4_indice(A, nb_case); printf("1 | current_indice : %d\n", current_indice); for(j = 0; j > current_indice ; j--) { if((A->data[j][nb_case - 1] == 'x') || (A->data[j][nb_case - 1] == 'o')) { current_indice++; printf("2 | current_indice : %d\n", current_indice); } } A->data[current_indice - 1][nb_case - 1] = caractere; } int Puiss4_indice(Puiss4 A, int nb_case) { int current_indice = 0; int j; for(j = 0 ; j < A->lignes ; j++) { if((A->data[j][nb_case - 1] == 'x') || (A->data[j][nb_case - 1] == 'o')) { current_indice = j; printf("Current_indice : %d\n", current_indice); return current_indice; } } } int Puiss4_parcours_vertical(Puiss4 A, int nb_case) { int j; int compteur = 1; for(j = 0 ; j < A->lignes - 1 ; j++) { if(A->data[j][nb_case - 1] == A->data[j + 1][nb_case - 1]) { compteur++; } else compteur = 1; } return compteur; } /*void Puiss4_parcours_diagonal(Puiss4 A) { }*/ int Puiss4_parcours_horizontal(Puiss4 A, int nb_case) { int i; int compteur = 1; printf("Compteur : %d\n", compteur); int current_indice = Puiss4_indice(A, nb_case); for(i = 0 ; i < A->colonnes - 1 ;i++) { if(A->data[current_indice - 1][i] == A->data[current_indice - 1][i + 1]) { compteur++; printf("%c = %c \n", A->data[current_indice - 1][i],A->data[current_indice - 1][i + 1]); printf("Compteur : %d\n", compteur); } else compteur = 1; } return compteur; } |
Le main :
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <stdio.h> #include <stdlib.h> #include "puiss4Proto.h" #define sortie 4 int main(int argc, char** argv) { int indice = 0; int nb_case = 0; int compteur; int compteur2; /*int sortie = 4;*/ Puiss4 A = Puiss4_create(6, 7, ' '); printf("Bienvenue sur le jeu du Puissance 4 !\n"); printf("Joueur 1 : x\n"); printf("Joueur 2 : o\n"); while(compteur != sortie) { Puiss4_print(A); printf("\n"); indice = Puiss4_indice(A, nb_case); printf("\n"); printf("Joueur 1 : "); scanf("%d", &nb_case); Puiss4_add(A, nb_case, 'x'); Puiss4_print(A); printf("\n"); compteur = Puiss4_parcours_vertical(A, nb_case); printf("Puiss4_parcours_vertical : Compteur | Sortie = %d | %d \n", compteur, sortie); printf("\n"); /*compteur2 = Puiss4_parcours_horizontal(A, nb_case); printf("Puiss4_parcours_horizontal : Compteur | Sortie = %d | %d \n", compteur2, sortie); printf("\n");*/ indice = Puiss4_indice(A, nb_case); printf("\n"); printf("Joueur 2 : "); scanf("%d", &nb_case); Puiss4_add(A, nb_case, 'o'); printf("\n"); Puiss4_print(A); printf("\n"); compteur = Puiss4_parcours_vertical(A, nb_case); printf("Puiss4_parcours_vertical : Compteur | sortie = %d | %d\n", compteur, sortie); printf("\n"); /*compteur2 = Puiss4_parcours_horizontal(A, nb_case); printf("Puiss4_parcours_horizontal : Compteur | Sortie = %d | %d \n", compteur2, sortie); printf("\n");*/ indice = Puiss4_indice(A, nb_case); printf("\n"); } Puiss4_destroy(A, 6, 7); printf("Vous avez gagné !\n"); return EXIT_SUCCESS; } |
Donc voilà le problème se situe au niveau de la fonction Puiss4_parcours_horizontal, dès le premier caractère saisi, compteur est égal à 7 alors qu'il devrait être égal à 1, ce que je comprends pas c'est que avec la fonction Puiss4_parcours_vertical ça marche parfaitement.
ce que m'affiche la fonction qui marche :
1 2 3 4 5 6 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | x| | | | | | Puiss4_parcours_vertical : Compteur | Sortie = 1 | 4 |
celle qui ne marche pas :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | x| | | | | | Compteur : 1 Current_indice : 5 = Compteur : 2 = Compteur : 3 = Compteur : 4 = Compteur : 5 = Compteur : 6 = Compteur : 7 Puiss4_parcours_horizontal : Compteur | Sortie = 7 | 4 Current_indice : 5 |
Merci
+0
-0