Amélioration du mode auto focus

This commit is contained in:
2024-12-06 21:36:53 +01:00
parent 5415928d70
commit f327128bb7

View File

@@ -69,7 +69,7 @@ public class Board extends JPanel{
gameFrame.addKeyListener(new PauseGame(gameFrame, game)); gameFrame.addKeyListener(new PauseGame(gameFrame, game));
gameFrame.setFocusable(true); 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 // Remplacer l'adaptateur anonyme par notre classe CustomMouseMotionAdapter
this.addMouseMotionListener(new CustomMouseMotionAdapter(this)); this.addMouseMotionListener(new CustomMouseMotionAdapter(this));
@@ -288,12 +288,11 @@ public class Board extends JPanel{
* @param position La position où ajouter la tuile * @param position La position où ajouter la tuile
*/ */
public void placeTileAtPosition(Point position) { 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 (availablePositions.contains(position) && !isTileAtPosition(position)) {
if (tiles.size() < Options.MAX_TILE_NUMBER) { if (tiles.size() < Options.MAX_TILE_NUMBER - 1) {
// Vérifiez si la nextTile existe, sinon on ignore // Placer une nouvelle tuile normalement
if (nextTile != null) { 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 // Place la nextTile à la position choisie
nextTile.setPosition(position.x, position.y); nextTile.setPosition(position.x, position.y);
@@ -305,14 +304,26 @@ public class Board extends JPanel{
// Initialiser une nouvelle nextTile pour le prochain tour // Initialiser une nouvelle nextTile pour le prochain tour
initializeNextTile(); initializeNextTile();
} }
} else { } 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 { try {
this.database = new Database(); this.database = new Database();
} catch (Exception e) { } catch (Exception e) {
System.err.println("Erreur lors de la connexion à la base de données: " + e.getMessage()); 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().removeAll(); // Supprime l'ancien contenu
gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver
gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre
@@ -321,6 +332,7 @@ public class Board extends JPanel{
} }
} }
public void autoReFocus(Tile newlyPlacedTile) { public void autoReFocus(Tile newlyPlacedTile) {
if (Options.AUTO_FOCUS) { if (Options.AUTO_FOCUS) {
// Récupérer les coordonnées de la nouvelle tuile // Récupérer les coordonnées de la nouvelle tuile
@@ -330,8 +342,9 @@ public class Board extends JPanel{
// Calculer les décalages nécessaires pour centrer la tuile // Calculer les décalages nécessaires pour centrer la tuile
// Nous utilisons la largeur et la hauteur du panneau de jeu (getWidth et getHeight) // 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. // Divisé par 2 pour centrer la nouvelle tuile dans la fenêtre.
int targetOffsetX = (int) ((getWidth() - newlyPlacedTile.getRadius() * 2) / 2 - newlyPlacedTileX); int targetOffsetX = (int) ((getWidth() - newlyPlacedTile.getRadius() * 2 * zoomFactor) / 2 - newlyPlacedTileX * zoomFactor);
int targetOffsetY = (int) ((getHeight() - newlyPlacedTile.getRadius() * 2) / 2 - newlyPlacedTileY); int targetOffsetY = (int) ((getHeight() - newlyPlacedTile.getRadius() * 2 * zoomFactor) / 2 - newlyPlacedTileY * zoomFactor);
TilePanningTransition panningTransition = new TilePanningTransition(this, targetOffsetX, targetOffsetY, 15); TilePanningTransition panningTransition = new TilePanningTransition(this, targetOffsetX, targetOffsetY, 15);
panningTransition.start(); panningTransition.start();