Pair Programming ( merci bamba ) CardLayout
This commit is contained in:
parent
50d9ee2f58
commit
0fdd38bdae
AllScore.javaSendScore.java
bin
controller
AllScore.classGameController.classGameEndListener.classMenuController.classResListener.classSendScore.class
main
model
view
src/main
@ -21,7 +21,7 @@ public class AllScore {
|
||||
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
|
||||
"akagundu", "dersim62Lodek");
|
||||
try{
|
||||
PreparedStatement pst = cnx.prepareStatement("SELECT score from score where id_serie=?;");
|
||||
PreparedStatement pst = cnx.prepareStatement("SELECT Score from score where id_serie=?;");
|
||||
pst.setInt(1, idSerie);
|
||||
ResultSet rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
|
@ -1,9 +1,7 @@
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class SendScore {
|
||||
public void insertscore(int idSerie,int score) {
|
||||
@ -18,7 +16,7 @@ public class SendScore {
|
||||
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
|
||||
"akagundu", "dersim62Lodek");
|
||||
try{
|
||||
PreparedStatement pst = cnx.prepareStatement("INSERT INTO score (id_serie, score) VALUES (?, ?);");
|
||||
PreparedStatement pst = cnx.prepareStatement("INSERT INTO Score (id_serie, score) VALUES (?, ?);");
|
||||
pst.setInt(1, idSerie);
|
||||
pst.setInt(2, score);
|
||||
pst.executeUpdate();
|
||||
|
BIN
bin/controller/AllScore.class
Normal file
BIN
bin/controller/AllScore.class
Normal file
Binary file not shown.
Binary file not shown.
BIN
bin/controller/GameEndListener.class
Normal file
BIN
bin/controller/GameEndListener.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/controller/SendScore.class
Normal file
BIN
bin/controller/SendScore.class
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.
BIN
bin/view/ScoreView$1.class
Normal file
BIN
bin/view/ScoreView$1.class
Normal file
Binary file not shown.
BIN
bin/view/ScoreView.class
Normal file
BIN
bin/view/ScoreView.class
Normal file
Binary file not shown.
@ -1,8 +1,4 @@
|
||||
package main;
|
||||
|
||||
import model.MenuModel;
|
||||
import controller.MenuController;
|
||||
import controller.SeriesSelector;
|
||||
import view.*;
|
||||
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
@ -14,21 +10,9 @@ import java.net.URL;
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
MenuModel model = new MenuModel();
|
||||
MenuView view = new MenuView();
|
||||
|
||||
// Initialiser SeriesSelector et le passer à MenuView
|
||||
SeriesSelector seriesSelector = new SeriesSelector();
|
||||
view.setSeriesSelector(seriesSelector);
|
||||
|
||||
// Créer MenuController avec model, view et seriesSelector
|
||||
new MenuController(model, view, seriesSelector);
|
||||
|
||||
JFrame frame = App.getInstance();
|
||||
frame.add(view);
|
||||
frame.setVisible(true);
|
||||
|
||||
PlayMusic("/Music/audio.wav");
|
||||
MenuView menuView = new MenuView();
|
||||
App.addView(menuView, App.MENU_VIEW);
|
||||
App.showView(App.MENU_VIEW);
|
||||
});
|
||||
}
|
||||
|
||||
|
39
src/main/java/controller/AllScore.java
Normal file
39
src/main/java/controller/AllScore.java
Normal file
@ -0,0 +1,39 @@
|
||||
package controller;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AllScore {
|
||||
public static ArrayList<Integer> getScoresForSeries(int idSerie) {
|
||||
ArrayList<Integer> scores = new ArrayList<>();
|
||||
|
||||
try {
|
||||
Class.forName("org.mariadb.jdbc.Driver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
System.err.println("Erreur : pilote JDBC non trouvé");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
try (Connection cnx = DriverManager.getConnection(
|
||||
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
|
||||
"akagundu", "dersim62Lodek")) {
|
||||
try (PreparedStatement pst = cnx.prepareStatement("SELECT score FROM Score WHERE id_serie=? ORDER BY score DESC LIMIT 10")) {
|
||||
pst.setInt(1, idSerie);
|
||||
try (ResultSet rs = pst.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
scores.add(rs.getInt("score"));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
System.err.println("Erreur de connexion ou d'exécution de la requête SQL");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return scores;
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
// src/main/java/controller/GameController.java
|
||||
package controller;
|
||||
|
||||
import model.Tile;
|
||||
@ -20,22 +21,25 @@ public class GameController implements TilePlacer {
|
||||
private TileDatabaseManager dbManager;
|
||||
private List<Tile> currentTiles;
|
||||
private int tileIndex;
|
||||
private ScoreGameContext scoreGameContext; // Nouveau contexte pour le score
|
||||
private ScoreGameContext scoreGameContext;
|
||||
|
||||
public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel) {
|
||||
private int placedTileCount = 0;
|
||||
private int seriesId;
|
||||
private GameEndListener gameEndListener;
|
||||
|
||||
public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel, int seriesId, GameEndListener gameEndListener) {
|
||||
this.seriesId = seriesId;
|
||||
this.gameContext = gameContext;
|
||||
this.gridPanel = gridPanel;
|
||||
this.hexagonMap = gameContext.getHexagonMap();
|
||||
this.availablePositions = gameContext.getAvailablePositions();
|
||||
this.nextTilePreview = nextTilePreview;
|
||||
|
||||
this.dbManager = new TileDatabaseManager();
|
||||
this.tileIndex = 0;
|
||||
|
||||
// Initialisation de ScoreGameContext
|
||||
this.scoreGameContext = new ScoreGameContext(gameContext, scoreLabel);
|
||||
this.gameEndListener = gameEndListener;
|
||||
|
||||
loadSeries(1); // Charger la série par défaut (ex. série 1)
|
||||
loadSeries(seriesId);
|
||||
updatePreview();
|
||||
}
|
||||
|
||||
@ -54,16 +58,12 @@ public class GameController implements TilePlacer {
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Placement de la tuile avec ID : " + (nextTile != null ? nextTile.getId() : "null") + " à la position : " + position);
|
||||
|
||||
hexTile.setTile(nextTile); // Place la tuile actuelle
|
||||
hexTile.setTile(nextTile);
|
||||
gridPanel.revalidate();
|
||||
gridPanel.repaint();
|
||||
|
||||
availablePositions.remove(position);
|
||||
|
||||
Point[] adjacentPositions = getAdjacentPositions(position);
|
||||
for (Point adj : adjacentPositions) {
|
||||
for (Point adj : getAdjacentPositions(position)) {
|
||||
if (!hexagonMap.containsKey(adj)) {
|
||||
availablePositions.add(adj);
|
||||
addHexagonTile(adj, gridPanel, 50, null, null);
|
||||
@ -71,38 +71,43 @@ public class GameController implements TilePlacer {
|
||||
}
|
||||
|
||||
gameContext.repaintGrid(gridPanel);
|
||||
generateNextTile(); // Génère la tuile suivante
|
||||
|
||||
// Calcul et mise à jour du score
|
||||
generateNextTile();
|
||||
scoreGameContext.calculateScore();
|
||||
|
||||
placedTileCount++;
|
||||
if (placedTileCount >= 50) {
|
||||
endGame(); // Appeler endGame pour terminer la partie
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void endGame() {
|
||||
int finalScore = scoreGameContext.getScore();
|
||||
|
||||
// Enregistrer le score dans la base de données
|
||||
new SendScore().insertscore(seriesId, finalScore);
|
||||
|
||||
// Notifiez le listener de la fin de la partie
|
||||
if (gameEndListener != null) {
|
||||
gameEndListener.onGameEnd(finalScore);
|
||||
}
|
||||
}
|
||||
|
||||
public void initializeGame(CameraController cameraController) {
|
||||
generateNextTile(); // Génère la première tuile et assigne une tuile valide à `nextTile`
|
||||
|
||||
Tile initialTile = getNextTile(); // Récupère la tuile générée
|
||||
generateNextTile();
|
||||
Tile initialTile = getNextTile();
|
||||
if (initialTile == null) {
|
||||
System.out.println("Erreur : aucune tuile initiale générée.");
|
||||
return; // Arrête l'initialisation si aucune tuile n'a été générée
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("ID de la tuile initiale générée : " + initialTile.getId()); // Affiche l'ID de la tuile initiale
|
||||
|
||||
|
||||
int centerX = gridPanel.getPreferredSize().width / 2;
|
||||
int centerY = gridPanel.getPreferredSize().height / 2;
|
||||
|
||||
Point initialPosition = new Point(0, 0);
|
||||
initialPosition.setLocation(centerX / 50, centerY / 50); // Calcule la position centrale
|
||||
|
||||
placeInitialTile(initialPosition, cameraController, initialTile); // Place la première tuile
|
||||
|
||||
// Calculer et mettre à jour le score incluant la première tuile
|
||||
Point initialPosition = new Point(centerX / 50, centerY / 50);
|
||||
placeInitialTile(initialPosition, cameraController, initialTile);
|
||||
scoreGameContext.calculateScore();
|
||||
|
||||
generateNextTile(); // Génère la tuile suivante
|
||||
generateNextTile();
|
||||
}
|
||||
|
||||
|
||||
public void placeInitialTile(Point position, CameraController cameraController, Tile tile) {
|
||||
if (tile == null) {
|
||||
@ -110,16 +115,13 @@ public class GameController implements TilePlacer {
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Placement de la tuile initiale avec ID : " + tile.getId() + " à la position : " + position);
|
||||
addHexagonTile(position, gridPanel, 50, cameraController, tile);
|
||||
availablePositions.remove(position);
|
||||
|
||||
addHexagonTile(position, gridPanel, 50, cameraController, tile); // Place la première tuile
|
||||
availablePositions.remove(position); // Marque la position comme occupée
|
||||
|
||||
Point[] adjacentPositions = getAdjacentPositions(position);
|
||||
for (Point adj : adjacentPositions) {
|
||||
for (Point adj : getAdjacentPositions(position)) {
|
||||
if (!hexagonMap.containsKey(adj)) {
|
||||
availablePositions.add(adj);
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController, null); // Placeholder vide pour les positions adjacentes
|
||||
addHexagonTile(adj, gridPanel, 50, cameraController, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -143,18 +145,15 @@ public class GameController implements TilePlacer {
|
||||
yOffset += (int) (Math.sqrt(3) * hexSize / 2);
|
||||
}
|
||||
|
||||
boolean isPlaceholder = (tile == null); // Si tile est null, c'est un placeholder
|
||||
boolean isPlaceholder = (tile == null);
|
||||
HexagonTile hexTile = new HexagonTile(position, isPlaceholder);
|
||||
|
||||
if (tile != null) {
|
||||
hexTile.setTile(tile);
|
||||
} else {
|
||||
System.out.println("Aucun tile n'a été fourni pour cette position : " + position);
|
||||
}
|
||||
|
||||
hexTile.setBounds(xOffset, yOffset, hexSize, hexSize);
|
||||
hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions));
|
||||
|
||||
hexagonMap.put(position, hexTile);
|
||||
panel.add(hexTile);
|
||||
panel.revalidate();
|
||||
@ -164,21 +163,19 @@ public class GameController implements TilePlacer {
|
||||
public void generateNextTile() {
|
||||
if (tileIndex < currentTiles.size()) {
|
||||
nextTile = currentTiles.get(tileIndex++);
|
||||
System.out.println("Génération de la prochaine tuile avec ID : " + nextTile.getId() + " (index " + tileIndex + ")");
|
||||
updatePreview(); // Met à jour l'aperçu de la tuile suivante
|
||||
updatePreview();
|
||||
} else {
|
||||
nextTile = null; // Fin de la série, plus de tuiles à placer
|
||||
updatePreview(); // Met à jour l'aperçu pour refléter l'absence de prochaine tuile
|
||||
System.out.println("Fin de la série. Plus de tuiles à placer.");
|
||||
nextTile = null;
|
||||
updatePreview();
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePreview() {
|
||||
if (nextTilePreview != null) {
|
||||
if (nextTile != null) {
|
||||
nextTilePreview.setTile(nextTile); // Met à jour avec une tuile valide
|
||||
nextTilePreview.setTile(nextTile);
|
||||
} else {
|
||||
nextTilePreview.setTile(null); // Affiche un placeholder ou un message si `nextTile` est null
|
||||
nextTilePreview.setTile(null);
|
||||
}
|
||||
nextTilePreview.repaint();
|
||||
}
|
||||
|
5
src/main/java/controller/GameEndListener.java
Normal file
5
src/main/java/controller/GameEndListener.java
Normal file
@ -0,0 +1,5 @@
|
||||
package controller;
|
||||
|
||||
public interface GameEndListener {
|
||||
void onGameEnd(int finalScore);
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package controller;
|
||||
|
||||
import model.MenuModel;
|
||||
import view.MenuView;
|
||||
|
||||
public class MenuController {
|
||||
|
||||
public MenuController(MenuModel model, MenuView view, SeriesSelector seriesSelector) {
|
||||
// Assignation des action listeners aux boutons du menu
|
||||
view.getQuiButton().addActionListener(new QuiListener()); // Quitte l'application
|
||||
|
||||
// Définir le sélecteur de séries
|
||||
view.setSeriesSelector(seriesSelector);
|
||||
}
|
||||
}
|
30
src/main/java/controller/SendScore.java
Normal file
30
src/main/java/controller/SendScore.java
Normal file
@ -0,0 +1,30 @@
|
||||
package controller;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class SendScore {
|
||||
public void insertscore(int idSerie, int score) {
|
||||
try {
|
||||
Class.forName("org.mariadb.jdbc.Driver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
System.err.println("Erreur : pilote JDBC non trouvé");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
try (Connection cnx = DriverManager.getConnection(
|
||||
"jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu",
|
||||
"akagundu", "dersim62Lodek")) {
|
||||
try (PreparedStatement pst = cnx.prepareStatement("INSERT INTO Score (id_serie, score) VALUES (?, ?);")) {
|
||||
pst.setInt(1, idSerie);
|
||||
pst.setInt(2, score);
|
||||
pst.executeUpdate();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
System.err.println("Erreur de connexion ou d'exécution de la requête SQL");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
package model;
|
||||
|
||||
|
||||
public class MenuModel {
|
||||
|
||||
public MenuModel() {
|
||||
// rien du tout pour l'instant
|
||||
}
|
||||
|
||||
}
|
@ -1,17 +1,37 @@
|
||||
package view;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
public class App {
|
||||
public static final String MENU_VIEW = "MenuView";
|
||||
public static final String GAME_VIEW = "GameView";
|
||||
public static final String SCORE_VIEW = "ScoreView";
|
||||
|
||||
private static JFrame frame;
|
||||
private static CardLayout cardLayout;
|
||||
private static JPanel mainPanel;
|
||||
|
||||
static {
|
||||
frame = new JFrame("Application de Jeu");
|
||||
cardLayout = new CardLayout();
|
||||
mainPanel = new JPanel(cardLayout);
|
||||
frame.setContentPane(mainPanel);
|
||||
frame.setSize(1500, 750);
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
}
|
||||
|
||||
public static JFrame getInstance() {
|
||||
if (frame == null) {
|
||||
frame = new JFrame("Menu");
|
||||
frame.setSize(1500, 750);
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
}
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
|
||||
public static void addView(JPanel view, String viewName) {
|
||||
mainPanel.add(view, viewName);
|
||||
}
|
||||
|
||||
public static void showView(String viewName) {
|
||||
cardLayout.show(mainPanel, viewName);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
}
|
@ -1,31 +1,23 @@
|
||||
// src/main/java/view/GameView.java
|
||||
package view;
|
||||
|
||||
import controller.GameController;
|
||||
import controller.CameraController;
|
||||
import controller.GameContext;
|
||||
import controller.MouseWheelController;
|
||||
import controller.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
public class GameView extends JFrame {
|
||||
public class GameView extends JPanel implements GameEndListener {
|
||||
private JPanel gridPanel;
|
||||
private HexagonTile nextTilePreview;
|
||||
private GameController gameController;
|
||||
private CameraController cameraController;
|
||||
private GameContext gameContext;
|
||||
private JLabel scoreLabel;
|
||||
|
||||
// Couleurs pour le style
|
||||
private final Color hoverColor = new Color(200, 150, 100); // Couleur de hover avec transparence
|
||||
private final Color normalColor = new Color(243, 171, 115); // Couleur normale avec transparence
|
||||
private int seriesId;
|
||||
|
||||
public GameView(int seriesId) {
|
||||
setTitle("Jeu de Tuiles");
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.seriesId = seriesId;
|
||||
setLayout(new BorderLayout());
|
||||
setSize(1500, 750);
|
||||
setLocationRelativeTo(null);
|
||||
|
||||
gameContext = new GameContext();
|
||||
gridPanel = createHexagonGrid();
|
||||
@ -34,27 +26,39 @@ public class GameView extends JFrame {
|
||||
|
||||
nextTilePreview = new HexagonTile(null, false);
|
||||
scoreLabel = new JLabel("Score: 0");
|
||||
scoreLabel.setForeground(Color.BLACK); // Texte noir pour contraste
|
||||
scoreLabel.setForeground(Color.BLACK);
|
||||
|
||||
JPanel controlPanel = createControlPanel();
|
||||
controlPanel.setPreferredSize(new Dimension(200, 600));
|
||||
controlPanel.setPreferredSize(new Dimension(200, getPreferredSize().height));
|
||||
add(controlPanel, BorderLayout.EAST);
|
||||
|
||||
gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel);
|
||||
gameController.loadSeries(seriesId); // Charge la série
|
||||
gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel, seriesId, this);
|
||||
gameController.loadSeries(seriesId);
|
||||
cameraController = new CameraController(gridPanel, gameContext);
|
||||
|
||||
MouseWheelController wheelController = new MouseWheelController(nextTilePreview, gameController);
|
||||
addMouseWheelListener(wheelController);
|
||||
|
||||
gameController.initializeGame(cameraController);
|
||||
setVisible(true);
|
||||
|
||||
JButton backButton = new JButton("Retour");
|
||||
backButton.setPreferredSize(new Dimension(100, 40));
|
||||
backButton.setBackground(new Color(202, 146, 104));
|
||||
backButton.setForeground(Color.BLACK);
|
||||
backButton.setFocusPainted(false);
|
||||
backButton.setBorderPainted(false);
|
||||
|
||||
backButton.addActionListener(e -> {
|
||||
App.showView(App.MENU_VIEW);
|
||||
});
|
||||
|
||||
controlPanel.add(backButton);
|
||||
}
|
||||
|
||||
private JPanel createHexagonGrid() {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(null);
|
||||
panel.setBackground(normalColor); // Couleur de fond de la grille
|
||||
panel.setBackground(new Color(243, 171, 115));
|
||||
panel.setPreferredSize(new Dimension(800, 800));
|
||||
return panel;
|
||||
}
|
||||
@ -69,16 +73,16 @@ public class GameView extends JFrame {
|
||||
private JPanel createControlPanel() {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||
panel.setBackground(normalColor); // Couleur normale pour le panneau de contrôle
|
||||
panel.setBackground(new Color(243, 171, 115));
|
||||
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
JLabel nextTileLabel = new JLabel("Prochaine tuile : ");
|
||||
nextTileLabel.setForeground(Color.BLACK); // Texte noir pour contraste
|
||||
nextTileLabel.setForeground(Color.BLACK);
|
||||
panel.add(nextTileLabel);
|
||||
panel.add(Box.createRigidArea(new Dimension(0, 10)));
|
||||
|
||||
nextTilePreview.setPreferredSize(new Dimension(150, 150));
|
||||
nextTilePreview.setBackground(hoverColor); // Couleur hover pour différencier
|
||||
nextTilePreview.setBackground(new Color(200, 150, 100));
|
||||
nextTilePreview.setOpaque(true);
|
||||
panel.add(nextTilePreview);
|
||||
|
||||
@ -87,4 +91,13 @@ public class GameView extends JFrame {
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGameEnd(int finalScore) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
ScoreView scoreView = new ScoreView(seriesId, finalScore);
|
||||
App.addView(scoreView, App.SCORE_VIEW);
|
||||
App.showView(App.SCORE_VIEW);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,11 @@
|
||||
package view;
|
||||
|
||||
import controller.SeriesSelector;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import controller.SeriesSelector;
|
||||
|
||||
public class MenuView extends JComponent {
|
||||
public class MenuView extends JPanel {
|
||||
|
||||
private BtnPerso resumeButton;
|
||||
private BtnPerso newGameButton;
|
||||
@ -18,7 +19,7 @@ public class MenuView extends JComponent {
|
||||
private Image backgroundImage;
|
||||
private ImageIcon logo;
|
||||
private ImageIcon quit;
|
||||
private JLabel labelImg; // Déclaration de labelImg
|
||||
private JLabel labelImg;
|
||||
|
||||
public MenuView() {
|
||||
initMenu();
|
||||
@ -51,68 +52,56 @@ public class MenuView extends JComponent {
|
||||
}
|
||||
|
||||
private void initMenu() {
|
||||
// Initialisation du panneau latéral
|
||||
panelCote = new JPanel(new GridBagLayout());
|
||||
GridBagConstraints gbc = new GridBagConstraints();
|
||||
panelCote.setBackground(new Color(243, 171, 115, 150));
|
||||
panelCote.setPreferredSize(new Dimension(300, 0));
|
||||
|
||||
// Charger les images
|
||||
backgroundImage = new ImageIcon(getClass().getResource("/java/view/img/bg.png")).getImage();
|
||||
logo = new ImageIcon(getClass().getResource("/java/view/img/D.png"));
|
||||
quit = new ImageIcon(getClass().getResource("/java/view/img/quit.png"));
|
||||
|
||||
// Redimensionnement des images
|
||||
Image quit1 = quit.getImage();
|
||||
Image lg = logo.getImage();
|
||||
Image resizedlg = lg.getScaledInstance(300, 300, Image.SCALE_SMOOTH);
|
||||
labelImg = new JLabel(new ImageIcon(resizedlg)); // Initialisation de labelImg
|
||||
labelImg = new JLabel(new ImageIcon(resizedlg));
|
||||
|
||||
// Configuration du bouton "Quitter" avec une icône redimensionnée
|
||||
int buttonWidth = 65;
|
||||
int buttonHeight = 40;
|
||||
Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH);
|
||||
ImageIcon resizedIcon = new ImageIcon(resizedImage);
|
||||
|
||||
// Boutons
|
||||
resumeButton = new BtnPerso("JOUER");
|
||||
newGameButton = new BtnPerso("COMMENT JOUER");
|
||||
quitButton = new JButton(resizedIcon);
|
||||
|
||||
// Configurer le bouton "Quitter" pour enlever le fond et la bordure
|
||||
quitButton.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
|
||||
quitButton.setBackground(new Color(243, 171, 115, 150)); // Fond transparent similaire
|
||||
quitButton.setBorderPainted(false); // Enlever la bordure pour un look plus propre
|
||||
quitButton.setOpaque(true); // Rendre le fond visible
|
||||
quitButton.setFocusPainted(false); // Enlever le focus autour du bouton
|
||||
quitButton.setBackground(new Color(243, 171, 115, 150));
|
||||
quitButton.setBorderPainted(false);
|
||||
quitButton.setOpaque(true);
|
||||
quitButton.setFocusPainted(false);
|
||||
|
||||
// Ajout des listeners pour les boutons
|
||||
resumeButton.addActionListener(e -> showSeriesButtons());
|
||||
newGameButton.addActionListener(e -> toggleHowToPlay());
|
||||
|
||||
// Créer le panneau "Comment jouer" et le panneau de séries
|
||||
howToPlayPanel = createHowToPlayPanel();
|
||||
howToPlayPanel.setVisible(false);
|
||||
|
||||
seriesPanel = createSeriesPanel();
|
||||
seriesPanel.setVisible(false);
|
||||
|
||||
// Panneau centré pour le contenu dynamique
|
||||
centeredPanel = new JPanel(new GridBagLayout());
|
||||
centeredPanel.setOpaque(false);
|
||||
centeredPanel.add(howToPlayPanel);
|
||||
|
||||
// Ajout des composants au panneau latéral
|
||||
gbc.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc.insets = new Insets(10, 10, 10, 10);
|
||||
gbc.weightx = 1.0;
|
||||
gbc.gridx = 0;
|
||||
|
||||
// Ajouter l'image de logo
|
||||
gbc.gridy = 0;
|
||||
panelCote.add(labelImg, gbc); // Ajout de labelImg ici
|
||||
panelCote.add(labelImg, gbc);
|
||||
|
||||
// Ajouter les boutons
|
||||
gbc.gridy = 1;
|
||||
panelCote.add(resumeButton, gbc);
|
||||
|
||||
@ -164,6 +153,9 @@ public class MenuView extends JComponent {
|
||||
int seriesId = i;
|
||||
BtnPerso seriesButton = new BtnPerso("Série " + seriesId);
|
||||
seriesButton.addActionListener(e -> {
|
||||
GameView gameView = new GameView(seriesId);
|
||||
App.addView(gameView, App.GAME_VIEW);
|
||||
App.showView(App.GAME_VIEW);
|
||||
if (seriesSelector != null) {
|
||||
seriesSelector.startGameWithSeries(seriesId);
|
||||
}
|
||||
@ -180,16 +172,4 @@ public class MenuView extends JComponent {
|
||||
super.paintComponent(g);
|
||||
g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this);
|
||||
}
|
||||
|
||||
public BtnPerso getResumeButton() {
|
||||
return resumeButton;
|
||||
}
|
||||
|
||||
public BtnPerso getNewGameButton() {
|
||||
return newGameButton;
|
||||
}
|
||||
|
||||
public JButton getQuiButton() {
|
||||
return quitButton;
|
||||
}
|
||||
}
|
||||
}
|
90
src/main/java/view/ScoreView.java
Normal file
90
src/main/java/view/ScoreView.java
Normal file
@ -0,0 +1,90 @@
|
||||
// src/main/java/view/ScoreView.java
|
||||
package view;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import controller.AllScore;
|
||||
|
||||
public class ScoreView extends JPanel {
|
||||
private int seriesId;
|
||||
private int finalScore;
|
||||
private final Color hoverColor = new Color(200, 150, 100,150);
|
||||
private final Color normalColor = new Color(243, 171, 115, 150); // Couleur avec transparence
|
||||
|
||||
public ScoreView(int seriesId, int finalScore) {
|
||||
this.seriesId = seriesId;
|
||||
this.finalScore = finalScore;
|
||||
initScoreView();
|
||||
}
|
||||
|
||||
private void initScoreView() {
|
||||
setLayout(new BorderLayout());
|
||||
setBackground(normalColor);
|
||||
|
||||
// Titre de la vue de score
|
||||
JLabel title = new JLabel("Fin de la Partie", JLabel.CENTER);
|
||||
title.setFont(new Font("Helvetica", Font.BOLD, 30));
|
||||
add(title, BorderLayout.NORTH);
|
||||
|
||||
// Affichage du score actuel de la partie
|
||||
JLabel scoreLabel = new JLabel("Votre Score : " + finalScore, JLabel.CENTER);
|
||||
scoreLabel.setFont(new Font("Helvetica", Font.PLAIN, 20));
|
||||
add(scoreLabel, BorderLayout.CENTER);
|
||||
|
||||
// Panneau des scores du top 10
|
||||
JPanel topScoresPanel = new JPanel();
|
||||
topScoresPanel.setLayout(new BoxLayout(topScoresPanel, BoxLayout.Y_AXIS));
|
||||
topScoresPanel.setBorder(BorderFactory.createTitledBorder("Top 10 des Scores"));
|
||||
topScoresPanel.setBackground(normalColor);
|
||||
|
||||
ArrayList<Integer> scores = AllScore.getScoresForSeries(seriesId);
|
||||
Collections.sort(scores, Collections.reverseOrder());
|
||||
scores = new ArrayList<>(scores.subList(0, Math.min(10, scores.size())));
|
||||
|
||||
for (Integer score : scores) {
|
||||
JLabel scoreItem = new JLabel(score.toString(), JLabel.CENTER);
|
||||
scoreItem.setFont(new Font("Helvetica", Font.PLAIN, 18));
|
||||
scoreItem.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
// Marquer le score final en couleur spéciale
|
||||
if (score == finalScore) {
|
||||
scoreItem.setForeground(new Color(128, 0, 128)); // Violet pour le score actuel
|
||||
} else {
|
||||
scoreItem.setForeground(Color.BLACK);
|
||||
}
|
||||
|
||||
topScoresPanel.add(scoreItem);
|
||||
}
|
||||
|
||||
add(topScoresPanel, BorderLayout.CENTER);
|
||||
|
||||
// Bouton de retour au menu
|
||||
BtnPerso backButton = new BtnPerso("Retour au Menu");
|
||||
backButton.addActionListener(e -> App.showView(App.MENU_VIEW));
|
||||
backButton.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||
public void mouseEntered(java.awt.event.MouseEvent evt) {
|
||||
backButton.setBackground(hoverColor);
|
||||
}
|
||||
|
||||
public void mouseExited(java.awt.event.MouseEvent evt) {
|
||||
backButton.setBackground(normalColor);
|
||||
}
|
||||
});
|
||||
|
||||
// Panneau de score actuel
|
||||
JPanel currentScorePanel = new JPanel();
|
||||
currentScorePanel.setBackground(normalColor);
|
||||
JLabel currentScoreLabel = new JLabel("Score Actuel : " + finalScore);
|
||||
currentScoreLabel.setFont(new Font("Helvetica", Font.BOLD, 22));
|
||||
currentScorePanel.add(currentScoreLabel);
|
||||
|
||||
// Ajouter le panneau de score actuel et le bouton de retour
|
||||
JPanel southPanel = new JPanel(new BorderLayout());
|
||||
southPanel.add(currentScorePanel, BorderLayout.NORTH);
|
||||
southPanel.add(backButton, BorderLayout.SOUTH);
|
||||
|
||||
add(southPanel, BorderLayout.SOUTH);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user