diff --git a/TestV2/src/fr/monkhanny/dorfromantik/Options.java b/TestV2/src/fr/monkhanny/dorfromantik/Options.java index e07f263..e354017 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/Options.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/Options.java @@ -51,4 +51,6 @@ public class Options { public static int SOUNDS_VOLUME = 60; public static final Dimension MINIMUM_FRAME_SIZE = new Dimension(700, 700); + + public static boolean AUTO_FOCUS = true; } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java index b4b1889..421fff7 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java @@ -1,6 +1,8 @@ package fr.monkhanny.dorfromantik.game; import fr.monkhanny.dorfromantik.listeners.GameResizeListener; +import fr.monkhanny.dorfromantik.listeners.GameZoomListener; +import fr.monkhanny.dorfromantik.listeners.GameArrowKeyListener; import java.util.ArrayList; import java.util.List; @@ -10,6 +12,7 @@ import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.Point; import java.awt.Color; +import java.awt.Graphics2D; /** @@ -22,6 +25,10 @@ public class Board extends JPanel{ private Game game; private JFrame gameFrame; private Tile centralTile; + private double zoomFactor = 1.0; // Facteur de zoom initial + private int offsetX = 0; // Décalage horizontal du plateau + private int offsetY = 0; // Décalage vertical du plateau + // Constructeur avec seed public Board(JFrame gameFrame, long seed) { @@ -37,25 +44,41 @@ public class Board extends JPanel{ // Ajouter un écouteur de redimensionnement pour redessiner les tuiles gameFrame.addComponentListener(new GameResizeListener(this)); + // Ajouter un écouteur de molette de souris pour gérer le zoom + gameFrame.addMouseWheelListener(new GameZoomListener(this)); + + // Ajouter un écouteur de clavier pour déplacer le plateau + gameFrame.addKeyListener(new GameArrowKeyListener(this)); + gameFrame.setFocusable(true); + this.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent e) { handleMouseClick(e); } + }); } private void handleMouseClick(java.awt.event.MouseEvent e) { + // Récupérer les coordonnées du clic Point clickedPoint = e.getPoint(); - // Vérifiez si la position cliquée est dans la liste des positions disponibles et si la distance est suffisante + // Ajuster les coordonnées du clic en tenant compte du zoom et des déplacements + // Annuler l'effet du zoom et du déplacement + int adjustedX = (int)((clickedPoint.x - offsetX) / zoomFactor); + int adjustedY = (int)((clickedPoint.y - offsetY) / zoomFactor); + + // Vérifiez si la position ajustée est dans la liste des positions disponibles et si la distance est suffisante for (Point position : availablePositions) { - if (clickedPoint.distance(position) < 20) { // Assurez-vous que le clic est plus éloigné du point + // Vérifiez la distance entre le clic ajusté et la position + if (new Point(adjustedX, adjustedY).distance(position) < 20) { placeTileAtPosition(position); // Place une tuile à cette position break; // Si une tuile est ajoutée, on peut sortir de la boucle } } } + private void initializeCentralTile() { int centerX = gameFrame.getWidth() / 2; int centerY = gameFrame.getHeight() / 2; @@ -152,6 +175,23 @@ public class Board extends JPanel{ } } + public void zoomIn() { + zoomFactor *= 1.1; // Augmenter le facteur de zoom + repaint(); + } + + public void zoomOut() { + zoomFactor /= 1.1; // Diminuer le facteur de zoom + repaint(); + } + + public void moveBoard(int dx, int dy) { + offsetX += dx; + offsetY += dy; + repaint(); + } + + /** * Afficher les points rouges pour indiquer les positions disponibles. * @@ -160,11 +200,18 @@ public class Board extends JPanel{ @Override public void paintComponent(Graphics g) { super.paintComponent(g); + Graphics2D g2d = (Graphics2D) g; + + // Appliquer l'échelle de zoom et le déplacement + g2d.scale(zoomFactor, zoomFactor); // Appliquer le zoom + g2d.translate(offsetX / zoomFactor, offsetY / zoomFactor); // Appliquer le déplacement (en tenant compte du zoom) + + // Dessiner les points rouges pour les positions disponibles for (Point position : availablePositions) { g.setColor(Color.RED); g.fillOval(position.x - 5, position.y - 5, 10, 10); // Dessiner un point rouge } - + // Dessiner les tuiles existantes for (Tile tile : tiles) { tile.paintTileWithPosition(g, 1f); diff --git a/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameArrowKeyListener.java b/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameArrowKeyListener.java new file mode 100644 index 0000000..7aff6d0 --- /dev/null +++ b/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameArrowKeyListener.java @@ -0,0 +1,32 @@ +package fr.monkhanny.dorfromantik.listeners; + +import fr.monkhanny.dorfromantik.game.Board; + +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +public class GameArrowKeyListener extends KeyAdapter { + private Board board; + + public GameArrowKeyListener(Board board) { + this.board = board; + } + + @Override + public void keyPressed(KeyEvent e) { + switch (e.getKeyCode()) { + case KeyEvent.VK_UP: + board.moveBoard(0, -10); // Déplacer vers le haut + break; + case KeyEvent.VK_DOWN: + board.moveBoard(0, 10); // Déplacer vers le bas + break; + case KeyEvent.VK_LEFT: + board.moveBoard(-10, 0); // Déplacer vers la gauche + break; + case KeyEvent.VK_RIGHT: + board.moveBoard(10, 0); // Déplacer vers la droite + break; + } + } +} diff --git a/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameZoomListener.java b/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameZoomListener.java new file mode 100644 index 0000000..85325af --- /dev/null +++ b/TestV2/src/fr/monkhanny/dorfromantik/listeners/GameZoomListener.java @@ -0,0 +1,24 @@ +package fr.monkhanny.dorfromantik.listeners; + +import fr.monkhanny.dorfromantik.game.Board; + +import java.awt.event.MouseAdapter; +import java.awt.event.MouseWheelEvent; + +public class GameZoomListener extends MouseAdapter { + private Board board; + + public GameZoomListener(Board board) { + this.board = board; + } + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + // Vérifier la direction de la molette (positive = zoom arrière, negative = zoom avant) + if (e.getWheelRotation() < 0) { + board.zoomIn(); // Appeler zoomIn() si la molette tourne vers le haut + } else { + board.zoomOut(); // Appeler zoomOut() si la molette tourne vers le bas + } + } +}