package games.nim; import java.util.ArrayList; import iialib.games.algs.AIPlayer; import iialib.games.algs.AbstractGame; import iialib.games.algs.GameAlgorithm; import iialib.games.algs.algorithms.AlphaBeta; import iialib.games.algs.algorithms.MiniMax; public class NimGame extends AbstractGame { NimGame(ArrayList> players, NimBoard board) { super(players, board); } public static void main(String[] args) { // N=10 : AMI voit à 2 demi-coups, ENNEMI voit à 4 demi-coups (TD1 Ex1 Q3) int N = 10; GameAlgorithm algAmi = new MiniMax<>(NimRole.AMI, NimRole.ENNEMI, NimHeuristics.hAmi, 2); GameAlgorithm algEnnemi = new MiniMax<>(NimRole.ENNEMI, NimRole.AMI, NimHeuristics.hEnnemi, 4); AIPlayer playerAmi = new AIPlayer<>(NimRole.AMI, algAmi); AIPlayer playerEnnemi = new AIPlayer<>(NimRole.ENNEMI, algEnnemi); ArrayList> players = new ArrayList<>(); players.add(playerAmi); players.add(playerEnnemi); NimBoard initialBoard = new NimBoard(N); NimGame game = new NimGame(players, initialBoard); game.runGame(); // --- Variante : AlphaBeta vs MiniMax --- System.out.println("\n=== AlphaBeta (AMI, depth 4) vs MiniMax (ENNEMI, depth 2) ==="); GameAlgorithm algAbAmi = new AlphaBeta<>(NimRole.AMI, NimRole.ENNEMI, NimHeuristics.hAmi, 4); GameAlgorithm algMmEnnemi = new MiniMax<>(NimRole.ENNEMI, NimRole.AMI, NimHeuristics.hEnnemi, 2); AIPlayer playerAbAmi = new AIPlayer<>(NimRole.AMI, algAbAmi); AIPlayer playerMmEnnemi = new AIPlayer<>(NimRole.ENNEMI, algMmEnnemi); ArrayList> players2 = new ArrayList<>(); players2.add(playerAbAmi); players2.add(playerMmEnnemi); NimBoard initialBoard2 = new NimBoard(N); NimGame game2 = new NimGame(players2, initialBoard2); game2.runGame(); } }