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. */ public GomokuAI(String name, Color color) { super(name, color); } /** * 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 */ int difficulty = 0; // ------------------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 playableCell = board.getPlayableCells(); GomokuCell playCell; int x = 0, y = 0; switch (difficulty) { case 0: playCell = playableCell.get(random.nextInt(playableCell.size())); break; case 1: Map map = GetCellPoint(board); int max = 0; for (Map.Entry entry : map.entrySet()) { if (entry.getValue() > max) { max = entry.getValue(); playCell = entry.getKey(); } } 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 GetCellPoint(GomokuBoard board) { List playableCell = board.getPlayableCells(); Map 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; } }