format + new game

This commit is contained in:
Aubin DORIVAL
2025-04-07 08:56:06 +02:00
parent e27f842198
commit df87eb7d45
4 changed files with 145 additions and 95 deletions

View File

@@ -1,12 +1,12 @@
import java.nio.file.Path;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Random;
import java.io.BufferedWriter;
public class GomokuGame {
public static final int DEFAULT_BOARD_WIDTH = 15; // largeur du plateau
public static final int DEFAULT_BOARD_WIDTH = 15; // largeur du plateau
public static final int DEFAULT_BOARD_HEIGHT = 15; // hauteur du plateau
public static final int DEFAULT_TOKENS_COUNT = 60; // nb de jetons
@@ -30,13 +30,32 @@ public class GomokuGame {
for (int i = 0; i < g.boardHeight; ++i) {
for (int j = 0; j < g.boardWidth; ++j) {
System.out.print(g.getBoard().get(i ,j));
System.out.print(g.getBoard().get(i, j));
}
System.out.println();
}
}
public void newGame() {
public void newGame(boolean bot, String name1, String name2) {
Color[] possible = { Color.WHITE, Color.BLACK };
int rnd = new Random().nextInt(possible.length);
Color colorPlayer1 = possible[rnd];
Color colorPlayer2 = colorPlayer1.inverse();
this.player1 = new Human(name1, colorPlayer1);
if (bot) {
this.player2 = new GomokuAI(name2, colorPlayer2);
} else {
this.player2 = new Human(name2, colorPlayer2);
}
this.board = new GomokuBoard(15, 15);
this.colorP1 = colorPlayer1;
this.currP = this.player1.color == Color.WHITE ? 1: 2;
this.nbTokens1 = 60;
this.nbTokens2 = 60;
}
@@ -48,7 +67,7 @@ public class GomokuGame {
// save the game state to the file
// 1. Open the file
// 2. Write the first line with:
// w h colorP1 currP nbTokens1 nbTokens2
// w h colorP1 currP nbTokens1 nbTokens2
// 3. Write the next h lines with the board
// 4. Close the file
// 5. Return true if successful, false otherwise
@@ -68,12 +87,19 @@ public class GomokuGame {
for (int j = 0; j < boardWidth; ++j) {
char c;
switch (board.get(i, j).getState()) {
case BLACK: c = 'X'; break;
case WHITE: c = 'O'; break;
case NIL: c = '.'; break;
default: throw new IllegalStateException(
String.format("Unexpected value at cell (%d, %d): %s", i, j, board.get(i, j).getState())
);
case BLACK:
c = 'X';
break;
case WHITE:
break;
case NIL:
c = '.';
break;
default:
throw new IllegalStateException(
String.format("Unexpected value at cell (%d, %d): %s", i, j,
board.get(i, j).getState()));
}
writer.write(c);
}
@@ -93,7 +119,7 @@ public class GomokuGame {
// load the game state from the file
// 1. Open the file
// 2. Read the first line to get:
// w h colorP1 currP nbTokens1 nbTokens2
// w h colorP1 currP nbTokens1 nbTokens2
// 3. Read the next h lines to get the board
// 4. Close the file
// 5. Initialize the board with the read values
@@ -136,9 +162,15 @@ public class GomokuGame {
for (int j = 0; j < w; ++j) {
switch (line.charAt(j)) {
case 'X': colors[i][j] = Color.BLACK; break;
case 'O': colors[i][j] = Color.WHITE; break;
case '.': colors[i][j] = Color.NIL; break;
case 'X':
colors[i][j] = Color.BLACK;
break;
case 'O':
colors[i][j] = Color.WHITE;
break;
case '.':
colors[i][j] = Color.NIL;
break;
default:
throw new IllegalArgumentException("Invalid color: " + line.charAt(j));
}
@@ -160,7 +192,7 @@ public class GomokuGame {
}
// Initialize the board with the read values
this.boardWidth = w;
this.boardWidth = w;
this.boardHeight = h;
this.board = new GomokuBoard(w, h, colors);