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,7 +1,28 @@
public enum Color {
NIL,
WHITE,
BLACK;
NIL(-1),
WHITE(0),
BLACK(1);
private final int val;
Color(int i) {
this.val = i;
}
public Color fromInt(int i) {
for (Color c : Color.values()) {
if (c.val == val) {
return c;
}
}
throw new IllegalArgumentException("Invalid value: " + this);
}
public Color inverse() {
if (this.val == -1)
throw new IllegalArgumentException("No inverse of NIL");
return fromInt((this.val + 1) % 2);
}
}

View File

@@ -1,15 +1,15 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.HashMap;
public class GomokuAI extends Player {
// ------------------Constructors--------------------------
/**
* The constructor of the Human.
*
* @param name The name of the player.
* @param color The color of the player.
*/
@@ -18,7 +18,8 @@ public class GomokuAI extends Player{
}
/**
* This class is an extends of the class Player, this allows the GomokuAI to choose his move.
* This class is an extends of the class Player, this allows the GomokuAI to
* choose his move.
*/
/** The random initialization */
@@ -29,9 +30,11 @@ public class GomokuAI extends Player{
// ------------------Methods--------------------------
/**
* Return the coordinate of the move played by the Gomoku AI.
*
* @param board The actual Gomoku board.
* @return The Cell of the move played.
*/
@Override
public GomokuCell chooseMove(GomokuBoard board) {
List<GomokuCell> playableCell = board.getPlayableCells();
@@ -57,12 +60,12 @@ public class GomokuAI extends Player{
System.out.println("L'IA à choisi : " + x + ", " + y);
return playCell;
}
/**
* Return a Map of all Cell playable, and their point.
*
* @param board The actual Gomoku board.
* @return the Map of all Cell playable, and their point.
*/
@@ -93,6 +96,4 @@ public class GomokuAI extends Player{
return map;
}
}

View File

@@ -1,8 +1,8 @@
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 {
@@ -36,7 +36,26 @@ public class GomokuGame {
}
}
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;
}
@@ -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);
}
@@ -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));
}

View File

@@ -3,12 +3,11 @@ import java.io.Console;
public class Human extends Player {
// ------------------Constructors--------------------------
/**
* The constructor of the Human.
*
* @param name The name of the player.
* @param color The color of the player.
*/
@@ -17,15 +16,18 @@ public class Human extends Player{
}
/**
* This class is an extends of the class Player, this allows the player to choose his move.
* This class is an extends of the class Player, this allows the player to
* choose his move.
*/
// ------------------Methods--------------------------
/**
* Return the coordinate of the move played by the player.
*
* @param board The actual Gomoku board.
* @return The cell of the move played.
*/
@Override
public GomokuCell chooseMove(GomokuBoard board) {
Console cons = System.console();
@@ -45,8 +47,7 @@ public class Human extends Player{
System.out.println("Ce n'est pas un nombre !");
pass = false;
}
}
while(!pass);
} while (!pass);
do {
try {
@@ -58,21 +59,16 @@ public class Human extends Player{
System.out.println("Ce n'est pas un nombre !");
pass = false;
}
}
while(!pass);
} while (!pass);
pass = board.get(x, y).isPlayable();
if(!pass)
{
if (!pass) {
System.out.println("Cette case n'est pas jouable !");
}
}
while(!pass);
} while (!pass);
System.out.println("Vous avez saisi : " + x + ", " + y);
return board.get(x, y);
}
}