Amélioration
This commit is contained in:
@@ -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
|
||||
|
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