Je commme la vue graphique

This commit is contained in:
HP_pellel
2025-08-12 22:18:58 +02:00
parent d5a0e402d5
commit 117a58acbc
71 changed files with 1225 additions and 105 deletions
+94
View File
@@ -0,0 +1,94 @@
package vue;
import modele.piece.Piece;
import java.awt.*;
import java.lang.ref.Reference;
import modele.Case;
import javax.swing.*;
public class CaseSwingUI extends JPanel {
private int ligne;
private int colonne;
private Color couleurdeFond;
private boolean selectionnee = false;
private final JLabel label = new JLabel("", SwingConstants.CENTER);
private final Case caseModele; // reference vers la case de le modele
public CaseSwingUI(Color couleurdeFond, int ligne, int colonne, Case caseModele) {
this.couleurdeFond = couleurdeFond;
this.ligne = ligne;
this.colonne = colonne;
this.caseModele = caseModele;
setOpaque(true);
setBackground(couleurdeFond);
setPreferredSize(new Dimension(64, 64));
setLayout(new BorderLayout());
// Ajout du label à la case
label.setFont(new Font("SansSerif", Font.BOLD, 28));
add(label, BorderLayout.CENTER);
this.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));
this.updateFromModel(); // Mise à jour de l'affichage à partir du modèle
}
@Override
protected void paintComponent(Graphics pinceaux) {
super.paintComponent(pinceaux); // Pour effacer l'ancien objet
// Couleur de fond (jaune)
if(selectionnee){
this.setBackground(new Color(255, 215, 0)); // Jaune doux sélectionnée
}else{
this.setBackground(this.couleurdeFond);
}
}
// Rafrachit le contenu visuel depuis le model
public void updateFromModel(){
Piece p = (caseModele != null) ? caseModele.getPiece(): null;
label.setText(toUnicode(p));
label.setForeground(Color.BLACK);
repaint();
}
private String toUnicode(Piece piece) {
// Conversion du symbole en caractère Unicode
if (piece == null) return "";
String symbole = piece.getSymbole();
return switch (symbole) {
case "BP" -> "";
case "BC" -> "";
case "BF" -> "";
case "BT" -> "";
case "BQ" -> "";
case "BK" -> "";
case "NP" -> "";
case "NC" -> "";
case "NF" -> "";
case "NT" -> "";
case "NQ" -> "";
case "NK" -> "";
default -> symbole;
};
}
// Getters/setters utiles pour l'IHM
public Piece getPiece() { return piece; }
public void setPiece(Piece piece) { this.piece = piece; }
public boolean isSelectionnee() { return selectionnee; }
public void setSelectionnee(boolean selectionnee) {
this.selectionnee = selectionnee;
this.setBorder(BorderFactory.createLineBorder(selectionnee ? Color.ORANGE : Color.DARK_GRAY,selectionnee ? 4 : 2));
// Repaint pour mettre à jour la couleur de fond
repaint();
}
public int getLigne() { return ligne; }
public int getColonne() { return colonne; }
}
+44
View File
@@ -0,0 +1,44 @@
package vue;
import modele.Case;
import modele.Plateau;
import javax.swing.*;
import java.awt.*;
public class PlateauSwingUI extends JPanel {
private final CaseSwingUI[][] cases = new CaseSwingUI[8][8];
private final Plateau plateauModele;
public PlateauSwingUI(Plateau plateauModele) {
this.plateauModele = plateauModele;
setLayout(new GridLayout(8, 8)); // Création de la grille 8x8
for (int ligne = 0; ligne < 8; ligne++) {
for (int colonne = 0; colonne < 8; colonne++) {
// Détermination de la couleur de fond
boolean claire = ((ligne + colonne) % 2 == 0);
Color couleur = claire ? new Color(240, 217, 181) : new Color(181, 136, 99);
// Récupère la case du modèle, ne la crée pas !
var caseModele = plateauModele.getCase(ligne, colonne);
// Création de la case SwingUI
var caseUI = new CaseSwingUI(couleur, ligne, colonne, caseModele);
cases[ligne][colonne] = caseUI; // Stockage de la case dans le tableau
add(caseUI);
}
}
}
// pour rafraîchir l'affichage
public void rafraichir() {
for (int ligne = 0; ligne < 8; ligne++) {
for (int colonne = 0; colonne < 8; colonne++) {
// Mettre à jour l'état de chaque case
cases[ligne][colonne].updateFromModel();
}
}
revalidate(); // vérifie la disposition des composants
repaint();
}
public CaseSwingUI getCase(int ligne, int colonne) {
return cases[ligne][colonne];
s}
+7 -2
View File
@@ -1,5 +1,10 @@
package vue;
public class Vue {
import modele.Coup;
import modele.Plateau;
public interface Vue {
Coup demanderCoup(Plateau plateau); // Demande un coup au joueur
void afficherPlateau(Plateau plateau); // Affiche le plateau actuel
void afficherMessage(String message); // Affiche un message (texte)
}
+71 -1
View File
@@ -1,5 +1,75 @@
package vue;
public class VueConsole {
import java.util.Scanner;
import modele.Case;
import modele.Coup;
import modele.Plateau;
import modele.piece.Piece;
public class VueConsole implements Vue {
@Override
public Coup demanderCoup(Plateau plateau) {
// Implémentation pour demander un coup à l'utilisateur
Scanner scanner = new Scanner(System.in);
System.out.print("Entrez votre coup (ex: e2 e4) : ");
String input = scanner.nextLine();
// Traitement de l'entrée de l'utilisateur
String[] positions = input.split(" ");
if (positions.length != 2) {
System.out.println("Format de coup invalide.");
return null;
}
String positionDepart = positions[0];
String positionArrivee = positions[1];
int[] coordDepart = convertirPositionEnCoordonnees(positionDepart);
int[] coordArrivee = convertirPositionEnCoordonnees(positionArrivee);
// covertion en colonne et ligne
int ligneDepart = coordDepart[0]; // c'est le y
int colonneDepart = coordDepart[1]; // c'est le x
int ligneArrivee = coordArrivee[0]; // c'est le y
int colonneArrivee = coordArrivee[1]; // c'est le x
// Création du coup
return new Coup(ligneDepart, colonneDepart, ligneArrivee, colonneArrivee);
}
@Override
public void afficherPlateau(Plateau plateau) {
System.out.println("\n a b c d e f g h");
System.out.println(" +----+----+----+----+----+----+----+----+");
for (int ligne = 0; ligne < 8; ligne++) {
System.out.print((ligne) + " |");
for (int col = 0; col < 8; col++) {
Case caseActuelle = plateau.getCase(ligne, col);
if (caseActuelle.estVide()) {
System.out.print(" |");
} else {
Piece piece = caseActuelle.getPiece();
System.out.print(" " + piece.getSymbole() + " |");
}
}
System.out.println(" " + ligne);
System.out.println(" +----+----+----+----+----+----+----+----+");
}
System.out.println(" a b c d e f g h\n");
}
@Override
public void afficherMessage(String message) {
System.out.println(message); // Affiche le message dans la console
}
private int[] convertirPositionEnCoordonnees(String position) {
int col = position.charAt(0) - 'a'; // Convertit 'a' à 'h' en 0 à 7
int ligne = Character.getNumericValue(position.charAt(1)); // Convertit '0' à '7'
return new int[]{ligne, col};
}
}
-5
View File
@@ -1,5 +0,0 @@
package vue;
public class VueGraphique {
}
+44
View File
@@ -0,0 +1,44 @@
package vue;
import javax.swing.JFrame;
import java.awt.*;
import modele.Coup;
import modele.Plateau;
public class VueGraphiqueSwing implements Vue {
JFrame fen = new JFrame("CHESS GAME");
private final PlateauSwingUI plateauUI;
public VueGraphiqueSwing(Plateau plateau) {
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setResizable(false);
plateauUI = new PlateauSwingUI(plateau); // Passe le modèle
fen.add(plateauUI, BorderLayout.CENTER);
fen.setSize(800, 800);
//fen.pack(); // ajuste la taille selon le contenu
fen.setLocationRelativeTo(null); // centre la fenêtre à l'écran
fen.setVisible(true);
}
@Override
public void afficherMessage(String message) {
// Affichage du message dans la fenêtre graphique
}
@Override
public Coup demanderCoup(Plateau plateau) {
// Demande un coup au joueur
return null;
}
@Override
public void afficherPlateau(Plateau plateau) {
plateauUI.rafraichir();
}
}