Je commme la vue graphique
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package vue;
|
||||
|
||||
public class VueGraphique {
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user