bonjour,
j'aimerais bien qu'on m'aide a trouver le probleme car je n'arrive pas depuis 2 jours...
je m'explique: je doit ecrire un algo (minmax) pour calculer le meilleur coup possible a jouer (morpion, version facile 3x3) en java, langage que je connais presque pas
il n'est pas important de faire un joli interface, version jouable pour deux sans bugs etc etc, mais j'ai ajoute version basique d'affichage seulement pour tester si l'algo calcule comme il faut
et justement, quelquechose marche pas, mais j'ai revise mon code, change plusieurs fois certains morceaux etc mais je vois pas....
je serait reconnaissant pour toute aide

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
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 
import java.io.*; 
//program version simpliste sans traitement d'exception etc ecrit pour verifier comment marche algorithme minimax
//mais marche pas :(
class morpion_v {
 
	static char[][] planche= {{'.', '.', '.'},{'.', '.', '.'},{'.', '.', '.'}}; //'.' est une case inocupee
 
	final static char croix= 'x';
	final static char rond= 'o';
	static char je_joue=rond; //ordi
	static char autre_joue=croix;
 
	static int pions_deja_joue=0;
 
	/*fonction qui verifie si jeu est fini*/
	static char jeu_termine(char[][] planche){
		if ((planche[0][0] == 'o' && planche[0][1] == 'o' && planche[0][2] == 'o')
		     || (planche[1][0] == 'o' && planche[1][1] == 'o' && planche[1][2] == 'o')
		     || (planche[2][0] == 'o' && planche[2][1] == 'o' && planche[2][2] == 'o')
		     || (planche[0][0] == 'o' && planche[1][0] == 'o' && planche[2][0] == 'o')
		     || (planche[0][1] == 'o' && planche[1][1] == 'o' && planche[2][1] == 'o')
		     || (planche[0][2] == 'o' && planche[1][2] == 'o' && planche[2][2] == 'o')
		     || (planche[0][0] == 'o' && planche[1][1] == 'o' && planche[2][2] == 'o')
		     || (planche[0][2] == 'o' && planche[1][1] == 'o' && planche[2][0] == 'o')) { 
				return 'r'; 
		} else if ((planche[0][0] == 'x' && planche[0][1] == 'x' && planche[0][2] == 'x')
    			 || (planche[1][0] == 'x' && planche[1][1] == 'x' && planche[1][2] == 'x')
    			 || (planche[2][0] == 'x' && planche[2][1] == 'x' && planche[2][2] == 'x')
    			 || (planche[0][0] == 'x' && planche[1][0] == 'x' && planche[2][0] == 'x')
    			 || (planche[0][1] == 'x' && planche[1][1] == 'x' && planche[2][1] == 'x')
    			 || (planche[0][2] == 'x' && planche[1][2] == 'x' && planche[2][2] == 'x')
    			 || (planche[0][0] == 'x' && planche[1][1] == 'x' && planche[2][2] == 'x')
    			 || (planche[0][2] == 'x' && planche[1][1] == 'x' && planche[2][0] == 'x')) { 
				return 'c'; 
		} else { 
			if (pions_deja_joue==9) return 'e'; //jeu fini, personne a gagne - egalite
    			   else return 'n'; //no, le jeu n'est pas fini!
		}
	}
	/*fin fonct qui verifie si jeu est fini*/
 
 
	/*fonction d'evaluation de gain*/
	static int gain(char[][] planche) {
		//si jeu est termine
		if (jeu_termine(planche)=='c') {
			if (je_joue==croix) return 1000-pions_deja_joue;
			else return -1000+pions_deja_joue;
		} else if (jeu_termine(planche)=='r'){
			if (je_joue==croix) return -1000+pions_deja_joue;
			else return (1000-pions_deja_joue);
		} else { 
			if (jeu_termine(planche)=='e') return 0;
			else return 5; //pas besoin mais ajoute car sinon compilo rale
		}
	}
	/*fin de fonction d'evaluation de gain*/
 
 
	static void afficher(char[][] t) { //affiche planche
		for (int k=0; k<3; k++) {
			for (int l=0; l<3; l++) {
				System.out.print(t[k][l]+ " ");
			}
			System.out.println();
		}
		System.out.println();
	}
 
 
	static void jouer_coup(int x, int y, char quoi){
		pions_deja_joue++;
		planche[x][y]=quoi;
	}
 
	static void dejouer_coup(int x, int y){
		pions_deja_joue--;
		planche[x][y]='.';
	}
 
	static int compteur=0;
 
	static int quoi_jouer_x=0, quoi_jouer_y=0, x=0, y=0;
 
 
	static void minimax(char[][] planche) {
		compteur++;
		int max_val=-1000;
		int val_temp=0;
		for (int k=0; k<3; k++){
			for (int l=0; l<3; l++) {
				if (planche[k][l]=='.') {	//pour chaque case non occupe		
					jouer_coup(k, l, je_joue);
	     				val_temp=max(planche);
			System.out.println("x, y?: "+k+" "+l+" gain: "+val_temp);
			//System.out.println("jeu termine?: "+jeu_termine(planche));
			//System.out.println("pions?: "+pions_deja_joue);
			//System.out.println("Gain actuel: "+val_temp);
					if (val_temp>max_val) {
						max_val=val_temp;
						quoi_jouer_x=k;
						quoi_jouer_y=l;
 
					}
					dejouer_coup(k,l);
				}
			}
		}
	jouer_coup(quoi_jouer_x, quoi_jouer_y, je_joue);	
				afficher(planche);
				System.out.println("pions?: "+pions_deja_joue);
				System.out.println(" ");
	}
 
 
	static int max(char[][] planche) {
		compteur++;
		if (jeu_termine(planche)!='n') {
			return gain(planche);
		}
		int max_val=-1000, gain_temp;
		for (int i=0; i<3; i++){
			for (int j=0; j<3; j++) {
				if (planche[i][j]=='.') {	//pour chaque case non occupe
					jouer_coup(i, j, autre_joue);
					gain_temp=min(planche);
					if ((gain_temp>max_val)) { 
						max_val=gain_temp;
					}
					dejouer_coup(i, j);
				}
			}
		}
		return max_val;
	}
 
	static int min(char[][] planche) {
		compteur++;
		if (jeu_termine(planche)!='n') {
			return gain(planche);
		}
		int mon_gain=1000, gain_temp=0;
		for (int i=0; i<3; i++){
			for (int j=0; j<3; j++) {
				if (planche[i][j]=='.') {	//pour chaque case non occupe
					jouer_coup(i, j, je_joue);
					gain_temp=max(planche);
					if ((gain_temp<mon_gain)) { 
						mon_gain=gain_temp;
					}
					dejouer_coup(i, j);
				}
			}
		}
	return mon_gain;
	}
	/*fin intel artif minimax*/
 
 
	public static void main(String[] arg) { //boucle principale
 
		afficher(planche);
		char joue=croix;
		while (jeu_termine(planche)=='n'){
			compteur=0;
			int ligne=0,colone=0;
			if (joue==autre_joue) {
				try{ 
					BufferedReader clavier=new BufferedReader(new InputStreamReader(System.in));
					System.out.println("veuillez entrer numero de ligne:");
					ligne=Integer.parseInt(clavier.readLine()); // lecture des entier
					System.out.println("veuillez entrer numero de colone:");
					colone=Integer.parseInt(clavier.readLine()); // lecture des entier 
				}catch (Exception e) {}
				jouer_coup(ligne,colone,autre_joue);
				afficher(planche);
				System.out.println("pions?: "+pions_deja_joue);
				System.out.println(" ");
				joue=je_joue;
			 }else{
				minimax(planche);
				System.out.println("compteur "+compteur);
				joue=autre_joue;
			}
		}
	}
}
ps1. rigolez pas trop, je debute vraiement
ps2. desolee pour les fautes - je suis pas francaise