package CSudoku; import CSudoku.player.Player; import CSudoku.player.ai.AIPlayer; import CSudoku.player.student.*; import java.util.*; public class TournamentManager { public static void main(String[] args) { Player[] players = new Player[] { new AIPlayer(new StudentAI_group1()), new AIPlayer(new StudentAI_group2()), new AIPlayer(new StudentAI_group3()), new AIPlayer(new StudentAI_group4()), // Ajouter d'autres IA ici }; Map scores = new HashMap<>(); for (Player player : players) { scores.put(player, new Score()); } for (int i = 0; i < players.length; i++) { for (int j = i + 1; j < players.length; j++) { Player p1 = players[i]; Player p2 = players[j]; System.out.println("\n🔹 Match: " + getName(p1) + " vs " + getName(p2)); CSudokuGame game = new CSudokuGame(9, p1, p2, null); Player winner = game.play(); // Doit retourner le gagnant ou null en cas d'égalité if (winner == null) { scores.get(p1).draw(); scores.get(p2).draw(); System.out.println("🤝 Match nul !"); } else if (winner == p1) { scores.get(p1).win(); scores.get(p2).lose(); System.out.println("🏆 Victoire de " + getName(p1)); } else { scores.get(p2).win(); scores.get(p1).lose(); System.out.println("🏆 Victoire de " + getName(p2)); } } } // Classement final System.out.println("\n📊 Classement final :"); List> ranking = new ArrayList<>(scores.entrySet()); ranking.sort((a, b) -> b.getValue().points - a.getValue().points); int rank = 1; for (Map.Entry entry : ranking) { Player p = entry.getKey(); Score s = entry.getValue(); System.out.printf("%d. %s - %d pts (W:%d D:%d L:%d)%n", rank++, getName(p), s.points, s.wins, s.draws, s.losses); } } private static String getName(Player player) { if (player instanceof AIPlayer ai) { return ai.getMoveStrategyName(); } else { return player.getClass().getSimpleName(); } } // Classe interne Score static class Score { int points = 0; int wins = 0; int draws = 0; int losses = 0; void win() { points += 3; wins++; } void draw() { points += 1; draws++; } void lose() { losses++; } } }