Amélioration
This commit is contained in:
@@ -49,6 +49,7 @@ public class Board extends JPanel{
|
|||||||
private int currentScore;
|
private int currentScore;
|
||||||
private Database database;
|
private Database database;
|
||||||
private RemainingTilesIndicator remainingTilesIndicator;
|
private RemainingTilesIndicator remainingTilesIndicator;
|
||||||
|
private ScoreDisplay scoreDisplay;
|
||||||
|
|
||||||
|
|
||||||
// Constructeur avec seed
|
// Constructeur avec seed
|
||||||
@@ -61,6 +62,8 @@ public class Board extends JPanel{
|
|||||||
this.game = new Game(seed);
|
this.game = new Game(seed);
|
||||||
|
|
||||||
this.scoreManager = new ScoreManager(biomeGroups);
|
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()) {
|
for (Biome biome : Biome.values()) {
|
||||||
biomeGroups.put(biome, new BiomeGroup());
|
biomeGroups.put(biome, new BiomeGroup());
|
||||||
@@ -137,45 +140,49 @@ public class Board extends JPanel{
|
|||||||
if (Options.isPaused) {
|
if (Options.isPaused) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculer les dimensions totales du plateau (largeur et hauteur des tuiles)
|
// Calculer les limites du plateau (minX, minY, maxX, maxY)
|
||||||
int totalWidth = 0;
|
int minX = Integer.MAX_VALUE;
|
||||||
int totalHeight = 0;
|
int minY = Integer.MAX_VALUE;
|
||||||
|
int maxX = Integer.MIN_VALUE;
|
||||||
// Calculer la largeur et la hauteur totale de toutes les tuiles
|
int maxY = Integer.MIN_VALUE;
|
||||||
|
|
||||||
for (Tile tile : tiles) {
|
for (Tile tile : tiles) {
|
||||||
totalWidth = Math.max(totalWidth, tile.getXCoord() + tile.getRadius());
|
minX = Math.min(minX, tile.getXCoord() - tile.getRadius());
|
||||||
totalHeight = Math.max(totalHeight, tile.getYCoord() + 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
|
// Ajouter une marge aux dimensions calculées
|
||||||
totalWidth += 50; // Marge pour éviter que les tuiles ne soient collées au bord
|
int margin = 50;
|
||||||
totalHeight += 50; // Marge pour éviter que les tuiles ne soient collées au bord
|
minX -= margin;
|
||||||
|
minY -= margin;
|
||||||
// Calculer le facteur de zoom pour que toutes les tuiles tiennent sur l'écran
|
maxX += margin;
|
||||||
|
maxY += margin;
|
||||||
|
|
||||||
|
// 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 horizontalZoom = (double) getWidth() / totalWidth;
|
||||||
double verticalZoom = (double) getHeight() / totalHeight;
|
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);
|
zoomFactor = Math.min(horizontalZoom, verticalZoom);
|
||||||
|
|
||||||
// Ajuster les offsets pour centrer les tuiles après le dézoom
|
// Ajuster les offsets pour centrer les tuiles
|
||||||
adjustOffsets(totalWidth, totalHeight);
|
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();
|
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) {
|
public void handleMouseClick(java.awt.event.MouseEvent e) {
|
||||||
if (Options.isPaused) {
|
if (Options.isPaused) {
|
||||||
@@ -255,6 +262,7 @@ public class Board extends JPanel{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Vérifie si deux tuiles sont connectées par un même biome
|
// Vérifie si deux tuiles sont connectées par un même biome
|
||||||
private boolean areTilesConnected(Tile tile1, Tile tile2) {
|
private boolean areTilesConnected(Tile tile1, Tile tile2) {
|
||||||
for (TileOrientation orientation : TileOrientation.values()) {
|
for (TileOrientation orientation : TileOrientation.values()) {
|
||||||
@@ -270,6 +278,7 @@ public class Board extends JPanel{
|
|||||||
private void calculateCurrentScore() {
|
private void calculateCurrentScore() {
|
||||||
scoreManager.updateScore(); // Met à jour le score
|
scoreManager.updateScore(); // Met à jour le score
|
||||||
currentScore = scoreManager.getCurrentScore(); // Récupère le score actuel
|
currentScore = scoreManager.getCurrentScore(); // Récupère le score actuel
|
||||||
|
scoreDisplay.setScore(currentScore); // Met à jour l'affichage du score
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCurrentScore() {
|
public int getCurrentScore() {
|
||||||
@@ -421,6 +430,11 @@ public class Board extends JPanel{
|
|||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
Graphics2D g2d = (Graphics2D) 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
|
// Appliquer l'échelle de zoom et le déplacement
|
||||||
g2d.scale(zoomFactor, zoomFactor); // Appliquer le zoom
|
g2d.scale(zoomFactor, zoomFactor); // Appliquer le zoom
|
||||||
g2d.translate(offsetX / zoomFactor, offsetY / zoomFactor); // Appliquer le déplacement (en tenant compte du 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é
|
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) {
|
if (nextTile != null) {
|
||||||
// Calculer la position correcte de la nextTile (en tenant compte du zoom et des décalages)
|
// 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
|
int nextTileX = 0; // Position x dans l'espace global
|
||||||
|
32
src/fr/monkhanny/dorfromantik/game/ScoreDisplay.java
Normal file
32
src/fr/monkhanny/dorfromantik/game/ScoreDisplay.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user