Gestion déplacement sur Damier IG
Bonjour tout le monde,
Je viens vous demander un coup de main concernant mon jeu de dames.
J'ai donc développé un petit jeu de dames et je me trouve face à un problème dans la dernière partie de mon développement, j'ai réalisé la partie fonctionnelle du programme, c'est à dire, placement des pions, mouvement, saut d'un pion adverse et rafle.
Le tout est codé et fonctionne, le souci est que j'ai opté dans un 1er temps pour une représentation de mon Damier en console, l'objectif est de réaliser une interface graphique.
Faire une fenêtre avec une partie damier et une partie affichage des infos est très simple, du coup j'ai la partie fonctionnelle et la partie visuelle, mon gros problème est de faire le lien entre les 2 parties.
Je n'arrive pas a appliquer la logique de mouvement de pion de mon damier en console avec un damier en interface graphique... même après plusieurs jours de recherche!
Je viens donc vers vous pour que vous puissiez me donner des pistes et savoir si la logique appliqué pour mon damier en console est applicable pour mon IG !?
Je suis parti sur un tableau 2D de string et je joue avec les coordonnés pour déplacer mes pions (en console).
Je pensais faire de même avec des JLabel mais je n'arrive a rien ! Je reste dispo si il faut d'autres précision sur ma façon de faire.
Je vous poste les méthodes utiles pour la compréhension du problème.
Création tableau, remplissage :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public Plateau(int l, int c){
nbLigne = l;
nbCol = c;
plateau = new String[nbLigne][nbCol];
for(int i=0; i<nbLigne; i++){
for(int j=0; j<nbLigne; j++){
plateau [i][j] = " - ";
}
}
}
public void afficher(){
for(int i=0; i<nbLigne; i++){
for(int j=0; j<nbCol; j++){
System.out.print(" | " + plateau[i][j]);
}
System.out.println(" | ");
}
System.out.println();
} |
Placement des pions:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public void placerPion(int l,int c, String string){
l = l-1;
c = c-1;
if ( l<0 || c<0 || l>nbLigne || c>nbCol ){ // Test si on est bien sur le damier
System.out.println("Error!");
return;
}
if ( plateau[l][c] == " - "){
plateau[l][c] = string;
}
else{
System.out.println("Error! Cette zone est occupé ");
}
} |
Méthode déplacement haut/droite :
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
| public void deplacerPionBlancDiagDroiteHaute(String numPion){ // Pav num 9
String tmp;
for(int i=0; i<nbLigne; i++){
for(int j=0; j<nbCol; j++){
if(plateau[i][j].equals(numPion)){ // Recherche du pion blanc
try{
if(i-1 < 5 && j+1 < 5 && plateau[i-1][j+1] == " - "){ // Test limite de tableau et que la case soit vide
tmp = plateau[i][j]; // Copie position pion dans une variable temporaire
plateau[i][j] = " - "; // On remplace le pion en place par un vide
plateau[i-1][j+1] = tmp; // On déplace le pion
}
else if(plateau[i-1][j+1] == "pb1" || plateau[i-1][j+1] == "pb2" || plateau[i-1][j+1] == "pb3" || plateau[i-1][j+1] == "pb4" || plateau[i-1][j+1] == "pb5"){
System.out.println("Mouvement impossible, un de vos pions s'y trouve déjà!\n");
}
else if(i-1 >= 0 && j+1 < 5 && plateau[i-1][j+1] != " - "){ // Ou si l'emplacement voulu n'est pas vide....
if (plateau[i-1][j+1] == "pn1" || plateau[i-1][j+1] == "pn2" || plateau[i-1][j+1] == "pn3" || plateau[i-1][j+1] == "pn4" || plateau[i-1][j+1] == "pn5"){// On regarde si un des pions adverse s'y trouve
if (plateau[i-2][j+2] == " - "){ // Si un pion adverse si trouve on regarde le contenu de la case se trouvant derriere le pion pour savoir si on peut le manger
tmp = plateau[i][j]; // On place le contenu de la position de base dans une variable temporaire "tmp"
plateau[i][j] = " - "; // On remplace notre position de base par un vide
plateau[i-1][j+1] = " - "; // Le pion adverse disparait
plateau[i-2][j+2] = tmp; // Nouvelle position du pion qui vient de manger un pion adverse
System.out.println("Pion adverse mangé!");
deplacementMultipleBlanc(numPion ,i-2, j+2);
}
else System.out.println("Impossible de sauter ce pion!\n");
break;
}
}
}catch (ArrayIndexOutOfBoundsException e){}
}
}
}
} |
Création IG:
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
| public Damier() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // JFrame
setSize(700,500);
JPanel panelDamier = new JPanel(); // JPanel affichage damier
panelDamier.setLayout(new GridLayout(5,5));
getContentPane().add(panelDamier, BorderLayout.CENTER);
JPanel panelInfo = new JPanel(); // JPanel affichage information
panelInfo.setBackground(Color.WHITE);
GridBagLayout gblPanelInfo = new GridBagLayout();
gblPanelInfo.columnWidths = new int[] {200};
gblPanelInfo.rowHeights = new int[] {500};
panelInfo.setLayout(gblPanelInfo);
panelInfo.setBorder(new LineBorder(Color.DARK_GRAY, 3, true));
getContentPane().add(panelInfo, BorderLayout.EAST);
creationPlateau(panelDamier);
setVisible(true);
}
// Création Damier
public void creationPlateau(JPanel panelDamier){
JLabel damier[][] = new JLabel[5][5];
for (int i = 0; i<damier.length; i++){
for(int j = 0; j<damier.length; j++){
damier[i][j] = new JLabel();
damier[i][j].setSize(new Dimension(100,100));
damier[i][j].setOpaque(true);
if((i+j)% 2 == 0){
damier[i][j].setBackground(Color.gray);
}
else{
damier[i][j].setBackground(Color.lightGray);
}
panelDamier.add(damier[i][j]);
}
}
} |
Merci d'avance pour le temps passé sur mon problème !