Interface jeu de dames (is back)

Interface jeu de dames (is back) - Java - Programmation

Marsh Posté le 24-02-2008 à 19:16:40    

Hello les gens,
de retour avec mon jeu de dames. En fait mon soucis est le suivant, j'utilise un gridLayout de 10X10 pour faire mon damier. Le truc c'est que dans chaque case de ce gridLayout je veux insérer une case (le 2nd bout de code), une case hérite de JButton (pour que je puisse stocker sa location sur la grille). Le truc c'est que je n'arrive pas à insérer une image (cf la partie commentée dans le 2nd bout de code). En effet j'aimerai pouvoir ainsi mettre une image représentant un pion sur une case et sinon une image noire (idem avec une image blanche sur les cases blanches sauf qu'il n'y a pas de pions). Quand je met setBackground() ça marche nickel mais des que je me sers d'une ImageIcon soit j'ai mon damier mais que composé de Jbutton ou rien. Une idée ?
 
 
Ma vue :

Code :
  1. package Dames.Vue;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.GridLayout;
  6. import javax.swing.*;
  7. import javax.swing.border.Border;
  8. import Dames.modele.Case;
  9. public class Vue {
  10. private JFrame fenetre;
  11. private JPanel plateau;
  12. private JPanel score;
  13. private JPanel action;
  14. private JMenuBar barre;
  15. private Case cases[][];
  16. public Vue()
  17. {
  18.  fenetre = new JFrame();
  19.  fenetre.setSize(600,600);
  20.  fenetre.setTitle("Jeu de dames" );
  21.  fenetre.setResizable(false);
  22.  fenetre.setLayout(new BorderLayout());
  23.  fenetre.setVisible(true);
  24.  barre = new JMenuBar();
  25.  JMenu fichier = new JMenu("Fichier" );
  26.  JMenuItem nouveau = new JMenuItem("Nouvelle partie" );
  27.  JMenuItem Apropos = new JMenuItem("A propos" );
  28.  JMenuItem quitter = new JMenuItem("Quitter" );
  29.  Apropos.addActionListener(new FenetreAP());
  30.  fichier.add(nouveau);
  31.  fichier.add(Apropos);
  32.  fichier.add(quitter);
  33.  barre.add(fichier);
  34.  fenetre.add(barre,BorderLayout.NORTH);
  35.  score = new JPanel();
  36.  score.add(new JLabel("Score : blablablabla" ));
  37.  fenetre.add(score,BorderLayout.EAST);
  38.  score.setBorder(BorderFactory.createLineBorder(Color.black));
  39.  action = new JPanel();
  40.  action.add(new JLabel("Déplacement impossible" ));
  41.  fenetre.add(action,BorderLayout.SOUTH);
  42.  action.setBorder(BorderFactory.createLineBorder(Color.black));
  43.  plateau = new JPanel();
  44.  plateau.setLayout(new GridLayout(10, 10));
  45.  cases = new Case[10][10];
  46.  for(int i=0;i<10;i++){
  47.   cases[i]=new Case[10];
  48.   for(int j=0;j<10;j++)
  49.   {
  50.    if(((i+j)%2)==0)
  51.     cases[i][j] = new Case(i,j,"Blanc",false);
  52.    else cases[i][j] = new Case(i,j,"Noir",false);
  53.    plateau.add(cases[i][j]);
  54.   }
  55.  }
  56.  fenetre.add(plateau, BorderLayout.CENTER);
  57. }
  58. }


 
 
Le code d'une case :

Code :
  1. package Dames.modele;
  2. import java.awt.Color;
  3. import javax.swing.Icon;
  4. import javax.swing.ImageIcon;
  5. import javax.swing.JButton;
  6. import javax.swing.event.EventListenerList;
  7. import Dames.controleur.caseListener;
  8. public class Case extends JButton {
  9. private int colonne;
  10. private int ligne;
  11. private String couleur;
  12. private boolean estOccupee;
  13. private EventListenerList listeners;
  14. public Case(int colonne, int ligne, String couleur, boolean estOccupee)
  15. {
  16.  super();
  17.  setCouleur(couleur);
  18.  setColonne(colonne);
  19.  setLigne(ligne);
  20.  setEstOccupee(estOccupee);
  21.  listeners = new EventListenerList();
  22.  addActionListener(new caseListener());
  23. }
  24. public String getCouleur() {
  25.  return couleur;
  26. }
  27. public void setCouleur(String couleur) {
  28.  this.couleur = couleur;
  29.  if(couleur.compareTo("Blanc" )==0)
  30.  {
  31.   //setIcon(new ImageIcon("caseBlanche.GIF" ));
  32.   setBackground(Color.white);
  33.  }
  34.  if(couleur.compareTo("Noir" )==0)
  35.  {
  36.   //setIcon(new ImageIcon("caseNoire.GIF" ));
  37.   setBackground(Color.black);
  38.  }
  39. }
  40. public int getColonne() {
  41.  return colonne;
  42. }
  43. public void setColonne(int colonne) {
  44.  this.colonne = colonne;
  45. }
  46. public int getLigne() {
  47.  return ligne;
  48. }
  49. public void setLigne(int ligne) {
  50.  this.ligne = ligne;
  51. }
  52. public boolean isEstOccupee() {
  53.  return estOccupee;
  54. }
  55. public void setEstOccupee(boolean estOccupee) {
  56.  if(estOccupee==true){
  57.   setBackground(Color.black);
  58.  }
  59.  this.estOccupee = estOccupee;
  60. }
  61. }


 
P.S. : l'IA d'un jeu de Dames c'est si chaud que çà ?


Message édité par Glycerin le 04-03-2008 à 10:27:23
Reply

Marsh Posté le 24-02-2008 à 19:16:40   

Reply

Marsh Posté le 24-02-2008 à 19:46:25    

.


Message édité par Glycerin le 04-03-2008 à 10:27:41
Reply

Marsh Posté le 04-03-2008 à 10:28:19    

Un petit up pour la modification de mon message.

Reply

Marsh Posté le 04-03-2008 à 12:42:10    

Salut,
 
a mon avis tu t'y prend mal.
 
Au lieu de faire dériver ta classe Case de JButton, fait la plutot dériver de JLabel.
Ton caseListener sera un MouseListener au lieu d'un ActionListener.
 
Ensuite, il te suffit de changer les Icon de chaque JLabel en fonction de son occupation.
tu peux ainsi avoir 4 types de case pion blanc/noir sur fond blanc/noir.
 
Et voila le travail ...
 
En ce qui concerne l'IA d'un jeu de dame, je suppose que tu vas utiliser des procédures de backtracking avec une profondeur donnée (le programme va essayer tous les coups possibles jusqu'à une certaine profondeur et évaluer le damier afin de trouver la suite de coups optimale).
Toute la difficulté est dans la fonction d'évaluation.
Les fonctions d'évaluation d'un damier, ça doit se trouver assez facilement.
 
@+ bon courage

Reply

Marsh Posté le 24-04-2014 à 18:11:11    

Bonjour,
 
je ne suis pas là par hazard, je ne sais pas inclure mes pièces d'échecs, dans un echiquier,  
Je sais faire les pièces disposées harmonieusement, je suppose que je sais dessiner l'echiquier, bien que ce n'est qu'une supposition, parce qu'avant de le faire, je me demande comment je vais bien pouvoir placer ensuite mes pièces, je n'ai pas envie de me retrouver avec un échiquier, d'un coté, des pièces de l'autre.
J'aimerais avoir d'abord une idée de la manière de les "harmoniser ??!"
 
Merci, si vous savez m'aider,  
 
Pilaau
 
P.S.
Le début de mon programme, ci-après, pour placer mes pièces (seules), il m'a été sympatiquement suggéré par Honrisse
 

Code :
  1. Code :
  2. import java.awt.Container;
  3. import java.awt.Dimension;
  4. import java.awt.GridLayout;
  5. import javax.swing.ImageIcon;
  6. import javax.swing.JFrame;
  7. import javax.swing.JLabel;
  8. import javax.swing.JPanel;
  9. import javax.swing.SwingUtilities;
  10. public class Main {
  11. public static void initAndShowGui() {
  12. JFrame f = new JFrame("Chess Game" );
  13. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14. f.setLayout(new GridLayout(8, 8));
  15. JPanel[][] gridPanel = new JPanel[8][8];
  16. for(int i = 0; i<8; i++) {
  17. for(int j = 0; j<8; j++) {
  18.    gridPanel[i][j] = new JPanel();
  19. }
  20. }
  21. ImageIcon dameIcon = new ImageIconMerci, si vous savez m'aider!!?


 
Merci,
 
Pilaau.
 
P.S, je nai pas insisté pour joindre ces deux aspects avec Honrisse, estimant qu'il m'avait assez aidé et pensant que ce serait plus facile
 
 
 
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed