Commit 38cb9e19 authored by TRAN Alain's avatar TRAN Alain

Replace AlgoRechercheMinMax.java

parent f63e7648
...@@ -15,6 +15,11 @@ import java.util.ArrayList; ...@@ -15,6 +15,11 @@ import java.util.ArrayList;
*/ */
public class AlgoRechercheMinMax extends AlgoRecherche { public class AlgoRechercheMinMax extends AlgoRecherche {
Joueur humain;
public AlgoRechercheMinMax(Joueur _joueur){
humain = _joueur;
}
String[][] grille = {{"","",""},{"","",""},{"","",""}}; String[][] grille = {{"","",""},{"","",""},{"","",""}};
double[] scores = {1,-1,0}; double[] scores = {1,-1,0};
...@@ -27,7 +32,7 @@ public class AlgoRechercheMinMax extends AlgoRecherche { ...@@ -27,7 +32,7 @@ public class AlgoRechercheMinMax extends AlgoRecherche {
for (int i = 0; i < coups.size(); i++){ for (int i = 0; i < coups.size(); i++){
_plateau.joueCoup(coups.get(i)); _plateau.joueCoup(coups.get(i));
double score = minimax(_plateau,_joueur,0,false); double score = minimax(_plateau,humain,0,false); //False car l'ordi a déjà placé son premier coup
Coup coup_provisoire = coups.get(i); Coup coup_provisoire = coups.get(i);
_plateau.annuleDernierCoup(); _plateau.annuleDernierCoup();
if (score > bestScore){ if (score > bestScore){
...@@ -36,39 +41,39 @@ public class AlgoRechercheMinMax extends AlgoRecherche { ...@@ -36,39 +41,39 @@ public class AlgoRechercheMinMax extends AlgoRecherche {
} }
} }
return meilleur_coup; return meilleur_coup;
// changer le tour du joueur ? // changer le tour du joueur
} }
public double minimax(Plateau _plateau,Joueur _joueur,int profondeur,boolean isMaximizing){ public double minimax(Plateau _plateau,Joueur _joueur,int profondeur,boolean isMaximizing){
if (_plateau.partieTerminee()){ if (_plateau.partieTerminee()){
if(_plateau.partieGagnee()){ if(_plateau.partieNulle()){
return 0;
}
else{
Joueur gagnant = _plateau.vainqueur(); //Il faudrait connaitre le vainqueur Joueur gagnant = _plateau.vainqueur(); //Il faudrait connaitre le vainqueur
int resultat = gagnant.getIdJoueur(); int resultat = gagnant.getIdJoueur();
return scores[resultat]; return scores[resultat];
} }
else{
return 0;
}
} }
if (isMaximizing) { if (isMaximizing) { //ordi qui joue
double inf = Double.POSITIVE_INFINITY; double inf = Double.POSITIVE_INFINITY;
double bestScore = -1 * inf; double bestScore = -1 * inf;
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur); ArrayList<Coup> coups = _plateau.getListeCoups(_joueur);
for (int i = 0; i < 3; i++){ for (int i = 0; i < coups.size(); i++){
_plateau.joueCoup(coups.get(i)); _plateau.joueCoup(coups.get(i));
double score = minimax(_plateau,_joueur,profondeur + 1,false); double score = minimax(_plateau,humain,profondeur + 1,false);
_plateau.annuleDernierCoup(); _plateau.annuleDernierCoup();
bestScore = max(score,bestScore); bestScore = max(score,bestScore);
} }
return bestScore; return bestScore;
} }
else { else { // Humain ou autre ordi qui joue
double inf = Double.POSITIVE_INFINITY; double inf = Double.POSITIVE_INFINITY;
double bestScore = inf; double bestScore = inf;
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur); ArrayList<Coup> coups = _plateau.getListeCoups(humain);
for (int i = 0; i < coups.size(); i++){ for (int i = 0; i < coups.size(); i++){
_plateau.joueCoup(coups.get(i)); _plateau.joueCoup(coups.get(i)); // problème : Il faut que ce soit l'autre joueur qui joue ici
double score = minimax(_plateau,_joueur,profondeur + 1,true); double score = minimax(_plateau,_joueur,profondeur + 1,true);
_plateau.annuleDernierCoup(); _plateau.annuleDernierCoup();
bestScore = min(score,bestScore); bestScore = min(score,bestScore);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment