Commit f63e7648 authored by TRAN Alain's avatar TRAN Alain

Upload New File

parent 813d3fc1
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package tictactoecodingame;
import static java.lang.Math.max;
import static java.lang.Math.min;
import java.util.ArrayList;
/**
*
* @author Alain
*/
public class AlgoRechercheMinMax extends AlgoRecherche {
String[][] grille = {{"","",""},{"","",""},{"","",""}};
double[] scores = {1,-1,0};
@Override
public Coup meilleurCoup(Plateau _plateau, Joueur _joueur, boolean ponder){
double inf = Double.POSITIVE_INFINITY;
double bestScore = -1 * inf;
CoupTicTacToe meilleur_coup = null ;
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur);
for (int i = 0; i < coups.size(); i++){
_plateau.joueCoup(coups.get(i));
double score = minimax(_plateau,_joueur,0,false);
Coup coup_provisoire = coups.get(i);
_plateau.annuleDernierCoup();
if (score > bestScore){
bestScore = score;
meilleur_coup = (CoupTicTacToe)coup_provisoire;
}
}
return meilleur_coup;
// changer le tour du joueur ?
}
public double minimax(Plateau _plateau,Joueur _joueur,int profondeur,boolean isMaximizing){
if (_plateau.partieTerminee()){
if(_plateau.partieGagnee()){
Joueur gagnant = _plateau.vainqueur(); //Il faudrait connaitre le vainqueur
int resultat = gagnant.getIdJoueur();
return scores[resultat];
}
else{
return 0;
}
}
if (isMaximizing) {
double inf = Double.POSITIVE_INFINITY;
double bestScore = -1 * inf;
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur);
for (int i = 0; i < 3; i++){
_plateau.joueCoup(coups.get(i));
double score = minimax(_plateau,_joueur,profondeur + 1,false);
_plateau.annuleDernierCoup();
bestScore = max(score,bestScore);
}
return bestScore;
}
else {
double inf = Double.POSITIVE_INFINITY;
double bestScore = inf;
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur);
for (int i = 0; i < coups.size(); i++){
_plateau.joueCoup(coups.get(i));
double score = minimax(_plateau,_joueur,profondeur + 1,true);
_plateau.annuleDernierCoup();
bestScore = min(score,bestScore);
}
return 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