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.GameMouseWheelListener;
|
||||
import fr.monkhanny.dorfromantik.Options;
|
||||
import fr.monkhanny.dorfromantik.enums.Biome;
|
||||
import fr.monkhanny.dorfromantik.enums.TileOrientation;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -21,6 +23,9 @@ import java.awt.Graphics2D;
|
||||
// TEMPORAIRE :
|
||||
import java.awt.event.MouseMotionAdapter; // Import pour MouseMotionAdapter
|
||||
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 offsetY = 0; // Décalage vertical du plateau
|
||||
private Tile nextTile;
|
||||
private Point mousePosition = null;
|
||||
private Map<Biome, BiomeGroup> biomeGroups;
|
||||
private Point mousePosition;
|
||||
|
||||
// Constructeur avec seed
|
||||
public Board(JFrame gameFrame, long seed) {
|
||||
this.gameFrame = gameFrame;
|
||||
this.tiles = new ArrayList<>();
|
||||
this.biomeGroups = new HashMap<>();
|
||||
this.availablePositions = new ArrayList<>();
|
||||
this.random = new Random(seed);
|
||||
this.game = new Game(seed);
|
||||
|
||||
for (Biome biome : Biome.values()) {
|
||||
biomeGroups.put(biome, new BiomeGroup());
|
||||
}
|
||||
|
||||
// Placer une tuile centrale au démarrage
|
||||
initializeCentralTile();
|
||||
|
||||
@@ -188,7 +199,68 @@ public class Board extends JPanel{
|
||||
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; }
|
||||
|
||||
|
@@ -9,9 +9,9 @@ import javax.swing.*;
|
||||
*/
|
||||
public class Cell extends JComponent {
|
||||
private Board board; // Le plateau de jeu auquel cette cellule appartient
|
||||
private int x; // Coordonnée x du centre de la cellule
|
||||
private 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 x; // Coordonnée x du centre de la cellule
|
||||
public int y; // Coordonnée y du centre de la cellule
|
||||
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.
|
||||
|
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<>();
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
super(board, x, y, radius);
|
||||
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) {
|
||||
super(board, x, y, radius);
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
TileOrientation[] sides = TileOrientation.values();
|
||||
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() {
|
||||
Game game = this.getBoard().getGame();
|
||||
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) {
|
||||
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() {
|
||||
TileOrientation[] sides = TileOrientation.values();
|
||||
|
||||
@@ -150,11 +105,7 @@ public class Tile extends Cell {
|
||||
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() {
|
||||
Biome[] biomes = new Biome[TileOrientation.values().length];
|
||||
for (TileOrientation side : TileOrientation.values()) {
|
||||
@@ -163,11 +114,7 @@ public class Tile extends Cell {
|
||||
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) {
|
||||
TileOrientation[] sides = TileOrientation.values();
|
||||
HashMap<TileOrientation, Biome> newBiomesMap = new HashMap<>();
|
||||
@@ -182,12 +129,7 @@ public class Tile extends Cell {
|
||||
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) {
|
||||
for (TileOrientation side : TileOrientation.values()) {
|
||||
if (this.getBiome(side) == biome) {
|
||||
@@ -197,13 +139,23 @@ public class Tile extends Cell {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère le côté de la tuile en fonction de la position (x, y) relative.
|
||||
*
|
||||
* @param x La position x
|
||||
* @param y La position y
|
||||
* @return Le côté de la tuile correspondant
|
||||
*/
|
||||
public boolean isAdjacentTo(Tile otherTile) {
|
||||
// Get the radius of the tiles
|
||||
int tileRadius = this.getRadius();
|
||||
|
||||
// Compute the distance between the center of this tile and the other tile
|
||||
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) {
|
||||
int radius = this.getRadius();
|
||||
TileOrientation[] sides = TileOrientation.values();
|
||||
@@ -230,15 +182,7 @@ public class Tile extends Cell {
|
||||
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) {
|
||||
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
|
||||
paintTile(g2d, scale);
|
||||
|
||||
// Restauration de l'état graphique (annule le déplacement)
|
||||
g2d.dispose();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user