Commit b0ff1a2b authored by Theo Delbecq's avatar Theo Delbecq

Tentative de merge

parents ad4f6344 b599e998
......@@ -6,6 +6,7 @@
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/Coup.java</file>
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/CoupTicTacToe.java</file>
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/Player.java</file>
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/AlgoRecherMinMax1.java</file>
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/Joueur.java</file>
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/JoueurOrdi.java</file>
<file>file:/C:/Users/theo/Documents/Ecole/IMT%20Lille%20Douai/L3/Projet%20Info/groupe3-tictactoe/src/tictactoecodingame/AlgoRecherche.java</file>
......
/*
* 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 java.util.ArrayList;
/**
*
* @author senda
*/
public class AlgoRecherMinMax1 extends AlgoRecherche {
ArrayList ListCoup;
public AlgoRecherMinMax1() {
}
@Override
public Coup meilleurCoup(Plateau _plateau, Joueur _joueur, boolean _ponder) {
ListCoup = _plateau.getListeCoups(_joueur);
return ;
}
}
/*
* 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 java.util.ArrayList;
/**
*
* @author senda
*/
public class Arbre {
private Fraction value;
private ArrayList<Coup> coups;
private ArrayList<Arbre> fils;
// Les constructeurs :
public Arbre (Fraction value, ArrayList coups, ArrayList fils){
this.value = value;
this.fils = fils;
this.coups = coups;
}
public Arbre (int den, int num, ArrayList coups, ArrayList fils){
this.value.den = den;
this.value.num = num;
this.fils = fils;
this.coups = coups;
}
public Arbre (Fraction value, Plateau _plateau, Joueur _joueur){
this.value = value;
this.coups = _plateau.getListeCoups(_joueur) ;
int a = coups.size();
fils = new ArrayList();
for(int i = 0; i < a ; i++){
Arbre Arbre_i = new Arbre(new Fraction()); // Attention ! Ce constructeur initialise donc avec des valeurs nulles en racine !
fils.add(Arbre_i);
}
}
public Arbre (Fraction value){
this.value = value;
}
public Arbre (int den, int num){
this.value.den = den;
this.value.num = num;
}
// Les accesseurs :
public double getvalue(){
return(value.getNote());
}
public ArrayList getfils(){
return(fils);
}
public ArrayList getcoups(){
return(coups);
}
//Des choses sans nom :
public void setvalue(Fraction value){
this.value = value;
}
public void setfils(ArrayList fils){
this.fils = fils;
}
public void setcoups(ArrayList coups){
this.coups = coups;
}
//Fonctions auxiliaires :
public boolean estFeuille(){
return(fils == null);
}
public boolean estNoeud(){
return(fils != null);
}
public int hauteur(){
if(this.estFeuille()){
return 1;
}
else{
int a = this.fils.size();
Arbre fils0 = this.fils.get(0);
int maxfils = fils0.hauteur();
for (int i = 1; i < a; i++){
Arbre next = this.fils.get(i);
maxfils = Math.max(next.hauteur(),maxfils);
}
return(1 + maxfils);
}
}
}
/*
* 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 java.util.ArrayList;
/**
*
* @author senda
*/
public class ArbreMinMax {
public static int N = 5;
protected int value;
protected ArrayList<Coup> coups;
protected ArrayList<ArbreMinMax> fils;
// Les constructeurs :
public ArbreMinMax(){
}
public ArbreMinMax(int value, ArrayList coups, ArrayList fils){
this.value = value;
this.fils = fils;
this.coups = coups;
}
public ArbreMinMax(int value, Plateau _plateau, Joueur _joueur){
this.value = value;
this.coups = _plateau.getListeCoups(_joueur) ;
int a = coups.size();
fils = new ArrayList();
for(int i = 0; i < a ; i++){
ArbreMinMax Arbre_i = new ArbreMinMax(0); // Attention ! Ce constructeur initialise donc avec des valeurs nulles en racine !
fils.add(Arbre_i);
}
}
public ArbreMinMax(int value){
this.value = value;
}
// Les accesseurs :
public int getvalue(){
return(value);
}
public ArrayList<ArbreMinMax> getfils(){
return(fils);
}
public ArrayList getcoups(){
return(coups);
}
//Des choses sans nom :
public void setvalue(int value){
this.value = value;
}
public void setfils(ArrayList fils){
this.fils = fils;
}
public void setcoups(ArrayList coups){
this.coups = coups;
}
//Fonctions auxiliaires :
public boolean estFeuille(){
return(fils == null);
}
public boolean estNoeud(){
return(fils != null);
}
public int hauteur(){
if(this.estFeuille()){
return 1;
}
else{
int a = this.fils.size();
ArbreMinMax fils0 = this.fils.get(0);
int maxfils = fils0.hauteur();
for (int i = 1; i < a; i++){
ArbreMinMax next = this.fils.get(i);
maxfils = Math.max(next.hauteur(),maxfils);
}
return(1 + maxfils);
}
}
public int Min(){
int m = 2147483640;
int a = this.getfils().size();
for(int i = 0; i < a ; i++){
int n = this.getfils().get(i).getvalue();
if(n < m){
m = n;
}
}
return m;
}
public int Max(){
int m = 0;
int a = this.getfils().size();
for(int i = 0; i < a ; i++){
int n = this.getfils().get(i).getvalue();
if(n > m){
m = n;
}
}
return m;
}
public void MinMax(int h){
// h = hauteur, on l'incrémente comme un compteur
// N est la profondeur à explorer en MinMax, toutes les feuilles en N+1 sont évaluées
// La racine est un Max, donc impair -> Max, pair -> Min
if(N >= h){ // On doit chosir entre min et max
if(h%2 == 0){
//On attribue le Min
int m = this.Min();
this.setvalue(m);
}
else{
//On attribue le max
int m = this.Max();
this.setvalue(m);
}
int a = this.getfils().size();
for(int i = 0; i < a ; i++){
this.getfils().get(i).MinMax(h + 1);
}
}
else{//On a h > N, on utilise la fonction d'évaluation
}
}
}
/*
* 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;
/**
*
* @author senda
*/
public class Fraction {
int num;
int den;
public Fraction(int n, int d){
num=n;
den=d;
}
public Fraction(){
num=0;
den=0;
}
public Fraction(int n){
num=n;
den=1;
}
public int getScore(){
return num;
}
public double getNote(){
try{
return num/den;
}
catch(ArithmeticException e){return 1.;}
}
public int getNumerateur(){
return num;
}
public int getDenominateur(){return den;}
public void setDenominateur(int d){den=d;}
public void setNumerateur(int n){
num=n;
}
public void incrementeNumerateur(){num+=1;}
public void incrementeDenominateur(){den+=1;}
}
/*
* 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;
/**
*
* @author Théo
*/
public class Generator {
public static int random_tests(Plateau plateau, int nb_tests) {
int c = 0;
JoueurOrdi player = new JoueurOrdi("player");
JoueurOrdi opponent = new JoueurOrdi("oppo");
AlgoRechercheAleatoire alea = new AlgoRechercheAleatoire( );
player.setAlgoRecherche(alea);
opponent.setAlgoRecherche(alea);
Joueur currentPlayer = player;
int i=((CoupTicTacToe)plateau.getDernierCoup()).getJeton().getJoueur().getIdJoueur();
player.forceId(1-i);
opponent.forceId(i);
Coup coup;
plateau.sauvegardePosition(0);
for(i=0; i<nb_tests;i++){
while (!plateau.partieTerminee()) {
coup = currentPlayer.joue(plateau);
plateau.joueCoup(coup);
if (currentPlayer == player) {
currentPlayer = opponent;
} else {
currentPlayer = player;
}
}
Joueur vainqueur = plateau.vainqueur();
if ( vainqueur == player )
c++;
else if ( vainqueur == player )
c--;
plateau.restaurePosition(0);
}
return c;
}
}
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