Bonjour, dans le cadre d'un exercice je dois coder le jeu d'Othello (Enfin c'est le Reversi qui est apparemment une variante). J'ai un problème lorsque je veux capturer des pions, quelques fois les pions ne sont pas capturés et d'autres fois ils sont capturés je ne sais pas trop comment.
Voici mon code pour la capture (Avec une explication en dessous):
Je n'ai pas mis tout le code parce que juste cette partie est pour la capture d'un pion sur la gauche et le reste suit le même schéma (Sauf pour les diagonales où j'utilise le j en plus).
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 int capture(plateau p, int x, int y, int couleur){ int i,j; p[x][y] = couleur; int points = 1; p[x][y] = couleur; if(p[x-1][y] != couleur){ for(i=x-1; i > 0; i--){ if(p[i-1][y] == couleur && p[i][y] != couleur && p[i][y] != VIDE){ while(i < x){ p[i][y] = couleur; if(est_coin_plateau(i,y)) points += 3; else{ if(est_bord_plateau(i,y)) points += 2; else points ++; } i++; } } } }
Le plateau est juste une matrice[8][8]
x & y sont les coordonnées en paramètre, là où on placera le pion pour capturer les autres (Une fonction coupvalide vérifiera que cet emplacement est possible)
couleur est égal à NOIR ou BLANC qui sont juste des int (0 et 1) tout comme VIDE (qui doit être 2).
La fonction renvoie le nombre de points issus du plateau après la capture (C'est pour que l'IA choisisse la bonne option).
Comme dit précédemment, cette fonction a quelques soucis, je pense que la manière de capturer n'est pas optimale mais j'avoue ne pas trop savoir comment faire.
Egalement si quelqu'un peut m'expliquer pourquoi je ne peux pas remplacer les "if est coinplateau ..." par une fonction dans laquelle il y a ces tests (Qui me permet de rendre le code de capture un peu moins chargé).
Merci de votre aide et bonne journée !
Partager