80 lines
2.8 KiB
Java
80 lines
2.8 KiB
Java
package fr.iut_fbleau.Nim;
|
|
|
|
import fr.iut_fbleau.GameAPI.Player;
|
|
import fr.iut_fbleau.GameAPI.AbstractPly;
|
|
import java.util.Scanner;
|
|
|
|
/**
|
|
* Classe principale pour jouer au jeu de Nim.
|
|
* Cette classe permet de lancer une partie entre deux joueurs.
|
|
*/
|
|
public class NimGame {
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println("=== Jeu de Nim ===\n");
|
|
|
|
Scanner scanner = new Scanner(System.in);
|
|
|
|
// Demander le nombre d'allumettes
|
|
int allumettesInitiales = 0;
|
|
while (allumettesInitiales <= 0) {
|
|
System.out.print("Avec combien d'allumettes voulez-vous commencer ? (minimum 1) : ");
|
|
try {
|
|
allumettesInitiales = scanner.nextInt();
|
|
if (allumettesInitiales <= 0) {
|
|
System.out.println("Le nombre doit être positif !");
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.println("Entrée invalide. Veuillez entrer un nombre.");
|
|
scanner.nextLine(); // vider le buffer
|
|
}
|
|
}
|
|
|
|
// Maximum par coup fixé à 3
|
|
int maxParCoup = 3;
|
|
|
|
NimBoard plateau = new NimBoard(allumettesInitiales, maxParCoup);
|
|
|
|
// Créer les joueurs
|
|
NimPlayer joueur1 = new NimPlayer(Player.PLAYER1);
|
|
NimBotPlayer joueur2 = new NimBotPlayer(Player.PLAYER2);
|
|
|
|
System.out.println("\nConfiguration du jeu :");
|
|
System.out.println("- Nombre d'allumettes : " + allumettesInitiales);
|
|
System.out.println("- Maximum par coup : " + maxParCoup);
|
|
System.out.println("- Règle : Le joueur qui prend la dernière allumette PERD");
|
|
System.out.println("- PLAYER1 : Humain");
|
|
System.out.println("- PLAYER2 : Bot (MiniMax avec Alpha-Beta)\n");
|
|
|
|
// Boucle de jeu
|
|
while (!plateau.isGameOver()) {
|
|
// Obtenir le coup du joueur actif
|
|
AbstractPly coup;
|
|
if (plateau.getcurrentPlayer() == Player.PLAYER1) {
|
|
coup = joueur1.giveYourMove(plateau);
|
|
} else {
|
|
coup = joueur2.giveYourMove(plateau);
|
|
}
|
|
|
|
// Jouer le coup
|
|
plateau.doPly(coup);
|
|
|
|
System.out.println("\n>>> " + coup);
|
|
}
|
|
|
|
// Afficher le résultat
|
|
System.out.println("\n=== Fin de la partie ===");
|
|
System.out.println(plateau);
|
|
|
|
// Déterminer le gagnant en utilisant l'enum Result
|
|
if (plateau.getResult() == fr.iut_fbleau.GameAPI.Result.WIN) {
|
|
System.out.println("Le PLAYER1 a gagné !");
|
|
} else if (plateau.getResult() == fr.iut_fbleau.GameAPI.Result.LOSS) {
|
|
System.out.println("Le PLAYER2 (Bot) a gagné !");
|
|
} else {
|
|
System.out.println("Match nul !");
|
|
}
|
|
}
|
|
}
|
|
|