Implement Nim game logic and heuristics, including board, moves, roles, and AI algorithms
This commit is contained in:
65
src/main/java/games/nim/NimGame.java
Normal file
65
src/main/java/games/nim/NimGame.java
Normal file
@@ -0,0 +1,65 @@
|
||||
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<NimMove, NimRole, NimBoard> {
|
||||
|
||||
NimGame(ArrayList<AIPlayer<NimMove, NimRole, NimBoard>> 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<NimMove, NimRole, NimBoard> algAmi =
|
||||
new MiniMax<>(NimRole.AMI, NimRole.ENNEMI, NimHeuristics.hAmi, 2);
|
||||
|
||||
GameAlgorithm<NimMove, NimRole, NimBoard> algEnnemi =
|
||||
new MiniMax<>(NimRole.ENNEMI, NimRole.AMI, NimHeuristics.hEnnemi, 4);
|
||||
|
||||
AIPlayer<NimMove, NimRole, NimBoard> playerAmi =
|
||||
new AIPlayer<>(NimRole.AMI, algAmi);
|
||||
|
||||
AIPlayer<NimMove, NimRole, NimBoard> playerEnnemi =
|
||||
new AIPlayer<>(NimRole.ENNEMI, algEnnemi);
|
||||
|
||||
ArrayList<AIPlayer<NimMove, NimRole, NimBoard>> 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<NimMove, NimRole, NimBoard> algAbAmi =
|
||||
new AlphaBeta<>(NimRole.AMI, NimRole.ENNEMI, NimHeuristics.hAmi, 4);
|
||||
|
||||
GameAlgorithm<NimMove, NimRole, NimBoard> algMmEnnemi =
|
||||
new MiniMax<>(NimRole.ENNEMI, NimRole.AMI, NimHeuristics.hEnnemi, 2);
|
||||
|
||||
AIPlayer<NimMove, NimRole, NimBoard> playerAbAmi =
|
||||
new AIPlayer<>(NimRole.AMI, algAbAmi);
|
||||
|
||||
AIPlayer<NimMove, NimRole, NimBoard> playerMmEnnemi =
|
||||
new AIPlayer<>(NimRole.ENNEMI, algMmEnnemi);
|
||||
|
||||
ArrayList<AIPlayer<NimMove, NimRole, NimBoard>> players2 = new ArrayList<>();
|
||||
players2.add(playerAbAmi);
|
||||
players2.add(playerMmEnnemi);
|
||||
|
||||
NimBoard initialBoard2 = new NimBoard(N);
|
||||
NimGame game2 = new NimGame(players2, initialBoard2);
|
||||
game2.runGame();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user