ajout ui
This commit is contained in:
parent
abc4da1bed
commit
d5825ab8f5
bin
Music
controller
CameraController.classGameContext.classGameController.classHexagonMouseListener.classMouseDragHandler.classMousePressHandler.classResListener.class
main
view
src/main
BIN
bin/Music/audio.wav
Normal file
BIN
bin/Music/audio.wav
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/view/img/D.png
Normal file
BIN
bin/view/img/D.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 27 KiB |
BIN
bin/view/img/bg.png
Normal file
BIN
bin/view/img/bg.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 322 KiB |
BIN
bin/view/img/quit.png
Normal file
BIN
bin/view/img/quit.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 36 KiB |
@ -1,10 +1,52 @@
|
||||
package main;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
import view.GameView;
|
||||
import model.MenuModel;
|
||||
import controller.*;
|
||||
import view.*;
|
||||
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
import javax.sound.sampled.Clip;
|
||||
import javax.swing.*;
|
||||
import java.net.URL;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> new GameView());
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
MenuModel model = new MenuModel();
|
||||
MenuView view = new MenuView();
|
||||
|
||||
JFrame frame = new JFrame(" Menu");
|
||||
frame.setSize(1500, 750);
|
||||
frame.setLocation(0, 0);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.add(view);
|
||||
|
||||
// Créer le contrôleur
|
||||
new MenuController(model, view);
|
||||
|
||||
frame.setVisible(true);
|
||||
|
||||
// Chargement de la musique
|
||||
PlayMusic("/Music/audio.wav");
|
||||
});
|
||||
}
|
||||
|
||||
public static void PlayMusic(String location){
|
||||
try {
|
||||
// Utilisation de getResource pour charger l'audio
|
||||
URL url = Main.class.getResource(location);
|
||||
|
||||
if (url != null) {
|
||||
AudioInputStream audioInput = AudioSystem.getAudioInputStream(url);
|
||||
Clip clip = AudioSystem.getClip();
|
||||
clip.open(audioInput);
|
||||
clip.start();
|
||||
} else {
|
||||
System.out.println("fichier introuvable");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,54 +0,0 @@
|
||||
import model.*;
|
||||
import controller.*;
|
||||
import view.*;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
import javax.sound.sampled.Clip;
|
||||
import javax.swing.*;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
MenuModel model = new MenuModel();
|
||||
MenuView view = new MenuView();
|
||||
|
||||
|
||||
JFrame frame = new JFrame(" Menu");
|
||||
frame.setSize(1500, 750);
|
||||
frame.setLocation(0, 0);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.add(view);
|
||||
|
||||
// Créer le contrôleur
|
||||
new MenuController(model, view);
|
||||
|
||||
frame.setVisible(true);
|
||||
String filepath = "Music/audio.wav";
|
||||
PlayMusic(filepath);
|
||||
});
|
||||
}
|
||||
|
||||
public static void PlayMusic(String location){
|
||||
try {
|
||||
// System.out.println(location);
|
||||
File musicPath = new File(location);
|
||||
|
||||
if(musicPath.exists()){
|
||||
|
||||
AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
|
||||
Clip clip = AudioSystem.getClip();
|
||||
clip.open(audioInput);
|
||||
clip.start();
|
||||
|
||||
|
||||
} else {
|
||||
System.out.println("fichier introuvable");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -8,12 +8,12 @@ public class CameraController {
|
||||
private Point mouseDragStart = null; // Stocke la position de départ du clic droit
|
||||
private Point viewOffset = new Point(0, 0); // Stocke le décalage actuel de la vue
|
||||
private JPanel gridPanel;
|
||||
private GameContext context; // Ajout de GameContext
|
||||
private GameContext context;
|
||||
|
||||
public CameraController(JPanel gridPanel, GameContext context) {
|
||||
this.gridPanel = gridPanel;
|
||||
this.context = context; // Initialisation du contexte
|
||||
setupMouseDragToMove();
|
||||
this.context = context;
|
||||
setupMouseDragToMove(); // Initialise les écouteurs pour gérer le déplacement
|
||||
}
|
||||
|
||||
public Point getViewOffset() {
|
||||
@ -21,15 +21,14 @@ public class CameraController {
|
||||
}
|
||||
|
||||
public void updateViewOffset(int deltaX, int deltaY) {
|
||||
viewOffset.translate(deltaX, deltaY); // Mettre à jour le décalage de la vue
|
||||
gridPanel.setLocation(viewOffset); // Déplacer le panneau en fonction du décalage
|
||||
viewOffset.translate(deltaX, deltaY);
|
||||
gridPanel.setLocation(viewOffset);
|
||||
}
|
||||
|
||||
private void setupMouseDragToMove() {
|
||||
// Utilisation de GameContext dans les gestionnaires de la souris
|
||||
MousePressHandler mousePressHandler = new MousePressHandler(this, context);
|
||||
MouseDragHandler mouseDragHandler = new MouseDragHandler(this, context);
|
||||
|
||||
|
||||
gridPanel.addMouseListener(mousePressHandler);
|
||||
gridPanel.addMouseMotionListener(mouseDragHandler);
|
||||
}
|
||||
|
@ -1,21 +1,39 @@
|
||||
package controller;
|
||||
|
||||
import view.HexagonTile;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class GameContext {
|
||||
public Map<Point, HexagonTile> hexagonMap;
|
||||
public GameController gameController;
|
||||
public Set<Point> availablePositions;
|
||||
public CameraController cameraController;
|
||||
private Map<Point, HexagonTile> hexagonMap; // Stocke la grille
|
||||
private Set<Point> availablePositions; // Positions libres pour les placeholders
|
||||
private Point offset; // Offset global pour la grille
|
||||
|
||||
public GameContext(Map<Point, HexagonTile> hexagonMap, GameController gameController,
|
||||
Set<Point> availablePositions, CameraController cameraController) {
|
||||
this.hexagonMap = hexagonMap;
|
||||
this.gameController = gameController;
|
||||
this.availablePositions = availablePositions;
|
||||
this.cameraController = cameraController;
|
||||
public GameContext() {
|
||||
this.hexagonMap = new HashMap<>();
|
||||
this.availablePositions = new HashSet<>();
|
||||
this.offset = new Point(0, 0); // Initialisation de l’offset à (0, 0)
|
||||
}
|
||||
|
||||
// Getters pour la grille, les positions et l'offset
|
||||
public Map<Point, HexagonTile> getHexagonMap() {
|
||||
return hexagonMap;
|
||||
}
|
||||
|
||||
public Set<Point> getAvailablePositions() {
|
||||
return availablePositions;
|
||||
}
|
||||
|
||||
public Point getOffset() {
|
||||
return offset;
|
||||
}
|
||||
|
||||
// Méthode pour mettre à jour l'offset de la grille
|
||||
public void updateOffset(int deltaX, int deltaY) {
|
||||
offset.translate(deltaX, deltaY);
|
||||
}
|
||||
}
|
||||
|
@ -3,98 +3,65 @@ package controller;
|
||||
import model.Tile;
|
||||
import view.HexagonTile;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
public class GameController {
|
||||
private Map<Point, HexagonTile> hexagonMap;
|
||||
private Set<Point> availablePositions;
|
||||
private Tile nextTile;
|
||||
private HexagonTile nextTilePreview;
|
||||
private Map<Point, HexagonTile> hexagonMap; // Carte pour stocker les tuiles par position
|
||||
private Set<Point> availablePositions; // Ensemble pour suivre les positions disponibles
|
||||
private JPanel gridPanel;
|
||||
|
||||
public GameController(Map<Point, HexagonTile> hexagonMap, Set<Point> availablePositions, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) {
|
||||
this.hexagonMap = hexagonMap;
|
||||
this.availablePositions = availablePositions;
|
||||
public GameController(GameContext gameContext, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) {
|
||||
this.gridPanel = gridPanel;
|
||||
this.nextTile = nextTile;
|
||||
this.nextTilePreview = nextTilePreview;
|
||||
|
||||
// Initialiser hexagonMap et availablePositions
|
||||
this.hexagonMap = new HashMap<>();
|
||||
this.availablePositions = new HashSet<>();
|
||||
}
|
||||
|
||||
public void placeInitialTile(Point position, CameraController cameraController) {
|
||||
addHexagonTile(position, gridPanel, 50, cameraController); // Utilise CameraController
|
||||
public void placeInitialTile(Point position, CameraController cameraController, Tile tile) {
|
||||
// Place la première tuile pleine au point central
|
||||
addHexagonTile(position, gridPanel, 50, cameraController, tile);
|
||||
availablePositions.remove(position);
|
||||
|
||||
// Ajouter des placeholders autour de la première tuile
|
||||
Point[] adjacentPositions = getAdjacentPositions(position);
|
||||
for (Point adj : adjacentPositions) {
|
||||
if (!hexagonMap.containsKey(adj)) {
|
||||
availablePositions.add(adj);
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController); // Utilise CameraController
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController, null); // Passer `null` pour les placeholders
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void placeTile(Point position, CameraController cameraController) {
|
||||
if (availablePositions.contains(position)) {
|
||||
HexagonTile hexTile = hexagonMap.get(position);
|
||||
if (hexTile != null && !hexTile.isFilled()) {
|
||||
hexTile.setTile(nextTile); // Placer la tuile
|
||||
gridPanel.revalidate(); // Forcer le rafraîchissement de l'interface graphique
|
||||
gridPanel.repaint();
|
||||
|
||||
// Générer une nouvelle tuile et mettre à jour la prévisualisation
|
||||
nextTile = generateRandomTile();
|
||||
nextTilePreview.setTile(nextTile);
|
||||
|
||||
// Mettre à jour les positions adjacentes
|
||||
updateAdjacentPositions(position, cameraController);
|
||||
|
||||
// Supprimer la position de la liste des positions disponibles
|
||||
availablePositions.remove(position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addHexagonTile(Point position, JPanel panel, int hexSize, CameraController cameraController) {
|
||||
public void addHexagonTile(Point position, JPanel panel, int hexSize, CameraController cameraController, Tile tile) {
|
||||
int xOffset = position.x * (int) (hexSize * 3 / 2);
|
||||
int yOffset = position.y * (int) (Math.sqrt(3) * hexSize);
|
||||
|
||||
|
||||
Point viewOffset = cameraController.getViewOffset();
|
||||
xOffset += viewOffset.x;
|
||||
yOffset += viewOffset.y;
|
||||
|
||||
|
||||
if (position.x % 2 != 0) {
|
||||
yOffset += (int) (Math.sqrt(3) * hexSize / 2);
|
||||
}
|
||||
|
||||
|
||||
HexagonTile hexTile = new HexagonTile(position);
|
||||
hexTile.setTile(tile); // Place la tuile fournie, ou null pour un placeholder
|
||||
hexTile.setBounds(xOffset, yOffset, hexSize, hexSize);
|
||||
|
||||
|
||||
// Ajout de l'écouteur pour gérer le clic sur l'hexagone
|
||||
hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions, cameraController));
|
||||
|
||||
|
||||
hexagonMap.put(position, hexTile);
|
||||
panel.add(hexTile);
|
||||
panel.revalidate();
|
||||
panel.repaint();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private void updateAdjacentPositions(Point position, CameraController cameraController) {
|
||||
Point[] adjacentPositions = getAdjacentPositions(position);
|
||||
for (Point adj : adjacentPositions) {
|
||||
if (!hexagonMap.containsKey(adj)) {
|
||||
availablePositions.add(adj);
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController); // Utilise les nouvelles positions logiques
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Point[] getAdjacentPositions(Point position) {
|
||||
return new Point[]{
|
||||
@ -106,8 +73,4 @@ public class GameController {
|
||||
new Point(position.x - 1, position.y + 1)
|
||||
};
|
||||
}
|
||||
|
||||
private Tile generateRandomTile() {
|
||||
return new Tile();
|
||||
}
|
||||
}
|
||||
|
@ -9,15 +9,11 @@ import java.util.Set;
|
||||
public class HexagonMouseListener extends MouseAdapter {
|
||||
|
||||
private final HexagonTile hexTile;
|
||||
private final GameController gameController;
|
||||
private final Set<Point> availablePositions;
|
||||
private final CameraController cameraController; // Ajouter CameraController
|
||||
|
||||
public HexagonMouseListener(HexagonTile hexTile, GameController gameController, Set<Point> availablePositions, CameraController cameraController) {
|
||||
this.hexTile = hexTile;
|
||||
this.gameController = gameController;
|
||||
this.availablePositions = availablePositions;
|
||||
this.cameraController = cameraController; // Initialiser CameraController
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -25,12 +21,10 @@ public class HexagonMouseListener extends MouseAdapter {
|
||||
Point position = hexTile.getPosition();
|
||||
if (availablePositions.contains(position)) {
|
||||
System.out.println("Hexagone cliqué à la position : " + position);
|
||||
gameController.placeTile(position, cameraController); // Appelle la méthode pour placer une tuile
|
||||
// Logique de placement de la tuile ou appel à GameController ici si nécessaire
|
||||
// Par exemple, nous pourrions générer la tuile suivante directement ici
|
||||
} else {
|
||||
System.out.println("Position non disponible pour le placement");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,18 +1,15 @@
|
||||
package controller;
|
||||
|
||||
import view.HexagonTile;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.awt.Point;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class MouseDragHandler extends MouseAdapter {
|
||||
|
||||
private CameraController controller;
|
||||
private GameContext context; // Utiliser GameContext pour regrouper les données
|
||||
private GameContext context;
|
||||
|
||||
public MouseDragHandler(CameraController controller, GameContext context) {
|
||||
this.controller = controller;
|
||||
@ -26,8 +23,8 @@ public class MouseDragHandler extends MouseAdapter {
|
||||
int deltaX = current.x - controller.getMouseDragStart().x;
|
||||
int deltaY = current.y - controller.getMouseDragStart().y;
|
||||
|
||||
// Déplacer uniquement les coordonnées visuelles, pas les coordonnées logiques
|
||||
for (HexagonTile hexTile : context.hexagonMap.values()) {
|
||||
// Déplace chaque tuile dans le contexte de la grille
|
||||
for (HexagonTile hexTile : context.getHexagonMap().values()) {
|
||||
Point currentPos = hexTile.getLocation();
|
||||
hexTile.setLocation(currentPos.x + deltaX, currentPos.y + deltaY);
|
||||
}
|
||||
@ -44,37 +41,7 @@ public class MouseDragHandler extends MouseAdapter {
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (SwingUtilities.isRightMouseButton(e)) {
|
||||
// Recalculer les positions logiques lorsque la souris est relâchée
|
||||
Map<Point, HexagonTile> newHexagonMap = new HashMap<>();
|
||||
|
||||
for (Map.Entry<Point, HexagonTile> entry : context.hexagonMap.entrySet()) {
|
||||
HexagonTile hexTile = entry.getValue();
|
||||
Point newLogicalPosition = calculateNewLogicalPosition(hexTile.getLocation());
|
||||
|
||||
// Mettre à jour les écouteurs de la souris
|
||||
hexTile.removeMouseListener(hexTile.getMouseListeners()[0]); // Supprimer l'ancien écouteur
|
||||
hexTile.addMouseListener(new HexagonMouseListener(hexTile, context.gameController, context.availablePositions, context.cameraController));
|
||||
|
||||
// Ajouter la nouvelle position logique dans la nouvelle carte
|
||||
newHexagonMap.put(newLogicalPosition, hexTile);
|
||||
}
|
||||
|
||||
// Remplacer la carte hexagonMap avec la nouvelle carte
|
||||
context.hexagonMap.clear();
|
||||
context.hexagonMap.putAll(newHexagonMap);
|
||||
|
||||
controller.resetMouseDragStart();
|
||||
}
|
||||
}
|
||||
|
||||
private Point calculateNewLogicalPosition(Point visualPosition) {
|
||||
int logicalX = visualPosition.x / (int) (50 * 3 / 2); // Ajuste pour la largeur de l'hexagone
|
||||
int logicalY = visualPosition.y / (int) (Math.sqrt(3) * 50); // Ajuste pour la hauteur de l'hexagone
|
||||
|
||||
if (logicalX % 2 != 0) {
|
||||
logicalY -= (int) (Math.sqrt(3) * 50 / 2); // Ajustement pour les colonnes impaires
|
||||
}
|
||||
|
||||
return new Point(logicalX, logicalY);
|
||||
}
|
||||
}
|
||||
|
@ -1,22 +1,14 @@
|
||||
package controller;
|
||||
|
||||
import view.HexagonTile;
|
||||
import java.awt.Point;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class MousePressHandler extends MouseAdapter {
|
||||
|
||||
private CameraController controller;
|
||||
private GameContext context; // Ajout du GameContext
|
||||
|
||||
public MousePressHandler(CameraController controller, GameContext context) {
|
||||
this.controller = controller;
|
||||
this.context = context; // Utilisation du contexte
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -28,37 +20,9 @@ public class MousePressHandler extends MouseAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (SwingUtilities.isRightMouseButton(e)) {
|
||||
// Créer une nouvelle carte pour stocker les nouvelles positions logiques
|
||||
Map<Point, HexagonTile> newHexagonMap = new HashMap<>();
|
||||
|
||||
for (Map.Entry<Point, HexagonTile> entry : context.hexagonMap.entrySet()) {
|
||||
HexagonTile hexTile = entry.getValue();
|
||||
Point newLogicalPosition = calculateNewLogicalPosition(hexTile.getLocation());
|
||||
|
||||
// Ajouter la nouvelle position logique dans la nouvelle carte
|
||||
newHexagonMap.put(newLogicalPosition, hexTile);
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (SwingUtilities.isRightMouseButton(e)) {
|
||||
controller.resetMouseDragStart();
|
||||
}
|
||||
|
||||
// Remplacer l'ancienne carte après avoir terminé l'itération
|
||||
Map<Point, HexagonTile> oldHexagonMap = context.hexagonMap; // Sauvegarder l'ancienne référence
|
||||
context.hexagonMap = newHexagonMap; // Réassigner la nouvelle carte
|
||||
|
||||
oldHexagonMap.clear(); // Vider l'ancienne carte (maintenant non utilisée)
|
||||
controller.resetMouseDragStart();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Point calculateNewLogicalPosition(Point visualPosition) {
|
||||
int logicalX = visualPosition.x / (int) (50 * 3 / 2);
|
||||
int logicalY = visualPosition.y / (int) (Math.sqrt(3) * 50);
|
||||
|
||||
if (logicalX % 2 != 0) {
|
||||
logicalY -= (int) (Math.sqrt(3) * 50 / 2);
|
||||
}
|
||||
|
||||
return new Point(logicalX, logicalY);
|
||||
}
|
||||
}
|
||||
|
@ -2,10 +2,14 @@ package controller;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import view.GameView;
|
||||
|
||||
public class ResListener implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
System.out.println("Juste pour tester ");
|
||||
SwingUtilities.invokeLater(() -> new GameView());
|
||||
|
||||
}
|
||||
}
|
@ -7,90 +7,90 @@ import model.Tile;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class GameView extends JFrame {
|
||||
|
||||
private JPanel gridPanel;
|
||||
private Map<Point, HexagonTile> hexagonMap;
|
||||
private Set<Point> availablePositions;
|
||||
private Tile nextTile;
|
||||
private HexagonTile nextTilePreview;
|
||||
private GameController gameController;
|
||||
private CameraController cameraController;
|
||||
private GameContext gameContext;
|
||||
|
||||
public GameView() {
|
||||
this.hexagonMap = new HashMap<>();
|
||||
this.availablePositions = new HashSet<>();
|
||||
|
||||
setTitle("Jeu de Tuiles");
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setLayout(new BorderLayout());
|
||||
setSize(1500, 750);
|
||||
setLocationRelativeTo(null);
|
||||
|
||||
// Générer la première tuile aléatoire
|
||||
nextTile = generateRandomTile();
|
||||
// Initialiser le contexte de jeu
|
||||
gameContext = new GameContext();
|
||||
|
||||
// Créer la grille d'hexagones à gauche
|
||||
// Créer la grille d'hexagones
|
||||
gridPanel = createHexagonGrid();
|
||||
gridPanel.setLayout(null); // Permet de placer les éléments sans layout manager
|
||||
gridPanel.setPreferredSize(new Dimension(800, 800)); // Taille de la grille adaptée
|
||||
|
||||
// Calculer et centrer la grille dans GameView
|
||||
centerGridPanel();
|
||||
|
||||
// Ajout de la grille sans JScrollPane
|
||||
add(gridPanel, BorderLayout.CENTER);
|
||||
|
||||
// Créer le panneau de contrôle à droite
|
||||
JPanel controlPanel = createControlPanel();
|
||||
controlPanel.setPreferredSize(new Dimension(200, 600)); // Taille fixe pour le panneau de contrôle
|
||||
controlPanel.setPreferredSize(new Dimension(200, 600));
|
||||
add(controlPanel, BorderLayout.EAST);
|
||||
|
||||
// Initialiser GameContext
|
||||
GameContext context = new GameContext(hexagonMap, gameController, availablePositions, cameraController);
|
||||
// Initialiser les contrôleurs avec le contexte de jeu
|
||||
gameController = new GameController(gameContext, gridPanel, nextTile, nextTilePreview);
|
||||
cameraController = new CameraController(gridPanel, gameContext);
|
||||
|
||||
// Initialiser le contrôleur du jeu avec le contexte
|
||||
gameController = new GameController(hexagonMap, availablePositions, gridPanel, nextTile, nextTilePreview);
|
||||
// Générer une première tuile pleine et la placer au centre
|
||||
placeInitialTileWithRandomTile();
|
||||
|
||||
// Initialiser le contrôleur de la souris pour le glissement de la grille avec le contexte
|
||||
cameraController = new CameraController(gridPanel, context);
|
||||
|
||||
// Placer la première tuile au centre en passant CameraController
|
||||
Point initialPosition = new Point(0, 0);
|
||||
gameController.placeInitialTile(initialPosition, cameraController);
|
||||
|
||||
pack();
|
||||
setLocationRelativeTo(null);
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
private JPanel createHexagonGrid() {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(null); // Layout libre pour placer les hexagones
|
||||
panel.setBackground(Color.WHITE); // S'assurer que le fond est blanc pour mieux voir les hexagones
|
||||
panel.setPreferredSize(new Dimension(1000, 1000)); // Taille initiale suffisamment grande
|
||||
panel.setLayout(null);
|
||||
panel.setBackground(Color.WHITE);
|
||||
panel.setPreferredSize(new Dimension(800, 800));
|
||||
return panel;
|
||||
}
|
||||
|
||||
private void centerGridPanel() {
|
||||
int gridX = (getWidth() - gridPanel.getPreferredSize().width) / 2;
|
||||
int gridY = (getHeight() - gridPanel.getPreferredSize().height) / 2;
|
||||
|
||||
gridPanel.setLocation(gridX, gridY);
|
||||
gameContext.updateOffset(gridX, gridY); // Mettre à jour l'offset dans GameContext
|
||||
}
|
||||
|
||||
private Tile generateRandomTile() {
|
||||
return new Tile();
|
||||
return new Tile(); // Génère une tuile aléatoire avec des caractéristiques définies dans Tile.java
|
||||
}
|
||||
|
||||
private void placeInitialTileWithRandomTile() {
|
||||
// Générer une première tuile pleine de manière aléatoire
|
||||
Tile initialTile = generateRandomTile();
|
||||
|
||||
// Utiliser `placeInitialTile` pour placer cette tuile au centre de la grille
|
||||
Point initialPosition = new Point(0, 0);
|
||||
gameController.placeInitialTile(initialPosition, cameraController, initialTile);
|
||||
}
|
||||
|
||||
private JPanel createControlPanel() {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||
panel.setBackground(Color.LIGHT_GRAY); // Améliorer la visibilité du panneau de contrôle
|
||||
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Ajout d'espacement interne
|
||||
panel.setBackground(Color.LIGHT_GRAY);
|
||||
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
panel.add(new JLabel("Prochaine tuile : "));
|
||||
panel.add(Box.createRigidArea(new Dimension(0, 10)));
|
||||
|
||||
// Afficher la prévisualisation de la prochaine tuile
|
||||
nextTilePreview = new HexagonTile(null);
|
||||
nextTilePreview.setPreferredSize(new Dimension(150, 150)); // Augmenter la taille pour la prévisualisation
|
||||
nextTilePreview.setPreferredSize(new Dimension(150, 150));
|
||||
nextTilePreview.setBackground(Color.GRAY);
|
||||
nextTilePreview.setOpaque(true); // Rendre le fond opaque pour une meilleure visibilité
|
||||
nextTilePreview.setTile(nextTile);
|
||||
nextTilePreview.setOpaque(true);
|
||||
panel.add(nextTilePreview);
|
||||
|
||||
return panel;
|
||||
|
@ -3,7 +3,6 @@ package view;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
|
||||
public class MenuView extends JComponent {
|
||||
private BtnPerso resumeButton;
|
||||
private BtnPerso newGameButton;
|
||||
@ -14,42 +13,38 @@ public class MenuView extends JComponent {
|
||||
private ImageIcon quit;
|
||||
private JPanel panelCoté;
|
||||
private JLabel labelImg;
|
||||
|
||||
|
||||
|
||||
|
||||
public MenuView(){
|
||||
public MenuView() {
|
||||
|
||||
panelCoté = new JPanel(new GridBagLayout());
|
||||
panelCoté = new JPanel(new GridBagLayout());
|
||||
GridBagConstraints gbc = new GridBagConstraints();
|
||||
panelCoté.setBackground(new Color(243,171,115,150));
|
||||
panelCoté.setPreferredSize(new Dimension(300,0));
|
||||
panelCoté.setBackground(new Color(243, 171, 115, 150));
|
||||
panelCoté.setPreferredSize(new Dimension(300, 0));
|
||||
|
||||
backgroundImage = new ImageIcon("./view/img/bg.png").getImage();
|
||||
logo = new ImageIcon("\\\\wsl.localhost\\Ubuntu-24.04\\home\\topb\\DEV\\SAE31_2024\\src\\main\\java\\view\\img\\D.png");
|
||||
quit = new ImageIcon("\\\\wsl.localhost\\Ubuntu-24.04\\home\\topb\\DEV\\SAE31_2024\\src\\main\\java\\view\\img\\quit.png");
|
||||
// Utilisation de getResource pour charger les images
|
||||
backgroundImage = new ImageIcon(getClass().getResource("/view/img/bg.png")).getImage();
|
||||
logo = new ImageIcon(getClass().getResource("/view/img/D.png"));
|
||||
quit = new ImageIcon(getClass().getResource("/view/img/quit.png"));
|
||||
|
||||
// Redimensionnement des images
|
||||
Image quit1 = quit.getImage();
|
||||
Image lg = logo.getImage();
|
||||
Image resizedlg = lg.getScaledInstance(300, 300, Image.SCALE_SMOOTH);
|
||||
ImageIcon logoIcon = new ImageIcon(resizedlg);
|
||||
|
||||
|
||||
|
||||
labelImg = new JLabel(logoIcon);
|
||||
|
||||
|
||||
|
||||
resumeButton = new BtnPerso("RESUME");
|
||||
newGameButton = new BtnPerso("NEW GAME");
|
||||
|
||||
|
||||
int buttonWidth = 65;
|
||||
int buttonHeight = 40;
|
||||
Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH);
|
||||
Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH);
|
||||
ImageIcon resizedIcon = new ImageIcon(resizedImage);
|
||||
|
||||
quitButton = new JButton(resizedIcon);
|
||||
quitButton.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
|
||||
quitButton.setPreferredSize(new Dimension(50,50));
|
||||
quitButton.setPreferredSize(new Dimension(50, 50));
|
||||
quitButton.setBackground(new Color(243, 171, 115, 150));
|
||||
quitButton.setBorderPainted(false);
|
||||
quitButton.setOpaque(true);
|
||||
@ -66,13 +61,11 @@ public class MenuView extends JComponent {
|
||||
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 0;
|
||||
|
||||
panelCoté.add(labelImg,gbc);
|
||||
|
||||
|
||||
panelCoté.add(labelImg, gbc);
|
||||
|
||||
gbc.gridy = 1;
|
||||
panelCoté.add(resumeButton,gbc);
|
||||
|
||||
panelCoté.add(resumeButton, gbc);
|
||||
|
||||
gbc.gridy = 2;
|
||||
panelCoté.add(newGameButton, gbc);
|
||||
@ -80,12 +73,8 @@ public class MenuView extends JComponent {
|
||||
gbc.gridy = 3;
|
||||
panelCoté.add(quitButton, gbc);
|
||||
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
add(panelCoté,BorderLayout.WEST);
|
||||
|
||||
|
||||
|
||||
add(panelCoté, BorderLayout.WEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -93,6 +82,7 @@ public class MenuView extends JComponent {
|
||||
super.paintComponent(g);
|
||||
g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this);
|
||||
}
|
||||
|
||||
public BtnPerso getResumeButton() {
|
||||
return resumeButton;
|
||||
}
|
||||
@ -101,8 +91,7 @@ public class MenuView extends JComponent {
|
||||
return newGameButton;
|
||||
}
|
||||
|
||||
public JButton getQuiButton(){
|
||||
public JButton getQuiButton() {
|
||||
return quitButton;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user