2 pièce(s) jointe(s)
Mise à jour du GridLayout
Je suis en train de faire un petit jeu d'échec, mais j'ai un problème avec le GridLayout et le mouvement des pions.
Pièce jointe 195967
Chaque case est un Pion dont la classe Pion est le parent. Chacun des Pion a sa propre méthode PaintComponent.
Par exemple la Classe Tour :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class Tour extends Pion {
private static final long serialVersionUID = 1L;
//Appel le constructeur de la classe Pion
public Tour(String nom, boolean vie) {
super(nom, vie, true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillOval(0, 0, 100, 100);
g.setColor(Color.WHITE);
g.drawString(nom, 30, 50);
if (selected == true) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.GREEN);
g2d.setStroke(new BasicStroke(10));
g2d.drawRect(0, 0, 100, 100);
}
}
} |
Et les espaces vides sont des objets "Case" qui sont tout simplement vide, mais qui on un identifiant.
Mon problème, c'est que lorsque je cliques sur un Pion et une case par la suite, je n'arrive pas à les inter-changer, ils ne font que disparaitre.
Pièce jointe 195972
Classe Board qui gère l'interface :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| public class Board extends JPanel {
private static final long serialVersionUID = 1L;
public static boolean Selected = false;
public static Pion PionClicked = null;
public static Case CaseClicked = null;
private Pion[][] game = new Pion[8][8];
GridLayout gl = new GridLayout(8, 8);
public Board() {
createGame();
refreshLayout();
}
//Créer le tableau en 2D pour avoir l'emplacement de chaque Pion au début de la game.
private void createGame() {
Deck deckEnemy = new Deck();
Deck deck = new Deck();
for (int c = 0; c < 16; c++) {
deckEnemy.array.get(c).nom += "e";
if (c < 8) {
game[0][c] = deckEnemy.array.get(c);
} else {
game[1][c - 8] = deckEnemy.array.get(c);
}
}
int i = 0;
for (int r = 2; r < 6; r++) {
for (int c = 0; c < 8; c++) {
game[r][c] = new Case("case" + i, true);
i++;
}
}
for (int c = 15; c > -1; c--) {
if (c > 7) {
game[6][c - 8] = deck.array.get(c);
} else {
game[7][c] = deck.array.get(c);
}
}
}
//Rafraichir le Layout pour mettre les Pion à la bonne position
private void refreshLayout() {
setLayout(new GridLayout(8, 8));
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 8; c++) {
add("Case", game[r][c]);
}
}
revalidate();
}
//Lorsqu'un Pion est cliqué et une Case vide par la suite, ils changent de place
public void deplacement() {
int posP1 = 0, posP2 = 0, posC1 = 0, posC2 = 0;
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 8; c++) {
if (game[r][c].nom.equals(PionClicked.nom)) {
posP1 = r;
posP2 = c;
} else if (game[r][c].nom.equals(CaseClicked.nom)) {
posC1 = r;
posC2 = c;
}
}
}
game[posP1][posP2] = CaseClicked;
game[posC1][posC2] = PionClicked;
PionClicked.deselectionner();
CaseClicked = null;
setLayout(null);
game[posP1][posP2].revalidate();
game[posP1][posP2].repaint();
game[posC1][posC2].revalidate();
game[posC1][posC2].repaint();
refreshLayout();
}
//Créer le background
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 4; c++) {
if (r % 2 == 0) {
g.fillRect(c * 200, r * 100, 100, 100);
} else {
g.fillRect(c * 200 + 100, r * 100, 100, 100);
}
}
}
}
} |
Merci d'avance pour vos réponses!