diff --git a/src/fr/monkhanny/dorfromantik/game/Board.java b/src/fr/monkhanny/dorfromantik/game/Board.java index f5e4660..6ef350b 100644 --- a/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/src/fr/monkhanny/dorfromantik/game/Board.java @@ -69,7 +69,7 @@ public class Board extends JPanel{ gameFrame.addKeyListener(new PauseGame(gameFrame, game)); gameFrame.setFocusable(true); - this.remainingTilesIndicator = new RemainingTilesIndicator(Options.MAX_TILE_NUMBER); + this.remainingTilesIndicator = new RemainingTilesIndicator(Options.MAX_TILE_NUMBER - 1); // Remplacer l'adaptateur anonyme par notre classe CustomMouseMotionAdapter this.addMouseMotionListener(new CustomMouseMotionAdapter(this)); @@ -288,31 +288,42 @@ public class Board extends JPanel{ * @param position La position où ajouter la tuile */ public void placeTileAtPosition(Point position) { - // Vérifie si la position est disponible et que la tuile n'est pas déjà placée à cet endroit if (availablePositions.contains(position) && !isTileAtPosition(position)) { - if (tiles.size() < Options.MAX_TILE_NUMBER) { - // Vérifiez si la nextTile existe, sinon on ignore + if (tiles.size() < Options.MAX_TILE_NUMBER - 1) { + // Placer une nouvelle tuile normalement if (nextTile != null) { - remainingTilesIndicator.setRemainingTiles(Options.MAX_TILE_NUMBER - tiles.size()); - + remainingTilesIndicator.setRemainingTiles(Options.MAX_TILE_NUMBER - 1 - tiles.size()); + // Place la nextTile à la position choisie nextTile.setPosition(position.x, position.y); addTile(nextTile); // Ajoute la nextTile au tableau des tuiles calculateAvailablePositions(nextTile); // Calcule de nouvelles positions disponibles repaint(); // Redessine le plateau autoReFocus(nextTile); - + // Initialiser une nouvelle nextTile pour le prochain tour initializeNextTile(); } - } else { + // Pour la dernière tuile + if (nextTile != null) { + // Place la dernière tuile et mettre à jour le score + nextTile.setPosition(position.x, position.y); + addTile(nextTile); + calculateAvailablePositions(nextTile); + repaint(); + + // Mise à jour de l'indicateur de tuiles restantes + remainingTilesIndicator.setRemainingTiles(0); + } + + // Fin de la partie try { this.database = new Database(); } catch (Exception e) { System.err.println("Erreur lors de la connexion à la base de données: " + e.getMessage()); } - GameOver gameOverPanel = new GameOver(gameFrame, currentScore, database,Options.mainMenu); + GameOver gameOverPanel = new GameOver(gameFrame, currentScore, database, Options.mainMenu); gameFrame.getContentPane().removeAll(); // Supprime l'ancien contenu gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre @@ -320,6 +331,7 @@ public class Board extends JPanel{ } } } + public void autoReFocus(Tile newlyPlacedTile) { if (Options.AUTO_FOCUS) { @@ -330,8 +342,9 @@ public class Board extends JPanel{ // Calculer les décalages nécessaires pour centrer la tuile // Nous utilisons la largeur et la hauteur du panneau de jeu (getWidth et getHeight) // Divisé par 2 pour centrer la nouvelle tuile dans la fenêtre. - int targetOffsetX = (int) ((getWidth() - newlyPlacedTile.getRadius() * 2) / 2 - newlyPlacedTileX); - int targetOffsetY = (int) ((getHeight() - newlyPlacedTile.getRadius() * 2) / 2 - newlyPlacedTileY); + int targetOffsetX = (int) ((getWidth() - newlyPlacedTile.getRadius() * 2 * zoomFactor) / 2 - newlyPlacedTileX * zoomFactor); + int targetOffsetY = (int) ((getHeight() - newlyPlacedTile.getRadius() * 2 * zoomFactor) / 2 - newlyPlacedTileY * zoomFactor); + TilePanningTransition panningTransition = new TilePanningTransition(this, targetOffsetX, targetOffsetY, 15); panningTransition.start();