82 lines
2.1 KiB
Java
82 lines
2.1 KiB
Java
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import AbreNim;
|
|
import Noeud;
|
|
|
|
public class nim {
|
|
|
|
|
|
public static void main(String[] args) {
|
|
AbreNim AN = AbreNim(5);
|
|
System.out.println(exploreMax(AN.getRoot()));
|
|
}
|
|
|
|
/**
|
|
* Determine si le joueur gagne ou perd grace a exploreMin.
|
|
* @param allumette le nombre d'allumette au tour du joueur
|
|
* @return -1 si perdant ou 1 si gagnant
|
|
*/
|
|
public static boolean exploreMax(Noeud root) {
|
|
allumette = root.getValeur();
|
|
allumette -= 3;
|
|
for(int i=0;allumette>1&&i<3;i++) {
|
|
root.child[i] = new Noeud(allumette);
|
|
if (checkEtat(root.child[i])==1) {
|
|
return true;
|
|
}
|
|
allumette++;
|
|
}
|
|
boolean childtest;
|
|
for (int i = 2; i >=0; i--) {
|
|
if (root.child[i].getEtat()==0) {
|
|
childtest = exploreMin(root.child[i]);
|
|
if (childtest) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Determine si le joueur gagne ou perd grace a exploreMax.
|
|
* @param allumette le nombre d'allumette au tour du joueur
|
|
* @return -1 si gagnant ou 1 si perdant
|
|
*/
|
|
public static boolean exploreMin(Noeud root){
|
|
allumette = root.getValeur();
|
|
allumette -= 3;
|
|
for(int i=0;allumette>1&&i<3;i++) {
|
|
root.child[i] = new Noeud(allumette);
|
|
if (checkEtat(root.child[i])==-1) {
|
|
return true;
|
|
}
|
|
allumette++;
|
|
}
|
|
boolean childtest = false;
|
|
for (int i = 2; i >=0; i--) {
|
|
if (root.child[i].getEtat()==0) {
|
|
childtest = exploreMax(root.child[i]);
|
|
if (childtest) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int checkEtat(Noeud node){
|
|
if(node.getValeur()<1){
|
|
node.setEtat(-1);
|
|
return -1;
|
|
}
|
|
else if (node.getValeur()==1) {
|
|
node.setEtat(1);
|
|
return 1;
|
|
}
|
|
node.setEtat(0);
|
|
return 0;
|
|
}
|
|
|
|
|
|
} |