108 lines
3.0 KiB
Java
108 lines
3.0 KiB
Java
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Random;
|
|
|
|
public class GomokuAI extends Player {
|
|
|
|
// ------------------Constructors--------------------------
|
|
|
|
/**
|
|
* The constructor of the GomokuAI.
|
|
* @param name The name of the player.
|
|
* @param color The color of the player.
|
|
*/
|
|
public GomokuAI(String name, Color color, int tokens) {
|
|
super(name, color, tokens);
|
|
}
|
|
|
|
/**
|
|
* This class is an extends of the class Player, this allows the GomokuAI to
|
|
* choose his move.
|
|
*/
|
|
|
|
/** The random initialization */
|
|
Random random = new Random();
|
|
/** The difficulty of the GomokuAI */
|
|
private int difficulty = 1;
|
|
|
|
// ------------------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();
|
|
GomokuCell playCell= null;
|
|
int x = 0, y = 0;
|
|
|
|
switch (difficulty) {
|
|
case 0:
|
|
playCell = playableCell.get(random.nextInt(playableCell.size()));
|
|
break;
|
|
case 1:
|
|
Map<GomokuCell, Integer> map = GetCellPoint(board);
|
|
int max = 0;
|
|
for (Map.Entry<GomokuCell, Integer> entry : map.entrySet()) {
|
|
if (entry.getValue() > max) {
|
|
max = entry.getValue();
|
|
playCell = entry.getKey();
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
throw new AssertionError();
|
|
}
|
|
|
|
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.
|
|
*/
|
|
public Map<GomokuCell, Integer> GetCellPoint(GomokuBoard board) {
|
|
|
|
List<GomokuCell> playableCell = board.getPlayableCells();
|
|
Map<GomokuCell, Integer> map = new HashMap<>();
|
|
|
|
for (GomokuCell gomokuCell : playableCell) {
|
|
|
|
switch (this.color) {
|
|
|
|
case Color.WHITE:
|
|
gomokuCell.setState(Color.BLACK);
|
|
break;
|
|
case Color.BLACK:
|
|
gomokuCell.setState(Color.WHITE);
|
|
break;
|
|
default:
|
|
throw new AssertionError();
|
|
}
|
|
|
|
map.put(gomokuCell, board.countMax(board.countAlignedCells(gomokuCell)));
|
|
|
|
gomokuCell.setState(Color.NIL);
|
|
}
|
|
|
|
return map;
|
|
}
|
|
// ------------------Getter--------------------------
|
|
public int GetDifficulty() {
|
|
return difficulty;
|
|
}
|
|
// ------------------Setter--------------------------
|
|
public void SetDifficulty(int difficulty) {
|
|
this.difficulty = difficulty;
|
|
}
|
|
|
|
}
|