Implement PuzzleController class
This commit is contained in:
@@ -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!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user