Ajout d'un visualisateur de tuiles restantes
This commit is contained in:
@@ -58,7 +58,7 @@ public class Options {
|
|||||||
|
|
||||||
public static boolean AUTO_FOCUS = false;
|
public static boolean AUTO_FOCUS = false;
|
||||||
|
|
||||||
public static final int MAX_TILE_NUMBER = 5;
|
public static final int MAX_TILE_NUMBER = 50;
|
||||||
|
|
||||||
public static boolean FULL_SCREEN = false;
|
public static boolean FULL_SCREEN = false;
|
||||||
|
|
||||||
|
@@ -49,6 +49,8 @@ public class Board extends JPanel{
|
|||||||
private ScoreManager scoreManager;
|
private ScoreManager scoreManager;
|
||||||
private int currentScore;
|
private int currentScore;
|
||||||
private Database database;
|
private Database database;
|
||||||
|
private RemainingTilesIndicator remainingTilesIndicator;
|
||||||
|
|
||||||
|
|
||||||
// Constructeur avec seed
|
// Constructeur avec seed
|
||||||
public Board(JFrame gameFrame, long seed) {
|
public Board(JFrame gameFrame, long seed) {
|
||||||
@@ -85,6 +87,8 @@ 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.addMouseMotionListener(new MouseMotionAdapter() {
|
this.addMouseMotionListener(new MouseMotionAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(java.awt.event.MouseEvent e) {
|
public void mouseMoved(java.awt.event.MouseEvent e) {
|
||||||
@@ -322,6 +326,8 @@ public class Board extends JPanel{
|
|||||||
if (tiles.size() < Options.MAX_TILE_NUMBER) {
|
if (tiles.size() < Options.MAX_TILE_NUMBER) {
|
||||||
// Vérifiez si la nextTile existe, sinon on ignore
|
// Vérifiez si la nextTile existe, sinon on ignore
|
||||||
if (nextTile != null) {
|
if (nextTile != null) {
|
||||||
|
remainingTilesIndicator.setRemainingTiles(Options.MAX_TILE_NUMBER - 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);
|
||||||
addTile(nextTile); // Ajoute la nextTile au tableau des tuiles
|
addTile(nextTile); // Ajoute la nextTile au tableau des tuiles
|
||||||
@@ -456,6 +462,11 @@ public class Board extends JPanel{
|
|||||||
// Dessiner la nextTile à sa position d'origine (0,0)
|
// Dessiner la nextTile à sa position d'origine (0,0)
|
||||||
nextTile.drawTileAt(g, nextTileX, nextTileY, 1f);
|
nextTile.drawTileAt(g, nextTileX, nextTileY, 1f);
|
||||||
|
|
||||||
|
int indicatorX = getWidth() - 70; // Position x de l'indicateur
|
||||||
|
int indicatorY = getHeight() - 670; // Positionner la pile près du bas
|
||||||
|
|
||||||
|
remainingTilesIndicator.draw(g2d, indicatorX, indicatorY);
|
||||||
|
|
||||||
// Rétablir les transformations pour les autres éléments (tuiles existantes, etc.)
|
// Rétablir les transformations pour les autres éléments (tuiles existantes, etc.)
|
||||||
g2d.translate(offsetX / zoomFactor, offsetY / zoomFactor); // Re-appliquer le décalage
|
g2d.translate(offsetX / zoomFactor, offsetY / zoomFactor); // Re-appliquer le décalage
|
||||||
g2d.scale(zoomFactor, zoomFactor); // Re-appliquer le zoom
|
g2d.scale(zoomFactor, zoomFactor); // Re-appliquer le zoom
|
||||||
|
@@ -0,0 +1,91 @@
|
|||||||
|
package fr.monkhanny.dorfromantik.game;
|
||||||
|
|
||||||
|
import java.awt.BasicStroke;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Polygon;
|
||||||
|
import java.awt.RenderingHints;
|
||||||
|
import java.awt.RadialGradientPaint;
|
||||||
|
|
||||||
|
public class RemainingTilesIndicator {
|
||||||
|
private int remainingTiles;
|
||||||
|
private int maxTiles;
|
||||||
|
private final int maxHeight;
|
||||||
|
|
||||||
|
public RemainingTilesIndicator(int maxTiles) {
|
||||||
|
this.maxTiles = maxTiles;
|
||||||
|
this.remainingTiles = maxTiles;
|
||||||
|
this.maxHeight = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemainingTiles(int remainingTiles) {
|
||||||
|
this.remainingTiles = Math.max(0, Math.min(remainingTiles, maxTiles));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void draw(Graphics g, int x, int y) {
|
||||||
|
Graphics2D g2d = (Graphics2D) g;
|
||||||
|
int tileWidth = 50; // Largeur de l'assiette
|
||||||
|
int tileHeight = 12; // Hauteur de l'assiette
|
||||||
|
int gap = 1; // Écart entre les tuiles
|
||||||
|
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
g2d.setStroke(new BasicStroke(2)); // Appliquer un contour légèrement plus épais
|
||||||
|
|
||||||
|
// Calcul de la hauteur totale de la pile
|
||||||
|
int totalHeight = maxTiles * (tileHeight + gap);
|
||||||
|
|
||||||
|
// Dessiner chaque hexagone, à partir du bas de la fenêtre
|
||||||
|
for (int i = 0; i < remainingTiles; i++) {
|
||||||
|
int currentY = y + (maxTiles - remainingTiles + i) * (tileHeight + gap); // Positionnement fixe
|
||||||
|
|
||||||
|
Polygon polygon = createHexagon(x, currentY, tileWidth, tileHeight); // Créer un hexagone
|
||||||
|
|
||||||
|
// Appliquer un dégradé radial avec des couleurs bleu moyen et plus foncé
|
||||||
|
RadialGradientPaint gradient = new RadialGradientPaint(
|
||||||
|
x + tileWidth / 2, currentY + tileHeight / 2, tileWidth / 2,
|
||||||
|
new float[]{0.0f, 1.0f}, new Color[]{new Color(70, 130, 180), new Color(30, 60, 100)} // Bleu moyen au bleu foncé
|
||||||
|
);
|
||||||
|
g2d.setPaint(gradient);
|
||||||
|
g2d.fillPolygon(polygon); // Remplir avec le dégradé
|
||||||
|
|
||||||
|
// Contour solide autour de l'hexagone, en bleu foncé
|
||||||
|
g2d.setColor(new Color(10, 30, 60)); // Contour bleu foncé
|
||||||
|
g2d.drawPolygon(polygon); // Dessiner le contour
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affichage du nombre de tuiles restantes en haut de la pile
|
||||||
|
g2d.setColor(Color.BLACK); // Couleur du texte
|
||||||
|
g2d.setFont(g2d.getFont().deriveFont(22f)); // Taille de la police
|
||||||
|
String text = String.valueOf(remainingTiles); // Nombre de tuiles restantes
|
||||||
|
int textWidth = g2d.getFontMetrics().stringWidth(text); // Largeur du texte
|
||||||
|
int textX = x + (tileWidth - textWidth) / 2; // Centrer le texte horizontalement
|
||||||
|
int textY = y + (maxTiles - remainingTiles) * (tileHeight + gap) - 10; // Position juste au-dessus du premier hexagone
|
||||||
|
|
||||||
|
g2d.drawString(text, textX, textY); // Dessiner le texte
|
||||||
|
|
||||||
|
g2d.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotalHeight() {
|
||||||
|
int tileHeight = 12; // Hauteur de l'assiette
|
||||||
|
int gap = 1; // Espace entre les tuiles
|
||||||
|
return remainingTiles * (tileHeight + gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Méthode pour créer un hexagone
|
||||||
|
private Polygon createHexagon(int x, int y, int width, int height) {
|
||||||
|
Polygon hexagon = new Polygon();
|
||||||
|
|
||||||
|
// Calcul des 6 points de l'hexagone
|
||||||
|
hexagon.addPoint(x, y); // Point gauche supérieur
|
||||||
|
hexagon.addPoint(x + width / 2, y - height / 2); // Point supérieur central
|
||||||
|
hexagon.addPoint(x + width, y); // Point droit supérieur
|
||||||
|
hexagon.addPoint(x + width, y + height); // Point droit inférieur
|
||||||
|
hexagon.addPoint(x + width / 2, y + height + height / 2); // Point inférieur central
|
||||||
|
hexagon.addPoint(x, y + height); // Point gauche inférieur
|
||||||
|
|
||||||
|
return hexagon;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user