MISE A JOUR
This commit is contained in:
+201
-30
@@ -1,58 +1,208 @@
|
||||
package vue;
|
||||
|
||||
import modele.piece.Piece;
|
||||
import java.awt.*;
|
||||
import java.lang.ref.Reference;
|
||||
import modele.Case;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import javax.swing.*;
|
||||
|
||||
public class CaseSwingUI extends JPanel {
|
||||
private int ligne;
|
||||
private int colonne;
|
||||
|
||||
private Color couleurdeFond;
|
||||
import modele.Case;
|
||||
import modele.piece.Piece;
|
||||
import modele.Couleur;
|
||||
|
||||
public class CaseSwingUI extends JPanel implements MouseListener{
|
||||
|
||||
|
||||
private Color couleurCaseClaire;
|
||||
private Color couleurCaseFoncee;
|
||||
private Color couleurCaseSelection;
|
||||
private Color couleurCasePrecedente;
|
||||
|
||||
|
||||
private final int ligne;
|
||||
private final int colonne;
|
||||
|
||||
private boolean estDernierCoupOrigine = false;
|
||||
private boolean estDernierCoupDestination = false;
|
||||
|
||||
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;
|
||||
public CaseSwingUI(String style, int ligne, int colonne, Case caseModele) {
|
||||
switch (style) {
|
||||
case "RETRO_BOIS" -> {
|
||||
// Style Bois rétro :
|
||||
couleurCaseClaire = new Color(222, 184, 135); // Burlywood (bois clair rétro)
|
||||
couleurCaseFoncee = new Color(139, 69, 19); // SaddleBrown (bois foncé rétro)
|
||||
couleurCaseSelection = new Color(205, 133, 63); // Peru (orange/brun vieilli)
|
||||
}
|
||||
case "METAL_FUTURISTE" -> {
|
||||
// Style métallique Futuriste
|
||||
couleurCaseClaire = new Color(192, 192, 192); // Silver
|
||||
couleurCaseFoncee = new Color(105, 105, 105); // DimGray
|
||||
couleurCaseSelection = new Color(0, 255, 255); // Cyan flashy (effet néon)
|
||||
}
|
||||
case "BOIS_CLAIR" -> {
|
||||
// Style Bois clair
|
||||
couleurCaseClaire = new Color(240, 218, 181); // Beige clair
|
||||
couleurCaseFoncee = new Color(181, 136, 99); // Marron clair
|
||||
couleurCaseSelection = new Color(209, 83, 71); // Rouge-orangé
|
||||
couleurCasePrecedente = new Color(255, 112, 99); // Rouge clair
|
||||
}
|
||||
case "JAUNE_CHALEUREUX" -> {
|
||||
// Style Jaune Chaleureux
|
||||
couleurCaseClaire = new Color(253, 231, 76); // Jaune vif
|
||||
couleurCaseFoncee = new Color(227, 101, 91); // Rouge doux
|
||||
couleurCaseSelection = new Color(248, 161, 87); // Orange doux
|
||||
}
|
||||
case "VINTAGE_PASTEL" -> {
|
||||
// Style vintage pastel
|
||||
couleurCaseClaire = new Color(246, 229, 189); // Beige pastel
|
||||
couleurCaseFoncee = new Color(249, 125, 125); // Rose brique clair
|
||||
couleurCaseSelection = new Color(200, 90, 90); // Rouge passé
|
||||
}
|
||||
default -> {
|
||||
couleurCaseClaire = new Color(255, 255, 255); // Blanc
|
||||
couleurCaseFoncee = new Color(200, 200, 200); // Gris
|
||||
couleurCaseSelection = new Color(100, 100, 100); // Gris foncé
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.ligne = ligne;
|
||||
this.colonne = colonne;
|
||||
this.caseModele = caseModele;
|
||||
|
||||
// Gestion de la couleur
|
||||
if ((ligne + colonne) % 2 == 0) {
|
||||
setBackground(this.couleurCaseClaire); // couleur claire
|
||||
} else {
|
||||
setBackground(this.couleurCaseFoncee); // couleur foncée
|
||||
}
|
||||
|
||||
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));
|
||||
label.setFont(new Font("SansSerif", Font.BOLD, 60));
|
||||
add(label, BorderLayout.CENTER);
|
||||
|
||||
this.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));
|
||||
this.updateFromModel(); // Mise à jour de l'affichage à partir du modèle
|
||||
this.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
|
||||
this.updateFromModel(); // Mise à jour de l'affichage à partir du modèle
|
||||
|
||||
|
||||
//Ajoutons l'ecouteur
|
||||
addMouseListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
Container parent = this.getParent();
|
||||
while(parent != null && !(parent instanceof PlateauSwingUI)) {
|
||||
parent = parent.getParent();
|
||||
}
|
||||
if (parent instanceof PlateauSwingUI plateau) {
|
||||
plateau.selectionnerCase(this);
|
||||
}
|
||||
//System.out.println("Case cliquée : " + ligne + ", " + colonne);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintComponent(Graphics pinceaux) {
|
||||
super.paintComponent(pinceaux); // Pour effacer l'ancien objet
|
||||
|
||||
Graphics2D g2d = (Graphics2D) pinceaux.create();
|
||||
// Appliquer l'anti-aliasing pour des bords plus doux
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
|
||||
int w = getWidth();
|
||||
int h = getHeight();
|
||||
|
||||
// Couleur de fond (jaune)
|
||||
//System.out.println("Selectionner debug: "+selectionnee );
|
||||
if(selectionnee){
|
||||
this.setBackground(new Color(255, 215, 0)); // Jaune doux sélectionnée
|
||||
this.setBackground(couleurCaseSelection);
|
||||
|
||||
// Pour le truc de dégradé
|
||||
// //Dégradé radial: claire au centre, foncé aux bords
|
||||
// Color centre = new Color(255, 150, 130); // plus claire au centre
|
||||
// Color bord = new Color(200, 50, 40); // plus foncé aux bords
|
||||
// float[] dist = {0.0f, 1.0f};
|
||||
// Color[] colors = {centre, bord};
|
||||
// RadialGradientPaint gradient = new RadialGradientPaint(
|
||||
// w / 2f, h / 2f, Math.max(w, h) / 2f, // centre X, centre Y, rayon
|
||||
// dist, // fractions
|
||||
// colors // couleurs
|
||||
// );
|
||||
|
||||
// g2d.setPaint(gradient);
|
||||
// g2d.fillRect(0, 0, w, h);
|
||||
|
||||
// //petit contour plus sombre
|
||||
// g2d.setColor(new Color(150, 30, 30));
|
||||
// g2d.drawRect(0, 0, w-1, h-1);
|
||||
|
||||
|
||||
|
||||
}else{
|
||||
this.setBackground(this.couleurdeFond);
|
||||
// Couleur normale
|
||||
//this.setBackground(this.couleurdeFond);
|
||||
if ((ligne + colonne) % 2 == 0) {
|
||||
g2d.setColor(couleurCaseClaire);
|
||||
} else {
|
||||
g2d.setColor(couleurCaseFoncee);
|
||||
}
|
||||
g2d.fillRect(0, 0, w, h);
|
||||
|
||||
}
|
||||
|
||||
// Surbrillance du dernier coup
|
||||
if(estDernierCoupOrigine) {
|
||||
g2d.setColor(couleurCasePrecedente);
|
||||
g2d.fillRect(0, 0, w, h);
|
||||
}
|
||||
|
||||
if(estDernierCoupDestination) {
|
||||
g2d.setColor(couleurCaseSelection);
|
||||
g2d.fillRect(0, 0, w, h);
|
||||
}
|
||||
|
||||
g2d.dispose(); // Libération des ressources graphiques
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 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();
|
||||
if(p != null) {
|
||||
label.setForeground(new Color(0,0,0));
|
||||
if (caseModele.getPiece().getCouleur() == Couleur.BLANC) {
|
||||
label.setForeground(new Color(250,250,250));
|
||||
}else{
|
||||
label.setForeground(new Color(30,30,30));
|
||||
}
|
||||
}
|
||||
repaint(); // double appel car setForeground le fais deja
|
||||
}
|
||||
|
||||
private String toUnicode(Piece piece) {
|
||||
@@ -60,35 +210,56 @@ public class CaseSwingUI extends JPanel {
|
||||
if (piece == null) return "";
|
||||
String symbole = piece.getSymbole();
|
||||
return switch (symbole) {
|
||||
case "BP" -> "♙";
|
||||
case "BC" -> "♘";
|
||||
case "BF" -> "♗";
|
||||
case "BT" -> "♖";
|
||||
case "BQ" -> "♕";
|
||||
case "BK" -> "♔";
|
||||
case "BP" -> "♟";
|
||||
case "BC" -> "♞";
|
||||
case "BF" -> "♝";
|
||||
case "BT" -> "♜";
|
||||
case "BR" -> "♛";
|
||||
case "BO" -> "♚";
|
||||
case "NP" -> "♟";
|
||||
case "NC" -> "♞";
|
||||
case "NF" -> "♝";
|
||||
case "NT" -> "♜";
|
||||
case "NQ" -> "♛";
|
||||
case "NK" -> "♚";
|
||||
case "NR" -> "♛";
|
||||
case "NO" -> "♚";
|
||||
default -> symbole;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// Getters/setters utiles pour l'IHM
|
||||
public Piece getPiece() { return piece; }
|
||||
public void setPiece(Piece piece) { this.piece = piece; }
|
||||
public Piece getPiece() {
|
||||
return (caseModele != null) ? caseModele.getPiece() : null;
|
||||
}
|
||||
public void setPiece(Piece piece) {
|
||||
if(caseModele !=null ){
|
||||
caseModele.setPiece(piece);
|
||||
}
|
||||
updateFromModel();
|
||||
}
|
||||
|
||||
// Getters pour l'état de sélection
|
||||
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));
|
||||
//this.setBorder(BorderFactory.createLineBorder(selectionnee ? new Color(248, 161, 87) : Color.DARK_GRAY,selectionnee ? 3 : 1));
|
||||
// Repaint pour mettre à jour la couleur de fond
|
||||
repaint();
|
||||
}
|
||||
|
||||
// Gestion du dernier coup
|
||||
public void setLastOrigin(boolean estDernierCoupOrigine) {
|
||||
this.estDernierCoupOrigine = estDernierCoupOrigine;
|
||||
repaint();
|
||||
}
|
||||
public void setLastDestination(boolean estDernierCoupDestination) {
|
||||
this.estDernierCoupDestination = estDernierCoupDestination;
|
||||
repaint();
|
||||
}
|
||||
|
||||
// Getters pour la position de la case
|
||||
public int getLigne() { return ligne; }
|
||||
public int getColonne() { return colonne; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+105
-10
@@ -1,26 +1,43 @@
|
||||
package vue;
|
||||
import modele.Case;
|
||||
import modele.Plateau;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import javax.swing.*;
|
||||
import modele.Coup;
|
||||
import modele.Partie;
|
||||
import modele.Plateau;
|
||||
import modele.joueur.Joueur;
|
||||
|
||||
|
||||
|
||||
public class PlateauSwingUI extends JPanel {
|
||||
|
||||
private final CaseSwingUI[][] cases = new CaseSwingUI[8][8];
|
||||
private final Plateau plateauModele;
|
||||
private final VueGraphiqueSwing vueGraphiqueSwing;
|
||||
private final Partie partieModel;
|
||||
|
||||
// Pour la gestion du dernier coup
|
||||
private Point prevOrigine = null;
|
||||
private Point prevDestination = null;
|
||||
|
||||
private CaseSwingUI caseSelectionnee = null;
|
||||
|
||||
|
||||
|
||||
public PlateauSwingUI(Plateau plateauModel, Partie partieModel,VueGraphiqueSwing vueGraphiqueSwing) {
|
||||
this.plateauModele = plateauModel;
|
||||
this.partieModel = partieModel;
|
||||
this.vueGraphiqueSwing = vueGraphiqueSwing;
|
||||
|
||||
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);
|
||||
//boolean estCaseClaire = ((ligne + colonne) % 2 == 0);
|
||||
|
||||
// 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);
|
||||
var caseUI = new CaseSwingUI(plateauModele.getStyle(), ligne, colonne, caseModele);
|
||||
cases[ligne][colonne] = caseUI; // Stockage de la case dans le tableau
|
||||
add(caseUI);
|
||||
}
|
||||
@@ -29,9 +46,10 @@ public class PlateauSwingUI extends JPanel {
|
||||
|
||||
// pour rafraîchir l'affichage
|
||||
public void rafraichir() {
|
||||
System.out.println("PlateauSwingUI : rafraichir() appelée");
|
||||
for (int ligne = 0; ligne < 8; ligne++) {
|
||||
for (int colonne = 0; colonne < 8; colonne++) {
|
||||
// Mettre à jour l'état de chaque case
|
||||
//cases[ligne][colonne].setSelectionnee(false);
|
||||
cases[ligne][colonne].updateFromModel();
|
||||
}
|
||||
}
|
||||
@@ -41,4 +59,81 @@ public class PlateauSwingUI extends JPanel {
|
||||
|
||||
public CaseSwingUI getCase(int ligne, int colonne) {
|
||||
return cases[ligne][colonne];
|
||||
s}
|
||||
}
|
||||
|
||||
public void applyLastMove(Coup coup) {
|
||||
// 1) Netoyer ancien
|
||||
if (prevOrigine != null) {
|
||||
cases[prevOrigine.x][prevOrigine.y].setLastOrigin(false);
|
||||
cases[prevOrigine.x][prevOrigine.y].repaint();
|
||||
}
|
||||
|
||||
if (prevDestination != null) {
|
||||
cases[prevDestination.x][prevDestination.y].setLastDestination(false);
|
||||
cases[prevDestination.x][prevDestination.y].repaint();
|
||||
}
|
||||
|
||||
|
||||
// 2) Appliquons le nouveau coup
|
||||
if (coup != null) {
|
||||
Point O = new Point(coup.getOrigine().x, coup.getOrigine().y);
|
||||
Point D = new Point(coup.getDestination().x, coup.getDestination().y);
|
||||
prevDestination = D;
|
||||
|
||||
cases[O.x][O.y].setLastOrigin(true);
|
||||
cases[D.x][D.y].setLastDestination(true);
|
||||
|
||||
prevOrigine = O;
|
||||
prevDestination = D;
|
||||
|
||||
// 3) Repaint des cases concernées
|
||||
cases[O.x][O.y].repaint();
|
||||
cases[D.x][D.y].repaint();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Méthode à appeler depuis CaseSwingUI quand une case est cliquée
|
||||
public void selectionnerCase(CaseSwingUI caseCliquee) {
|
||||
|
||||
Joueur joueur = partieModel.getJoueurActif();
|
||||
|
||||
// Etat 0 pas de case selection au paravant
|
||||
if (caseSelectionnee == null) {
|
||||
//1) il faut une piece
|
||||
var piece = caseCliquee.getPiece();
|
||||
if(piece == null) return; // Pas de pièce sur la case cliquée, rien à faire
|
||||
|
||||
// 2) et que la pièce appartient au joueur actif
|
||||
if(piece.getCouleur() != joueur.getCouleur()) return;
|
||||
|
||||
caseSelectionnee = caseCliquee;
|
||||
caseCliquee.setSelectionnee(true);
|
||||
|
||||
// Etat 1 une origine est deja selectionnée
|
||||
}else{
|
||||
if(caseCliquee == caseSelectionnee ){ // a revoir
|
||||
// re-clique sur la meme case = annuller
|
||||
caseCliquee.setSelectionnee(false);
|
||||
caseSelectionnee = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// 2e clic = destination on fabrique le coup
|
||||
Coup coup = new Coup(
|
||||
caseSelectionnee.getLigne(), caseSelectionnee.getColonne(),
|
||||
caseCliquee.getLigne(), caseCliquee.getColonne()
|
||||
);
|
||||
|
||||
// Rreset visuel + etat
|
||||
caseSelectionnee.setSelectionnee(false);
|
||||
caseSelectionnee = null;
|
||||
|
||||
// transmettre le coup a la vue
|
||||
vueGraphiqueSwing.recevoirCoup(coup);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,4 +7,5 @@ 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)
|
||||
void setDernierCoup(Coup coup); // Met à jour le dernier coup joué
|
||||
}
|
||||
|
||||
@@ -71,5 +71,11 @@ public class VueConsole implements Vue {
|
||||
int ligne = Character.getNumericValue(position.charAt(1)); // Convertit '0' à '7'
|
||||
return new int[]{ligne, col};
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setDernierCoup(Coup coup) {
|
||||
// Implémentation pour mettre à jour le dernier coup joué
|
||||
System.out.println("Dernier coup joué : " + coup);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,30 +1,98 @@
|
||||
package vue;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import java.awt.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import modele.Coup;
|
||||
import modele.Partie;
|
||||
import modele.Plateau;
|
||||
|
||||
|
||||
public class VueGraphiqueSwing implements Vue {
|
||||
private Coup c;
|
||||
JFrame fen = new JFrame("CHESS GAME");
|
||||
private final PlateauSwingUI plateauUI;
|
||||
//private Coup dernierCoup;
|
||||
|
||||
public VueGraphiqueSwing(Plateau plateau) {
|
||||
// Journal systeme
|
||||
private final JTextArea zoneSystem = new JTextArea(10, 24);
|
||||
private final JScrollPane scrollSystem = new JScrollPane(zoneSystem);
|
||||
|
||||
// zone de message for chat
|
||||
private final JTextArea zoneChat = new JTextArea(10, 24);
|
||||
private final JScrollPane scrollChat = new JScrollPane(zoneChat);
|
||||
private final JTextField champChat = new JTextField();
|
||||
private final JButton btnEnvoyer = new JButton("Envoyer");
|
||||
|
||||
public VueGraphiqueSwing(Partie partie) {
|
||||
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
fen.setResizable(false);
|
||||
fen.setLayout(new BorderLayout());
|
||||
|
||||
plateauUI = new PlateauSwingUI(plateau); // Passe le modèle
|
||||
//Centre : Gestion du plateau
|
||||
plateauUI = new PlateauSwingUI(partie.getPlateau(), partie, this); // Passe le modèle
|
||||
fen.add(plateauUI, BorderLayout.CENTER);
|
||||
|
||||
|
||||
fen.setSize(800, 800);
|
||||
// Journal systeme (droite, haut)
|
||||
zoneSystem.setEditable(false);
|
||||
zoneSystem.setLineWrap(true);
|
||||
zoneSystem.setWrapStyleWord(true);
|
||||
zoneSystem.setBorder(BorderFactory.createTitledBorder("System"));
|
||||
|
||||
// chat
|
||||
zoneChat.setEditable(false);
|
||||
zoneChat.setLineWrap(true);
|
||||
zoneChat.setWrapStyleWord(true);
|
||||
zoneChat.setBorder(BorderFactory.createTitledBorder("Chat"));
|
||||
|
||||
JPanel chatBas = new JPanel(new BorderLayout(6,0));
|
||||
chatBas.add(champChat, BorderLayout.CENTER);
|
||||
chatBas.add(btnEnvoyer, BorderLayout.EAST);
|
||||
|
||||
JPanel chatPanel = new JPanel(new BorderLayout(0, 4));
|
||||
chatPanel.add(scrollChat, BorderLayout.CENTER);
|
||||
chatPanel.add(chatBas, BorderLayout.SOUTH);
|
||||
|
||||
// Colonne droite : systeme (en haut) et chat (en bas)
|
||||
JPanel coloneDroite = new JPanel( new BorderLayout(0, 8));
|
||||
coloneDroite.add(scrollSystem, BorderLayout.CENTER);
|
||||
coloneDroite.add(chatPanel, BorderLayout.SOUTH);
|
||||
|
||||
fen.add(coloneDroite, BorderLayout.EAST);
|
||||
|
||||
// Ecouteur pour envoyer le chat
|
||||
btnEnvoyer.addActionListener(e -> envoyerChat());
|
||||
champChat.addActionListener(e -> envoyerChat());
|
||||
|
||||
fen.setSize(1000, 800);
|
||||
//fen.pack(); // ajuste la taille selon le contenu
|
||||
fen.setLocationRelativeTo(null); // centre la fenêtre à l'écran
|
||||
|
||||
fen.setVisible(true);
|
||||
}
|
||||
|
||||
public void envoyerChat() {
|
||||
String message = champChat.getText().trim();
|
||||
if (!message.isEmpty()) {
|
||||
zoneChat.append("Vous: " + message + "\n");
|
||||
champChat.setText("");
|
||||
}
|
||||
}
|
||||
|
||||
// API de la Vue
|
||||
public void afficherMessageSysteme(String msg) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
zoneSystem.append(msg + "\n");
|
||||
zoneSystem.setCaretPosition(zoneSystem.getDocument().getLength());
|
||||
});
|
||||
}
|
||||
|
||||
public void afficherMessageChat(String auteur, String msg) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
zoneChat.append("[" + auteur + "]: " + msg + "\n");
|
||||
zoneChat.setCaretPosition(zoneChat.getDocument().getLength());
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afficherMessage(String message) {
|
||||
// Affichage du message dans la fenêtre graphique
|
||||
@@ -32,8 +100,17 @@ public class VueGraphiqueSwing implements Vue {
|
||||
|
||||
@Override
|
||||
public Coup demanderCoup(Plateau plateau) {
|
||||
// Demande un coup au joueur
|
||||
return null;
|
||||
while(this.c == null) {
|
||||
try {
|
||||
Thread.sleep(20); // Attendre un court instant avant de vérifier à nouveau
|
||||
} catch (InterruptedException ex) {
|
||||
Thread.currentThread().interrupt();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Coup r = c;
|
||||
c = null; // pret pour le coup suivant
|
||||
return r;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -41,4 +118,14 @@ public class VueGraphiqueSwing implements Vue {
|
||||
plateauUI.rafraichir();
|
||||
}
|
||||
|
||||
public void recevoirCoup(Coup coup) {
|
||||
this.c = coup;
|
||||
System.out.println("Coup reçu : " + coup);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDernierCoup(Coup coup) {
|
||||
//this.dernierCoup = coup;
|
||||
plateauUI.applyLastMove(coup);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user