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 !"); } } }