2024-10-09 11:47:39 +02:00
|
|
|
package Nim;
|
|
|
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import fr.iut_fbleau.raw_api_body.entity.*;
|
|
|
|
|
|
|
|
public class PlateauNim implements Plateau {
|
|
|
|
|
|
|
|
int allumette;
|
|
|
|
Player currrentPlayer;
|
|
|
|
Result resultat;
|
2024-10-09 14:03:53 +02:00
|
|
|
PlyNim j1_1 = new PlyNim(1,Player.JOUEUR1);
|
|
|
|
PlyNim j1_2 = new PlyNim(2,Player.JOUEUR1);
|
|
|
|
PlyNim j1_3 = new PlyNim(3,Player.JOUEUR1);
|
|
|
|
|
|
|
|
PlyNim j2_1 = new PlyNim(1,Player.JOUEUR2);
|
|
|
|
PlyNim j2_2 = new PlyNim(2,Player.JOUEUR2);
|
|
|
|
PlyNim j2_3 = new PlyNim(3,Player.JOUEUR2);
|
2024-10-09 11:47:39 +02:00
|
|
|
|
|
|
|
public PlateauNim(int allumette) {
|
|
|
|
this.allumette = allumette;
|
2024-10-09 12:32:16 +02:00
|
|
|
this.currrentPlayer = Player.JOUEUR1;
|
2024-10-09 11:47:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Player getPlayer() {
|
|
|
|
return currrentPlayer;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-10-09 12:32:16 +02:00
|
|
|
public int getResult() {
|
2024-10-09 11:47:39 +02:00
|
|
|
if (isFinished()) {
|
2024-10-09 12:32:16 +02:00
|
|
|
if (currrentPlayer == Player.JOUEUR1) {
|
2024-10-09 11:47:39 +02:00
|
|
|
return Result.GAGNE;
|
|
|
|
} else {
|
|
|
|
return Result.PERDU;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
throw new NullPointerException("La partie n'est pas terminée");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Iterator<Ply> givePlies() {
|
|
|
|
ArrayList<Ply> plies = new ArrayList<Ply>();
|
|
|
|
|
2024-10-09 14:03:53 +02:00
|
|
|
if (currrentPlayer == Player.JOUEUR1){
|
|
|
|
if (allumette == 1) {
|
|
|
|
plies.add(j1_1);
|
|
|
|
} else if (allumette == 2) {
|
|
|
|
plies.add(j1_1);
|
|
|
|
plies.add(j1_2);
|
|
|
|
} else {
|
|
|
|
plies.add(j1_1);
|
|
|
|
plies.add(j1_2);
|
|
|
|
plies.add(j1_3);
|
|
|
|
}
|
2024-10-09 11:47:39 +02:00
|
|
|
} else {
|
2024-10-09 14:03:53 +02:00
|
|
|
if (allumette == 1) {
|
|
|
|
plies.add(j2_1);
|
|
|
|
} else if (allumette == 2) {
|
|
|
|
plies.add(j2_1);
|
|
|
|
plies.add(j2_2);
|
|
|
|
} else {
|
|
|
|
plies.add(j2_1);
|
|
|
|
plies.add(j2_2);
|
|
|
|
plies.add(j2_3);
|
|
|
|
}
|
2024-10-09 11:47:39 +02:00
|
|
|
}
|
|
|
|
|
2024-10-09 14:03:53 +02:00
|
|
|
|
2024-10-09 11:47:39 +02:00
|
|
|
return plies.iterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-10-09 12:32:16 +02:00
|
|
|
public void doPly(Ply ply) {
|
|
|
|
PlyNim plynim = (PlyNim) ply;
|
|
|
|
allumette -= plynim.coup;
|
|
|
|
if (currrentPlayer == Player.JOUEUR1){
|
|
|
|
currrentPlayer = Player.JOUEUR2;
|
2024-10-09 11:47:39 +02:00
|
|
|
} else {
|
2024-10-09 12:32:16 +02:00
|
|
|
currrentPlayer = Player.JOUEUR1;
|
2024-10-09 11:47:39 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-10-09 12:32:16 +02:00
|
|
|
public void undoPly(Ply ply) {
|
|
|
|
PlyNim plynim = (PlyNim) ply;
|
|
|
|
allumette += plynim.coup;
|
|
|
|
if (currrentPlayer == Player.JOUEUR1){
|
|
|
|
currrentPlayer = Player.JOUEUR2;
|
|
|
|
} else {
|
|
|
|
currrentPlayer = Player.JOUEUR1;
|
|
|
|
}
|
2024-10-09 11:47:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-10-09 12:32:16 +02:00
|
|
|
public boolean isFinished() {
|
|
|
|
if (allumette == 0) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
2024-10-09 11:47:39 +02:00
|
|
|
}
|
|
|
|
|
2024-10-09 12:32:16 +02:00
|
|
|
|
2024-10-09 11:47:39 +02:00
|
|
|
}
|