67 lines
2.1 KiB
Java
67 lines
2.1 KiB
Java
![]() |
package fr.iut_fbleau.Nim;
|
||
|
|
||
|
import fr.iut_fbleau.GameAPI.AbstractGamePlayer;
|
||
|
import fr.iut_fbleau.GameAPI.AbstractPly;
|
||
|
import fr.iut_fbleau.GameAPI.IBoard;
|
||
|
import fr.iut_fbleau.GameAPI.Player;
|
||
|
|
||
|
import java.util.Scanner;
|
||
|
import java.util.Iterator;
|
||
|
|
||
|
/**
|
||
|
* Représente un joueur humain pour le jeu de Nim.
|
||
|
*/
|
||
|
public class NimPlayer extends AbstractGamePlayer {
|
||
|
|
||
|
private Player joueur;
|
||
|
private Scanner scanner;
|
||
|
|
||
|
public NimPlayer(Player joueur) {
|
||
|
this.joueur = joueur;
|
||
|
this.scanner = new Scanner(System.in);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public AbstractPly giveYourMove(IBoard p) {
|
||
|
if (!(p instanceof NimBoard)) {
|
||
|
throw new IllegalArgumentException("Le plateau doit être un NimBoard");
|
||
|
}
|
||
|
|
||
|
NimBoard plateau = (NimBoard) p;
|
||
|
|
||
|
System.out.println("\n" + plateau);
|
||
|
System.out.println("C'est ton tour joueur : " + this.joueur);
|
||
|
|
||
|
// Afficher les coups possibles
|
||
|
System.out.println("Coups possibles :");
|
||
|
Iterator<AbstractPly> coups = plateau.iterator();
|
||
|
int compteur = 1;
|
||
|
while (coups.hasNext()) {
|
||
|
NimPly coup = (NimPly) coups.next();
|
||
|
System.out.println(" " + compteur + ". Retirer " + coup.getNombreAllumettesPrises() + " allumette(s)");
|
||
|
compteur++;
|
||
|
}
|
||
|
|
||
|
// Demander au joueur de choisir
|
||
|
int maxAllumettes = Math.min(plateau.getMaxParCoup(), plateau.getAllumettesRestantes());
|
||
|
int choix = -1;
|
||
|
|
||
|
while (choix < 1 || choix > maxAllumettes) {
|
||
|
System.out.print("Combien d'allumettes voulez-vous retirer ? (1-" + maxAllumettes + ") : ");
|
||
|
try {
|
||
|
choix = scanner.nextInt();
|
||
|
if (choix < 1 || choix > maxAllumettes) {
|
||
|
System.out.println("Choix invalide. Veuillez choisir entre 1 et " + maxAllumettes);
|
||
|
}
|
||
|
} catch (Exception e) {
|
||
|
System.out.println("Entrée invalide. Veuillez entrer un nombre.");
|
||
|
scanner.nextLine(); // vider le buffer
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return new NimPly(this.joueur, choix);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|