Bonjour,
Je suis en train de faire un projet puissance 4 mais je ne sais pas si mes fonctions "gagner" (horizontalement, verticalement, diagonales) sont bonnes... Pouvez-vous m'aider svp ? :?
Bonne journée !
Version imprimable
Bonjour,
Je suis en train de faire un projet puissance 4 mais je ne sais pas si mes fonctions "gagner" (horizontalement, verticalement, diagonales) sont bonnes... Pouvez-vous m'aider svp ? :?
Bonne journée !
Au lieu de donner l'intégralité de ton intitulé de projet et de ta classe, pourquoi ne pas nous isoler tes portions de code où tu te poses des questions ?
Salut,
Vu comment ton programme est structuré, tu peux facilement écrire des petits programmes de simulation, et tester si tes méthodes font ce qu'elles sont censées faire. On appelle ça des tests unitaires.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 static boolean aGagneHor(int NumJoueur, int y, int x) { int NbCase = 0; int k = 1; int i = x; while (NbCase <= 4 && k <= 4 && i <= grille[0].length-1) { if (grille[y][i] == NumJoueur) { NbCase = NbCase + 1; } k++; i++; } if (NbCase == 4) { return true; } else { return false; } }
Pourquoi ne pas faire quelques fonctions ?
Chacune de ces méthodes sont relativement simple à écrire. Et à valider !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 /* * Indique si les quatre valeurs correspond à une victoire */ public boolean isLineWin(int cel1, int cel2, int cel3 , int cel4); /* * Par cours le tableau dans le sens horizontale pour vérifier si il y a une victoire dedans */ public boolean isTableHorizontaleWin(int[][] board); /* * Par cours le tableau dans le sens vertical pour vérifier si il y a une victoire dedans */ public boolean isTableVerticalWin(int[][] board); /* * Par cours le tableau dans le sens Diagonal pour vérifier si il y a une victoire dedans */ public boolean isTableDiagonalWin(int[][] board); /* * Par cours le tableau dans tout les sens pour vérifier si il y a une victoire dedans */ public boolean isTableWin(int[][] board);
Cordialement,
Patrick Kolodziejczyk.
Si tu as testé cette méthode, tu as dû voir qu'elle répondait bien true lorsqu'il y a exactement 4 cases successives du joueur NumJoueur, en partant de la colonne x, sur la ligne y, et false dans le cas contraire. La signature étant conforme à l'énoncé, tu as répondu à la question. C'est le principal. Si certains pensent avoir le temps et l'envie de te donner des conseils pour améliorer telle ou telle partie, grand bien leur fasse.
Je n'avais pas vue l'image de l'énoncé.
J'avoue que le while pour faire la validation, c'est un peu "too mutch"....
Ce qui me semble plus simple...Code:
1
2
3
4
5
6
7
8
9
10
11
12 static boolean aGagneHor(int NumJoueur, int y, int x) { if(y>0 && y<grille.length && x>0 && x+3 <<grille[y].length){ int case1 = grille[y][i]; int case2 = grille[y][i+1]; int case3 = grille[y][i+2]; int case4 = grille[y][i+3]; if(case1 == NumJoueur && case2 == NumJoueur && case3 == NumJoueur && case4 == NumJoueur){ return true; } } return false; }
Cordialement,
Patrick Kolodziejczyk.
En principe, il y a qu'un <
C'est juste tout les contrôles pour vérifier les index.
Pour les autres fonctions (c le mp), met l'ensemble ici.
Cordialement,
Patrick Kolodziejczyk.
Bonjour,
Petit truc aussi. Ca :
tu peut l'écrire comme ça :Code:
1
2
3
4
5 if (NbCase == 4) { return true; } else { return false; }
cf : les ternaires. C'est la même chose en abrégé.Code:return (NbCase == 4 ? true : false);
Mais bon tu en as plus besoin dans le dernier exemple.
Les ternaires ne sont pas conseillé. Du fait, que tout le monde ne comprends pas leur syntaxe.
Sinon, pas besoin des parenthèses, mais le ; est obligatoire.
Cordialement,Code:return NbCase == 4;
Patrick Kolodziejczyk.
Merci pour l'astuce. J'ai terminé le projet et il fonctionne correctement. :)
xD bah oui vu comme ça. :aie:Citation:
C'est plus simple/lisible avec
mais bon c'est qu'un détail...Code:return (NbCase == 4)