From 32d46984214f42ed5b7a261533bb503702ece1ce Mon Sep 17 00:00:00 2001 From: POGROTH THE HYPED <82341064+magicalmonke@users.noreply.github.com> Date: Sat, 22 Jun 2024 08:58:36 +0200 Subject: [PATCH] Implement PuzzleController class --- .../prog2/controller/PuzzleController.java | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/taako/swt/prog2/controller/PuzzleController.java b/src/main/java/me/taako/swt/prog2/controller/PuzzleController.java index 5bd2fd0..e5f0d9e 100644 --- a/src/main/java/me/taako/swt/prog2/controller/PuzzleController.java +++ b/src/main/java/me/taako/swt/prog2/controller/PuzzleController.java @@ -1,4 +1,47 @@ 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 { -} + private final PuzzleModel model; + private final PuzzleView view; + + public PuzzleController(PuzzleModel model, PuzzleView view) { + this.model = model; + this.view = view; + } + + public void initController() { + List 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!"); + } + } +} \ No newline at end of file