Sauvegarde du score
This commit is contained in:
29
TestV2/src/fr/monkhanny/dorfromantik/game/BiomeGroup.java
Normal file
29
TestV2/src/fr/monkhanny/dorfromantik/game/BiomeGroup.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package fr.monkhanny.dorfromantik.game;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class BiomeGroup {
|
||||||
|
private List<Pocket> pockets;
|
||||||
|
|
||||||
|
public BiomeGroup() {
|
||||||
|
pockets = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPocket(Pocket pocket) {
|
||||||
|
pockets.add(pocket);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Pocket> getPockets() {
|
||||||
|
return pockets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int calculateTotalScore() {
|
||||||
|
int totalScore = 0;
|
||||||
|
for (Pocket pocket : pockets) {
|
||||||
|
totalScore += pocket.calculateScore();
|
||||||
|
}
|
||||||
|
return totalScore;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@@ -7,6 +7,8 @@ import fr.monkhanny.dorfromantik.listeners.GameSpaceKeyListener;
|
|||||||
import fr.monkhanny.dorfromantik.listeners.GameMouseClickListener;
|
import fr.monkhanny.dorfromantik.listeners.GameMouseClickListener;
|
||||||
import fr.monkhanny.dorfromantik.listeners.GameMouseWheelListener;
|
import fr.monkhanny.dorfromantik.listeners.GameMouseWheelListener;
|
||||||
import fr.monkhanny.dorfromantik.Options;
|
import fr.monkhanny.dorfromantik.Options;
|
||||||
|
import fr.monkhanny.dorfromantik.enums.Biome;
|
||||||
|
import fr.monkhanny.dorfromantik.enums.TileOrientation;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -21,6 +23,9 @@ import java.awt.Graphics2D;
|
|||||||
// TEMPORAIRE :
|
// TEMPORAIRE :
|
||||||
import java.awt.event.MouseMotionAdapter; // Import pour MouseMotionAdapter
|
import java.awt.event.MouseMotionAdapter; // Import pour MouseMotionAdapter
|
||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.awt.Point;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,16 +42,22 @@ public class Board extends JPanel{
|
|||||||
private int offsetX = 0; // Décalage horizontal du plateau
|
private int offsetX = 0; // Décalage horizontal du plateau
|
||||||
private int offsetY = 0; // Décalage vertical du plateau
|
private int offsetY = 0; // Décalage vertical du plateau
|
||||||
private Tile nextTile;
|
private Tile nextTile;
|
||||||
private Point mousePosition = null;
|
private Map<Biome, BiomeGroup> biomeGroups;
|
||||||
|
private Point mousePosition;
|
||||||
|
|
||||||
// Constructeur avec seed
|
// Constructeur avec seed
|
||||||
public Board(JFrame gameFrame, long seed) {
|
public Board(JFrame gameFrame, long seed) {
|
||||||
this.gameFrame = gameFrame;
|
this.gameFrame = gameFrame;
|
||||||
this.tiles = new ArrayList<>();
|
this.tiles = new ArrayList<>();
|
||||||
|
this.biomeGroups = new HashMap<>();
|
||||||
this.availablePositions = new ArrayList<>();
|
this.availablePositions = new ArrayList<>();
|
||||||
this.random = new Random(seed);
|
this.random = new Random(seed);
|
||||||
this.game = new Game(seed);
|
this.game = new Game(seed);
|
||||||
|
|
||||||
|
for (Biome biome : Biome.values()) {
|
||||||
|
biomeGroups.put(biome, new BiomeGroup());
|
||||||
|
}
|
||||||
|
|
||||||
// Placer une tuile centrale au démarrage
|
// Placer une tuile centrale au démarrage
|
||||||
initializeCentralTile();
|
initializeCentralTile();
|
||||||
|
|
||||||
@@ -188,7 +199,68 @@ public class Board extends JPanel{
|
|||||||
centralTile.setPosition(centerX, centerY);
|
centralTile.setPosition(centerX, centerY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addTile(Tile tile) { tiles.add(tile);}
|
public void addTile(Tile tile) {
|
||||||
|
tiles.add(tile);
|
||||||
|
updatePockets(tile);
|
||||||
|
displayCurrentScore();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updatePockets(Tile newTile) {
|
||||||
|
for (TileOrientation orientation : TileOrientation.values()) {
|
||||||
|
Biome biome = newTile.getBiome(orientation);
|
||||||
|
BiomeGroup biomeGroup = biomeGroups.get(biome);
|
||||||
|
|
||||||
|
// Vérifier si la nouvelle tuile peut être connectée à une poche existante
|
||||||
|
Pocket connectedPocket = null;
|
||||||
|
for (Pocket pocket : biomeGroup.getPockets()) {
|
||||||
|
if (isConnectedToPocket(newTile, pocket)) {
|
||||||
|
connectedPocket = pocket;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connectedPocket != null) {
|
||||||
|
// Connecte la tuile à une poche existante
|
||||||
|
connectedPocket.addTile(newTile);
|
||||||
|
} else {
|
||||||
|
// Crée une nouvelle poche pour ce biome
|
||||||
|
Pocket newPocket = new Pocket(biome);
|
||||||
|
newPocket.addTile(newTile);
|
||||||
|
biomeGroup.addPocket(newPocket);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Méthode pour vérifier si une tuile est connectée à une poche existante
|
||||||
|
private boolean isConnectedToPocket(Tile tile, Pocket pocket) {
|
||||||
|
for (Tile connectedTile : pocket.getTiles()) {
|
||||||
|
if (areTilesConnected(tile, connectedTile)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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()) {
|
||||||
|
if (tile1.getBiome(orientation).equals(tile2.getBiome(orientation))) {
|
||||||
|
// Vérifier si les tuiles sont adjacentes (logique à adapter selon vos besoins)
|
||||||
|
// Exemple : si elles partagent un côté commun
|
||||||
|
return tile1.isAdjacentTo(tile2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche le score actuel
|
||||||
|
private void displayCurrentScore() {
|
||||||
|
int totalScore = 0;
|
||||||
|
for (BiomeGroup group : biomeGroups.values()) {
|
||||||
|
totalScore += group.calculateTotalScore();
|
||||||
|
}
|
||||||
|
System.out.println("Score actuel : " + totalScore);
|
||||||
|
}
|
||||||
|
|
||||||
public Random getRandom() { return random; }
|
public Random getRandom() { return random; }
|
||||||
|
|
||||||
|
@@ -9,9 +9,9 @@ import javax.swing.*;
|
|||||||
*/
|
*/
|
||||||
public class Cell extends JComponent {
|
public class Cell extends JComponent {
|
||||||
private Board board; // Le plateau de jeu auquel cette cellule appartient
|
private Board board; // Le plateau de jeu auquel cette cellule appartient
|
||||||
private int x; // Coordonnée x du centre de la cellule
|
public int x; // Coordonnée x du centre de la cellule
|
||||||
private int y; // Coordonnée y du centre de la cellule
|
public int y; // Coordonnée y du centre de la cellule
|
||||||
private int radius; // Rayon de la cellule (si on parle d'un hexagone, c'est le rayon de l'hexagone)
|
public int radius; // Rayon de la cellule (si on parle d'un hexagone, c'est le rayon de l'hexagone)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructeur de la classe Cell.
|
* Constructeur de la classe Cell.
|
||||||
|
43
TestV2/src/fr/monkhanny/dorfromantik/game/Pocket.java
Normal file
43
TestV2/src/fr/monkhanny/dorfromantik/game/Pocket.java
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package fr.monkhanny.dorfromantik.game;
|
||||||
|
|
||||||
|
import fr.monkhanny.dorfromantik.enums.Biome;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class Pocket {
|
||||||
|
private Biome biome;
|
||||||
|
private Set<Tile> tiles; // Ensemble des tuiles de la poche
|
||||||
|
|
||||||
|
public Pocket(Biome biome) {
|
||||||
|
this.biome = biome;
|
||||||
|
this.tiles = new HashSet<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTile(Tile tile) {
|
||||||
|
tiles.add(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsTile(Tile tile) {
|
||||||
|
return tiles.contains(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Biome getBiome() {
|
||||||
|
return biome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return tiles.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int calculateScore() {
|
||||||
|
// Calcul du score basé sur la taille de la poche
|
||||||
|
return getSize() * getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Tile> getTiles() {
|
||||||
|
return new ArrayList<>(tiles);
|
||||||
|
}
|
||||||
|
}
|
@@ -18,15 +18,7 @@ public class Tile extends Cell {
|
|||||||
|
|
||||||
private HashMap<TileOrientation, Biome> sideBiomes = new HashMap<>();
|
private HashMap<TileOrientation, Biome> sideBiomes = new HashMap<>();
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur d'une tuile avec des biomes spécifiques pour chaque côté.
|
|
||||||
*
|
|
||||||
* @param board Le plateau de jeu
|
|
||||||
* @param x La position x du centre de la tuile
|
|
||||||
* @param y La position y du centre de la tuile
|
|
||||||
* @param radius Le rayon de la tuile
|
|
||||||
* @param biomes Biomes associés aux côtés de la tuile
|
|
||||||
*/
|
|
||||||
public Tile(Board board, int x, int y, int radius, Biome... biomes) {
|
public Tile(Board board, int x, int y, int radius, Biome... biomes) {
|
||||||
super(board, x, y, radius);
|
super(board, x, y, radius);
|
||||||
TileOrientation[] sides = TileOrientation.values();
|
TileOrientation[] sides = TileOrientation.values();
|
||||||
@@ -35,48 +27,23 @@ public class Tile extends Cell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur d'une tuile avec des biomes aléatoires.
|
|
||||||
*
|
|
||||||
* @param board Le plateau de jeu
|
|
||||||
* @param x La position x du centre de la tuile
|
|
||||||
* @param y La position y du centre de la tuile
|
|
||||||
* @param radius Le rayon de la tuile
|
|
||||||
*/
|
|
||||||
public Tile(Board board, int x, int y, int radius) {
|
public Tile(Board board, int x, int y, int radius) {
|
||||||
super(board, x, y, radius);
|
super(board, x, y, radius);
|
||||||
this.assignRandomBiomes();
|
this.assignRandomBiomes();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur d'une tuile avec des biomes spécifiques pour chaque côté
|
|
||||||
* à partir d'un centre donné.
|
|
||||||
*
|
|
||||||
* @param board Le plateau de jeu
|
|
||||||
* @param center Le centre de la tuile
|
|
||||||
* @param radius Le rayon de la tuile
|
|
||||||
* @param biomes Biomes associés aux côtés de la tuile
|
|
||||||
*/
|
|
||||||
public Tile(Board board, Point center, int radius, Biome... biomes) {
|
public Tile(Board board, Point center, int radius, Biome... biomes) {
|
||||||
this(board, center.x, center.y, radius, biomes);
|
this(board, center.x, center.y, radius, biomes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur d'une tuile avec des biomes aléatoires à partir d'un centre donné.
|
|
||||||
*
|
|
||||||
* @param board Le plateau de jeu
|
|
||||||
* @param center Le centre de la tuile
|
|
||||||
* @param radius Le rayon de la tuile
|
|
||||||
*/
|
|
||||||
public Tile(Board board, Point center, int radius) {
|
public Tile(Board board, Point center, int radius) {
|
||||||
this(board, center.x, center.y, radius);
|
this(board, center.x, center.y, radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Définit les biomes pour cette tuile.
|
|
||||||
*
|
|
||||||
* @param biomes Biomes associés aux côtés
|
|
||||||
*/
|
|
||||||
public void setBiomes(Biome... biomes) {
|
public void setBiomes(Biome... biomes) {
|
||||||
TileOrientation[] sides = TileOrientation.values();
|
TileOrientation[] sides = TileOrientation.values();
|
||||||
for (int i = 0; i < sides.length; i++) {
|
for (int i = 0; i < sides.length; i++) {
|
||||||
@@ -84,9 +51,7 @@ public class Tile extends Cell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Assigne des biomes aléatoires aux côtés de la tuile.
|
|
||||||
*/
|
|
||||||
public void assignRandomBiomes() {
|
public void assignRandomBiomes() {
|
||||||
Game game = this.getBoard().getGame();
|
Game game = this.getBoard().getGame();
|
||||||
Biome[] biomes = Biome.values();
|
Biome[] biomes = Biome.values();
|
||||||
@@ -108,21 +73,11 @@ public class Tile extends Cell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Récupère le biome associé à un côté donné.
|
|
||||||
*
|
|
||||||
* @param side Le côté de la tuile
|
|
||||||
* @return Le biome associé au côté
|
|
||||||
*/
|
|
||||||
public Biome getBiome(TileOrientation side) {
|
public Biome getBiome(TileOrientation side) {
|
||||||
return this.sideBiomes.get(side);
|
return this.sideBiomes.get(side);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Récupère le biome dominant de la tuile, basé sur la majorité des côtés.
|
|
||||||
*
|
|
||||||
* @return Le biome dominant
|
|
||||||
*/
|
|
||||||
private Biome getDominantBiome() {
|
private Biome getDominantBiome() {
|
||||||
TileOrientation[] sides = TileOrientation.values();
|
TileOrientation[] sides = TileOrientation.values();
|
||||||
|
|
||||||
@@ -150,11 +105,7 @@ public class Tile extends Cell {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Récupère les biomes associés à chaque côté de la tuile.
|
|
||||||
*
|
|
||||||
* @return Tableau des biomes de la tuile
|
|
||||||
*/
|
|
||||||
public Biome[] getBiomes() {
|
public Biome[] getBiomes() {
|
||||||
Biome[] biomes = new Biome[TileOrientation.values().length];
|
Biome[] biomes = new Biome[TileOrientation.values().length];
|
||||||
for (TileOrientation side : TileOrientation.values()) {
|
for (TileOrientation side : TileOrientation.values()) {
|
||||||
@@ -163,11 +114,7 @@ public class Tile extends Cell {
|
|||||||
return biomes;
|
return biomes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Effectue une rotation de la tuile dans le sens horaire ou antihoraire.
|
|
||||||
*
|
|
||||||
* @param clockwise Si true, rotation horaire; sinon antihoraire
|
|
||||||
*/
|
|
||||||
public void rotate(boolean clockwise) {
|
public void rotate(boolean clockwise) {
|
||||||
TileOrientation[] sides = TileOrientation.values();
|
TileOrientation[] sides = TileOrientation.values();
|
||||||
HashMap<TileOrientation, Biome> newBiomesMap = new HashMap<>();
|
HashMap<TileOrientation, Biome> newBiomesMap = new HashMap<>();
|
||||||
@@ -182,12 +129,7 @@ public class Tile extends Cell {
|
|||||||
this.repaint();
|
this.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Vérifie si un biome spécifique existe sur la tuile.
|
|
||||||
*
|
|
||||||
* @param biome Le biome à vérifier
|
|
||||||
* @return true si le biome est présent, false sinon
|
|
||||||
*/
|
|
||||||
public boolean containsBiome(Biome biome) {
|
public boolean containsBiome(Biome biome) {
|
||||||
for (TileOrientation side : TileOrientation.values()) {
|
for (TileOrientation side : TileOrientation.values()) {
|
||||||
if (this.getBiome(side) == biome) {
|
if (this.getBiome(side) == biome) {
|
||||||
@@ -197,13 +139,23 @@ public class Tile extends Cell {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public boolean isAdjacentTo(Tile otherTile) {
|
||||||
* Récupère le côté de la tuile en fonction de la position (x, y) relative.
|
// Get the radius of the tiles
|
||||||
*
|
int tileRadius = this.getRadius();
|
||||||
* @param x La position x
|
|
||||||
* @param y La position y
|
// Compute the distance between the center of this tile and the other tile
|
||||||
* @return Le côté de la tuile correspondant
|
int deltaX = this.getX() - otherTile.getX();
|
||||||
*/
|
int deltaY = this.getY() - otherTile.getY();
|
||||||
|
|
||||||
|
// Calculate the Euclidean distance between the two tiles
|
||||||
|
double distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
|
||||||
|
|
||||||
|
// In a hexagonal grid, two tiles are adjacent if their distance is equal to the diameter (2 * radius)
|
||||||
|
return distance <= (2 * tileRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private TileOrientation determineSide(int x, int y) {
|
private TileOrientation determineSide(int x, int y) {
|
||||||
int radius = this.getRadius();
|
int radius = this.getRadius();
|
||||||
TileOrientation[] sides = TileOrientation.values();
|
TileOrientation[] sides = TileOrientation.values();
|
||||||
@@ -230,15 +182,7 @@ public class Tile extends Cell {
|
|||||||
return floorBiome.equals(dominantBiome) ? sides[ceilSide] : sides[floorSide];
|
return floorBiome.equals(dominantBiome) ? sides[ceilSide] : sides[floorSide];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Dessine une rangée d'hexagones sur la tuile.
|
|
||||||
*
|
|
||||||
* @param g2d Le contexte graphique
|
|
||||||
* @param rowX Position X de la rangée
|
|
||||||
* @param rowY Position Y de la rangée
|
|
||||||
* @param radius Rayon des hexagones
|
|
||||||
* @param rowLength Nombre d'hexagones dans la rangée
|
|
||||||
*/
|
|
||||||
private void drawHexagonRow(Graphics2D g2d, double rowX, double rowY, double radius, int rowLength) {
|
private void drawHexagonRow(Graphics2D g2d, double rowX, double rowY, double radius, int rowLength) {
|
||||||
int gRadius = this.getRadius();
|
int gRadius = this.getRadius();
|
||||||
|
|
||||||
@@ -268,8 +212,6 @@ public class Tile extends Cell {
|
|||||||
|
|
||||||
// Appel de la méthode de dessin de la tuile à la nouvelle position
|
// Appel de la méthode de dessin de la tuile à la nouvelle position
|
||||||
paintTile(g2d, scale);
|
paintTile(g2d, scale);
|
||||||
|
|
||||||
// Restauration de l'état graphique (annule le déplacement)
|
|
||||||
g2d.dispose();
|
g2d.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user