Implement PuzzleController class

This commit is contained in:
POGROTH THE HYPED
2024-06-22 08:58:36 +02:00
parent 324fbd5da4
commit 32d4698421

View File

@@ -1,4 +1,47 @@
package me.taako.swt.prog2.controller; package me.taako.swt.prog2.controller;
import me.taako.swt.prog2.model.PuzzleModel;
import me.taako.swt.prog2.view.PuzzleView;
import javax.swing.*;
import java.util.List;
import java.util.stream.IntStream;
public class PuzzleController { public class PuzzleController {
} private final PuzzleModel model;
private final PuzzleView view;
public PuzzleController(PuzzleModel model, PuzzleView view) {
this.model = model;
this.view = view;
}
public void initController() {
List<JButton> buttons = view.getButtons();
IntStream.range(0, buttons.size())
.forEach(i -> buttons.get(i)
.addActionListener(e -> handleButtonClick(i)));
}
private void handleButtonClick(int index) {
int size = model.getSize();
int sqrtSize = (int) Math.sqrt(size);
int emptyTile = size - 1;
if (index > 0 && model.getTile(index - 1) == emptyTile) {
model.swapTiles(index, index - 1);
} else if (index < size - 1 && model.getTile(index + 1) == emptyTile) {
model.swapTiles(index, index + 1);
} else if (index >= sqrtSize && model.getTile(index - sqrtSize) == emptyTile) {
model.swapTiles(index, index - sqrtSize);
} else if (index < size - sqrtSize && model.getTile(index + sqrtSize) == emptyTile) {
model.swapTiles(index, index + sqrtSize);
}
view.update();
if (model.isSolved()) {
JOptionPane.showMessageDialog(view, "Puzzle gelöst!");
}
}
}