public void shuffle() { if (animation == null && puzzleBoard != null) { for (int i = 0; i < NUM_SHUFFLE_STEPS; i++) { ArrayList<PuzzleBoard> shuffledBoards = puzzleBoard.neighbours(); int size = shuffledBoards.size(); int index = random.nextInt(size); puzzleBoard = shuffledBoards.get(index); } } invalidate(); }
public void solve() { PriorityQueue<PuzzleBoard> queue = new PriorityQueue<>( 1000, new Comparator<PuzzleBoard>() { @Override public int compare(PuzzleBoard lhs, PuzzleBoard rhs) { return lhs.priority() - rhs.priority(); } }); PuzzleBoard currBoard = new PuzzleBoard(puzzleBoard); currBoard.initializePreviousBoard(); queue.add(currBoard); while (!queue.isEmpty()) { currBoard = queue.poll(); if (currBoard.resolved()) { ArrayList<PuzzleBoard> arrayList = new ArrayList(); while (currBoard.getPreviousBoard() != null) { arrayList.add(currBoard); currBoard = currBoard.getPreviousBoard(); } Collections.reverse(arrayList); animation = new ArrayList<>(); animation.addAll(arrayList); invalidate(); break; } else { queue.addAll(currBoard.neighbours()); } } }