revert commit 6e4241c5
This commit is contained in:
parent
ebae240940
commit
bd7a8e1f84
3
Rapport/META-INF/MANIFEST.MF
Normal file
3
Rapport/META-INF/MANIFEST.MF
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Main-Class: othello.MainStats
|
||||||
|
|
@ -44,14 +44,14 @@ Notre code se compose de plusieurs classes dont nous allons détailler les rôle
|
|||||||
|
|
||||||
Nous avons utilisé un algorithme Negamax pour résoudre le problème, représenté en pseudo-code ci-dessous.
|
Nous avons utilisé un algorithme Negamax pour résoudre le problème, représenté en pseudo-code ci-dessous.
|
||||||
|
|
||||||
\lstinputlisting[language=Java]{NegamaxPlayer.java}
|
\lstinputlisting[language=Java]{NegamaxPlayer.txt}
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\subsection{Algorithme d'élagage}
|
\subsection{Algorithme d'élagage}
|
||||||
|
|
||||||
Afin d'améliorer les performances de notre algorithme de base, nous avons implémenté une version avec élagage Alpha-Beta, plus performante.
|
Afin d'améliorer les performances de notre algorithme de base, nous avons implémenté une version avec élagage Alpha-Beta, plus performante.
|
||||||
|
|
||||||
\lstinputlisting[language=Java]{AlphaBetaPlayer.java}
|
\lstinputlisting[language=Java]{AlphaBetaPlayer.txt}
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\section{Mesures}
|
\section{Mesures}
|
||||||
|
@ -10,26 +10,25 @@ import othello.players.AlphaBetaPlayer;
|
|||||||
import othello.players.NegamaxPlayer;
|
import othello.players.NegamaxPlayer;
|
||||||
import othello.players.Player;
|
import othello.players.Player;
|
||||||
|
|
||||||
|
|
||||||
public class MainStats {
|
public class MainStats {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
|
Player[] players = Main.extractArgs(args);
|
||||||
Player p1 = new NegamaxPlayer(1);
|
Player p1 = players[0];
|
||||||
Player p2 = new NegamaxPlayer(1);
|
Player p2 = players[1];
|
||||||
Player[][] board = initializeBoard(p1, p2);
|
Player[][] board = Main.initializeBoard(p1, p2);
|
||||||
|
|
||||||
State game = new State(board, p1, p2);
|
State game = new State(board, p1, p2);
|
||||||
System.out.println("joueur 1: " + p1);
|
System.out.println("joueur 1: " + p1);
|
||||||
System.out.println("joueur 2: " + p2);
|
System.out.println("joueur 2: " + p2);
|
||||||
int tour = 1; // Pour le rapport
|
int tour = 1; // Pour le rapport
|
||||||
PrintWriter writer = new PrintWriter("statsj1.txt");
|
PrintWriter writer = new PrintWriter("statsj1.txt", StandardCharsets.UTF_8);
|
||||||
PrintWriter writer2 = new PrintWriter("statsj2.txt");
|
PrintWriter writer2 = new PrintWriter("statsj2.txt", StandardCharsets.UTF_8);
|
||||||
|
|
||||||
while(!game.isOver()) {
|
while(!game.isOver()) {
|
||||||
Player player = game.getCurrentPlayer();
|
Player player = game.getCurrentPlayer();
|
||||||
System.out.println(game.toString());
|
System.out.println(game.toString());
|
||||||
game = game.play(player.play(game));
|
game = game.play(player.play(game));
|
||||||
|
|
||||||
if(tour % 2 == 0)
|
if(tour % 2 == 0)
|
||||||
writer2.println(player.getComplexity());
|
writer2.println(player.getComplexity());
|
||||||
else
|
else
|
||||||
@ -41,48 +40,4 @@ public class MainStats {
|
|||||||
Main.endGame(game, p1, p2);
|
Main.endGame(game, p1, p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Player[] extractArgs(String[] args) {
|
|
||||||
Player p1;
|
|
||||||
Player p2;
|
|
||||||
int depthP1 = 4;
|
|
||||||
int depthP2 = 4;
|
|
||||||
boolean useAlphaBeta = true;
|
|
||||||
try {
|
|
||||||
if(args.length >= 3) { // les paramètres > 3 sont ignorés
|
|
||||||
depthP1 = Integer.parseInt(args[0]);
|
|
||||||
depthP2 = Integer.parseInt(args[1]);
|
|
||||||
useAlphaBeta = Boolean.parseBoolean(args[2]);
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
System.out.println("Les arguments de lancement ne pas corrects (pas des nombres entiers)");
|
|
||||||
System.out.println("Utilisation des paramètres par défaut ( 4 4 true )");
|
|
||||||
} finally {
|
|
||||||
if(useAlphaBeta) {
|
|
||||||
p1 = new AlphaBetaPlayer(depthP1);
|
|
||||||
p2 = new AlphaBetaPlayer(depthP2);
|
|
||||||
} else {
|
|
||||||
p1 = new NegamaxPlayer(depthP1);
|
|
||||||
p2 = new NegamaxPlayer(depthP2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new Player[]{p1, p2};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Player[][] initializeBoard(Player p1, Player p2){
|
|
||||||
Player[][] board = new Player[7][7];
|
|
||||||
board[0][0] = p2;
|
|
||||||
board[0][6] = p1;
|
|
||||||
board[6][0] = p1;
|
|
||||||
board[6][6] = p2;
|
|
||||||
return board;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void endGame(State game, Player p1, Player p2) {
|
|
||||||
System.out.println(game.toString());
|
|
||||||
System.out.println(game.getN1()+" "+ game.getN2());
|
|
||||||
System.out.println(game.getWinner() + " a gagné la partie");
|
|
||||||
System.out.println("Score joueur 1 -> " + game.getScore(p1));
|
|
||||||
System.out.println("Score joueur 2 -> "+ game.getScore(p2));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user