Beispiel #1
0
 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();
 }
Beispiel #2
0
  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());
      }
    }
  }