Bonjour,
Je suis en train d'essayer de faire un cluedo en Java et j'ai un problème au niveau de l'affichage des cases où le joueur peut se déplacer.
J'ai un plateau de jeu (qui est une image que j'ai insérer avec un layeredPane dans un JLabel, et par dessus j'affiche des JLabel avec un fond coloré, ce qui représente les cases dans lesquelles le joueur peut aller en fonction de ses résultats aux dés.
Lorsque le joueur clic sur une de ces cases, les labels disparaissent et le pion du joueur se "déplace".
Lors du premier tour de jeu tout se passe bien. Mais au second tour, les JLabels des cases, qui étaient cliquables au premier tour de jeu, n'apparaissent pas. Cependant je sais qu'elles sont cliquables parce que j'ai créer dans la classe Case un booleen qui me dit, si oui ou non, la case est cliquable.
La fonction clique est appelée lorsque le joueur clic sur une des cases colorées :
public void clique(int x, int y)
{
//on recupere la case dans laquelle on a clique parmi la liste des cases cliquables
Case case0 = caseCourante(listeCasesCliquables, x, y);
int indice = Main.getIndiceJoueur();
if(case0 != null)
{
//on remet les cases en non cliquables et on vide la liste
for(int i = 0; i < listeCasesCliquables.size(); i++)
{
listeCasesCliquables.get(i).getListeLblCliquables().get(indice).setIcon(null);
listeCasesCliquables.get(i).setCliquable(false);
}
listeCasesCliquables.clear();
Case ancienneCase = Main.getJoueurCourant().getCaseCourante();
//on dessine le pion dans la nouvelle case
Main.getJoueurCourant().setCaseCourante(case0);
Main.interf.deplacerPion(ancienneCase);
}
}
La fonction afficheCasesPossibles est appelée une fois que les dés ont été lancés.
public void afficheCasesPossibles(int valeurDes, Case caseCourante)
{
int indice = Main.getIndiceJoueur();
//creation de la liste des listes de voisins en fonction de la profondeur
ArrayList<ArrayList<Case>> liste = new ArrayList<ArrayList<Case>>();
for(int i = 0; i < valeurDes; i++)
{
ArrayList<Case> listeCases = new ArrayList<Case>();
liste.add(listeCases);
}
//remplissage de la liste des premiers voisins de la case courante
for(int i = 0; i < caseCourante.getListeVoisins().size(); i++)
{
liste.get(0).add(caseCourante.getListeVoisins().get(i));
}
//remplissage des autres listes de voisins
for(int i = 1; i < valeurDes; i++)
{
//i est le niveau dans l'arbre
parcourtListe(liste, i);
}
//affichage des cases sur le plateau
//pour toutes les cases de la derniere liste
for(int i = 0; i < liste.get(valeurDes - 1).size(); i++)
{
Case casePlateau = liste.get(valeurDes - 1).get(i);
JLabel lbl = casePlateau.getListeLblCliquables().get(indice);
//si c'est une case simple
if(!Main.interf.estSalle(casePlateau))
{
//verification s'il y a qqn dans la case
boolean bool = false;
for(int j = 0; j < Main.listeJoueurs.size(); j++)
{
JLabel lbl2 = casePlateau.getListeLblCliquables().get(j);
if(lbl2.getIcon() != null)
{
bool = true;
System.out.println("la case "+casePlateau.getName()+" est occupée");
}
}
//s'il n'y a personne dans la case
if(bool == false)
{
//et si la case n'est pas deja dans la liste des cases cliquables
//utile pour le complement des cases avec valeur des des - 1
if(!listeCasesCliquables.contains(casePlateau))
{
//on ajoute la case a la liste des cases cliquables
listeCasesCliquables.add(casePlateau);
ImageIcon casePossible = new ImageIcon("Img/case.jpg");
int x = casePlateau.getX11();
int y = casePlateau.getY11();
lbl.setIcon(casePossible);
lbl.setSize(casePossible.getIconWidth(), casePossible.getIconHeight());
lbl.setLocation(x, y);
//on affiche la case
Main.plateau.getLayeredPane().add(lbl, JLayeredPane.PALETTE_LAYER);
//Main.plateau.repaint();
//on la declare cliquable
casePlateau.setCliquable(true);
}
}
}
//si la case est une salle
else
{
//si le joueur n'est pas deja dans la salle
if(lbl.getIcon() == null)
{
//et si la case n'est pas deja dans la liste des cases cliquables
//utile pour le complement des cases avec valeur des des - 1
if(!listeCasesCliquables.contains(casePlateau))
{
//on ajoute la case a la liste des cases cliquables
listeCasesCliquables.add(casePlateau);
ImageIcon casePossible = new ImageIcon("Img/case.jpg");
int x = casePlateau.getX11() + Main.getJoueurCourant().getPerso().getxSalle();
int y = casePlateau.getY11() + Main.getJoueurCourant().getPerso().getySalle();
lbl.setIcon(casePossible);
lbl.setSize(casePossible.getIconWidth(), casePossible.getIconHeight());
lbl.setLocation(x, y);
//on affiche la case
Main.plateau.getLayeredPane().add(lbl, JLayeredPane.PALETTE_LAYER);
//Main.plateau.repaint();
//on la declare cliquable
casePlateau.setCliquable(true);
}
}
}
}
}
public void parcourtListe(ArrayList<ArrayList<Case>> liste, int indice)
{
//pour toutes les cases de la liste (indice - 1)
for(int i = 0; i < liste.get(indice - 1).size(); i++)
{
//pour tous les voisins de la case i
for(int j = 0; j < liste.get(indice - 1).get(i).getListeVoisins().size(); j ++)
{
//on parcourt la liste pour verifier si la case n'existe pas deja dans la liste
boolean bool = false;
for(int k = 0; k < liste.get(indice).size(); k++)
{
if(liste.get(indice).get(k).getName() == liste.get(indice - 1).get(i).getListeVoisins().get(j).getName())
{
bool = true;
}
}
if(!bool)
{//si elle n'y est pas, on l'ajoute
liste.get(indice).add(liste.get(indice - 1).get(i).getListeVoisins().get(j));
}
}
}
}