Amélioration

This commit is contained in:
2024-12-04 18:30:38 +01:00
parent b8b525bd16
commit 4d343a580f
2 changed files with 77 additions and 43 deletions

View File

@@ -49,6 +49,7 @@ public class Board extends JPanel{
private int currentScore;
private Database database;
private RemainingTilesIndicator remainingTilesIndicator;
private ScoreDisplay scoreDisplay;
// Constructeur avec seed
@@ -61,6 +62,8 @@ public class Board extends JPanel{
this.game = new Game(seed);
this.scoreManager = new ScoreManager(biomeGroups);
Font scoreFont = Fonts.SCORE.getFont(30f); // Remplacez par votre logique de chargement de police
scoreDisplay = new ScoreDisplay(scoreFont, 0, 40); // Position fixe
for (Biome biome : Biome.values()) {
biomeGroups.put(biome, new BiomeGroup());
@@ -138,44 +141,48 @@ public class Board extends JPanel{
return;
}
// Calculer les dimensions totales du plateau (largeur et hauteur des tuiles)
int totalWidth = 0;
int totalHeight = 0;
// Calculer les limites du plateau (minX, minY, maxX, maxY)
int minX = Integer.MAX_VALUE;
int minY = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE;
int maxY = Integer.MIN_VALUE;
// Calculer la largeur et la hauteur totale de toutes les tuiles
for (Tile tile : tiles) {
totalWidth = Math.max(totalWidth, tile.getXCoord() + tile.getRadius());
totalHeight = Math.max(totalHeight, tile.getYCoord() + tile.getRadius());
minX = Math.min(minX, tile.getXCoord() - tile.getRadius());
minY = Math.min(minY, tile.getYCoord() - tile.getRadius());
maxX = Math.max(maxX, tile.getXCoord() + tile.getRadius());
maxY = Math.max(maxY, tile.getYCoord() + tile.getRadius());
}
// Ajouter une petite marge pour les bords
totalWidth += 50; // Marge pour éviter que les tuiles ne soient collées au bord
totalHeight += 50; // Marge pour éviter que les tuiles ne soient collées au bord
// Ajouter une marge aux dimensions calculées
int margin = 50;
minX -= margin;
minY -= margin;
maxX += margin;
maxY += margin;
// Calculer le facteur de zoom pour que toutes les tuiles tiennent sur l'écran
// Calculer les dimensions totales avec la marge
int totalWidth = maxX - minX;
int totalHeight = maxY - minY;
// Calculer le facteur de zoom pour que tout tienne dans la fenêtre
double horizontalZoom = (double) getWidth() / totalWidth;
double verticalZoom = (double) getHeight() / totalHeight;
// Choisir le zoom le plus petit pour éviter que les tuiles ne sortent de l'écran
// Choisir le plus petit facteur de zoom pour s'assurer que tout est visible
zoomFactor = Math.min(horizontalZoom, verticalZoom);
// Ajuster les offsets pour centrer les tuiles après le dézoom
adjustOffsets(totalWidth, totalHeight);
// Ajuster les offsets pour centrer les tuiles
int centerX = minX + totalWidth / 2;
int centerY = minY + totalHeight / 2;
// Recalculer les positions disponibles et redessiner le plateau
offsetX = getWidth() / 2 - (int) (centerX * zoomFactor);
offsetY = getHeight() / 2 - (int) (centerY * zoomFactor);
// Redessiner le plateau avec les nouveaux paramètres
repaint();
}
private void adjustOffsets(int totalWidth, int totalHeight) {
// Calculer les décalages nécessaires pour centrer le plateau
int targetOffsetX = (int) ((getWidth() - totalWidth * zoomFactor) / 2);
int targetOffsetY = (int) ((getHeight() - totalHeight * zoomFactor) / 2);
// Appliquer les nouveaux offsets
setOffsetX(targetOffsetX);
setOffsetY(targetOffsetY);
}
public void handleMouseClick(java.awt.event.MouseEvent e) {
if (Options.isPaused) {
@@ -255,6 +262,7 @@ public class Board extends JPanel{
return false;
}
// Vérifie si deux tuiles sont connectées par un même biome
private boolean areTilesConnected(Tile tile1, Tile tile2) {
for (TileOrientation orientation : TileOrientation.values()) {
@@ -270,6 +278,7 @@ public class Board extends JPanel{
private void calculateCurrentScore() {
scoreManager.updateScore(); // Met à jour le score
currentScore = scoreManager.getCurrentScore(); // Récupère le score actuel
scoreDisplay.setScore(currentScore); // Met à jour l'affichage du score
}
public int getCurrentScore() {
@@ -421,6 +430,11 @@ public class Board extends JPanel{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
int scoreX = (getWidth() - 110) / 2;
scoreDisplay.setPosition(scoreX, 40);
scoreDisplay.draw(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)
@@ -449,18 +463,6 @@ public class Board extends JPanel{
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); // Rétablir l'opacité
}
// Obtenez la police SCORE avec une taille ajustée (par exemple, 30 points)
Font scoreFont = Fonts.SCORE.getFont(30f); // Vous pouvez ajuster la taille ici
g.setFont(scoreFont);
// Calculer la position du score (avec zoom et décalage)
g.setColor(Color.BLACK);
int scoreX = (int) ((getWidth() / (2 * zoomFactor) - offsetX / zoomFactor) - 20);
int scoreY = (int) (40 / zoomFactor - offsetY / zoomFactor);
// Dessiner le texte du score
g.drawString("Score : " + currentScore, scoreX, scoreY);
if (nextTile != null) {
// Calculer la position correcte de la nextTile (en tenant compte du zoom et des décalages)
int nextTileX = 0; // Position x dans l'espace global

View File

@@ -0,0 +1,32 @@
package fr.monkhanny.dorfromantik.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
public class ScoreDisplay {
private int score;
private Font font;
private int x, y; // Position du score
public ScoreDisplay(Font font, int x, int y) {
this.font = font;
this.x = x;
this.y = y;
}
public void setScore(int score) {
this.score = score;
}
public void setPosition(int x, int y) {
this.x = x;
this.y = y;
}
public void draw(Graphics g) {
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString("Score: " + score, x, y);
}
}