Jeu un peu fonctionnel

Co-authored-by: Juliette Charpentier <juliette1.charpentier@etu.u-pec.fr>
This commit is contained in:
2024-05-20 16:04:42 +02:00
parent 36731cd1bb
commit 0a061021d9
4 changed files with 164 additions and 48 deletions

View File

@@ -1,36 +1,51 @@
package com.charpentierbalocchi.dorfjavatik.view;
import javax.swing.*;
import com.charpentierbalocchi.dorfjavatik.controller.ControleurJeu;
import com.charpentierbalocchi.dorfjavatik.model.Tuile;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FenetreJeu extends JFrame {
private static final int TAILLE_PLATEAU = 5; // Taille du plateau 5x5
private JButton[][] boutons; // Boutons représentant les cases du plateau
private TileButton[][] boutons; // Boutons représentant les cases du plateau
private JLabel labelScore; // Label pour afficher le score
private Tuile tuileCourante; // La tuile actuellement proposée
private ControleurJeu controleurJeu; // Instance du contrôleur de jeu
public FenetreJeu() {
public FenetreJeu(ControleurJeu controleurJeu) {
super("DorfJavaTik"); // Titre de la fenêtre
this.controleurJeu = controleurJeu;
initUI();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ferme l'application à la fermeture de la fenêtre
setLocationRelativeTo(null); // Centre la fenêtre sur l'écran
pack(); // Ajuste la taille de la fenêtre en fonction des composants
}
public void setControleurJeu(ControleurJeu controleurJeu) {
this.controleurJeu = controleurJeu;
}
private void initUI() {
// Panel principal
JPanel panelPrincipal = new JPanel(new BorderLayout());
// Panel pour le plateau de jeu
JPanel plateau = new JPanel(new GridLayout(TAILLE_PLATEAU, TAILLE_PLATEAU));
plateau.setSize(1000, 1000);
plateau.setLocation(0, 0);
boutons = new JButton[TAILLE_PLATEAU][TAILLE_PLATEAU];
boutons = new TileButton[TAILLE_PLATEAU][TAILLE_PLATEAU];
for (int i = 0; i < TAILLE_PLATEAU; i++) {
for (int j = 0; j < TAILLE_PLATEAU; j++) {
JButton bouton = new JButton();
TileButton bouton = new TileButton();
final int x = i;
final int y = j;
bouton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Logique de placement d'une tuile
controleurJeu.handleTilePlacement(x, y);
}
});
boutons[i][j] = bouton;
plateau.add(bouton);
}
@@ -46,14 +61,106 @@ public class FenetreJeu extends JFrame {
// Méthode pour mettre à jour le plateau après placement d'une tuile
public void updateBoard(int x, int y, Tuile tuile) {
JButton bouton = boutons[x][y];
bouton.setText(tuile.toString()); // Utilisez toString ou une autre méthode pour représenter visuellement la
// tuile
bouton.setEnabled(false); // Désactive le bouton pour éviter le placement d'une autre tuile à cette
TileButton bouton = boutons[x][y];
bouton.setTuile(tuile); // Mettre à jour la tuile sur le bouton
bouton.setEnabled(false); // Désactiver le bouton pour éviter le placement d'une autre tuile à cette
// position
}
public void setScore(int score) {
labelScore.setText("Score: " + score);
}
public Tuile getTuileCourante() {
return tuileCourante;
}
public void setTuileCourante(Tuile tuile) {
this.tuileCourante = tuile;
// Affichez la tuile courante dans l'interface utilisateur si nécessaire
}
public void afficherMessage(String message) {
JOptionPane.showMessageDialog(this, message);
}
// Classe interne pour représenter un bouton avec une tuile
private class TileButton extends JButton {
private Tuile tuile;
public TileButton() {
this.tuile = null;
}
public void setTuile(Tuile tuile) {
this.tuile = tuile;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (tuile != null) {
Graphics2D g2d = (Graphics2D) g.create();
int width = getWidth();
int height = getHeight();
// Dessiner le triangle nord
g2d.setColor(getColorForBiome(tuile.getNord()));
int[] xPointsNord = { 0, width / 2, width };
int[] yPointsNord = { 0, height / 2, 0 };
g2d.fillPolygon(xPointsNord, yPointsNord, 3);
// Dessiner le triangle sud
g2d.setColor(getColorForBiome(tuile.getSud()));
int[] xPointsSud = { 0, width / 2, width };
int[] yPointsSud = { height, height / 2, height };
g2d.fillPolygon(xPointsSud, yPointsSud, 3);
// Dessiner le triangle est
g2d.setColor(getColorForBiome(tuile.getEst()));
int[] xPointsEst = { width, width / 2, width };
int[] yPointsEst = { 0, height / 2, height };
g2d.fillPolygon(xPointsEst, yPointsEst, 3);
// Dessiner le triangle ouest
g2d.setColor(getColorForBiome(tuile.getOuest()));
int[] xPointsOuest = { 0, width / 2, 0 };
int[] yPointsOuest = { 0, height / 2, height };
g2d.fillPolygon(xPointsOuest, yPointsOuest, 3);
g2d.dispose();
}
}
private Color getColorForBiome(Tuile.Biome biome) {
switch (biome) {
case RIVIERE:
return Color.BLUE;
case FORET:
return Color.GREEN;
case CHAMP:
return Color.YELLOW;
case VILLAGE:
return Color.RED;
case MONTAGNE:
return Color.GRAY;
default:
return Color.BLACK;
}
}
}
// Méthode principale pour tester la fenêtre
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
ControleurJeu controleurJeu = new ControleurJeu(null); // Vous devez initialiser le contrôleur ici avec
// une instance de FenetreJeu
FenetreJeu fenetreJeu = new FenetreJeu(controleurJeu);
controleurJeu.setFenetreJeu(fenetreJeu);
fenetreJeu.setVisible(true);
}
});
}
}