Aqui vai…
Podia haver uma solução mais simples… mas foi a que consegui… está funcionando em pleno…
public Move[] isOneFree(IBoard board, int ch) {
ArrayList<Move> moves = new ArrayList<Move>();
for (int i = 0; i < BOARDSIZE; i++) {
if (board.get(i, 0) == ch && board.get(i, 0) == board.get(i, 1)
&& board.get(i, 2) == 0) {
Move m = new Move(i, 2);
moves.add(m);
}
if (board.get(i, 0) == ch && board.get(i, 0) == board.get(i, 2)
&& board.get(i, 1) == 0) {
Move m = new Move(i, 1);
moves.add(m);
}
if (board.get(i, 1) == ch && board.get(i, 1) == board.get(i, 2)
&& board.get(i, 0) == 0) {
Move m = new Move(i, 0);
moves.add(m);
}
if (board.get(0, i) == ch && board.get(0, i) == board.get(1, i)
&& board.get(2, i) == 0) {
Move m = new Move(2, i);
moves.add(m);
}
if (board.get(0, i) == ch && board.get(0, i) == board.get(2, i)
&& board.get(1, i) == 0) {
Move m = new Move(1, i);
moves.add(m);
}
if (board.get(1, i) == ch && board.get(1, i) == board.get(2, i)
&& board.get(0, i) == 0) {
Move m = new Move(0, i);
moves.add(m);
}
}
if (board.get(0, 0) == ch && board.get(0, 0) == board.get(1, 1)
&& board.get(2, 2) == 0) {
Move m = new Move(2, 2);
moves.add(m);
}
if (board.get(0, 0) == ch && board.get(0, 0) == board.get(2, 2)
&& board.get(1, 1) == 0) {
Move m = new Move(1, 1);
moves.add(m);
}
if (board.get(1, 1) == ch && board.get(1, 1) == board.get(2, 2)
&& board.get(0, 0) == 0) {
Move m = new Move(0, 0);
moves.add(m);
}
if (board.get(2, 0) == ch && board.get(2, 0) == board.get(1, 1)
&& board.get(0, 2) == 0) {
Move m = new Move(0, 2);
moves.add(m);
}
if (board.get(2, 0) == ch && board.get(2, 0) == board.get(0, 2)
&& board.get(1, 1) == 0) {
Move m = new Move(1, 1);
moves.add(m);
}
if (board.get(1, 1) == ch && board.get(1, 1) == board.get(0, 2)
&& board.get(2, 0) == 0) {
Move m = new Move(2, 0);
moves.add(m);
}
return (Move[]) moves.toArray(new Move[0]);
}
public Move getOneFreeToWin (IGameModel model){
List list= Arrays.asList(model.isOneFree(model.getBoard(), 'X'));
if (list.size() == 0) {
return getCornerMove(model);
}
Collections.shuffle(list);
return (Move) list.get(0);
}