Bonjour
Je suis en train de développer un jeu de stratégie en java pour un projet d'étude avec mon binôme.
Le but du jeu est de poser un maximum de pièces , de formes particulières, sur un plateau (une grille de 400 petits carres).Le jeu se joue à deux et chacun possède 42 pièces à placer, sachant qu'il y a des règles de placement. Les pièces sont composées de petits carrés qui vont se superposer à ceux du plateau après déplacement des pièces(ceci est nécessaire pour comptabiliser les scores des joueurs).
Pour coder ce jeu en java ( SWING) on a modélisé chaque petit carré par un JLabel. Chaque pièce est alors un JPanel qui contient un certain nombre de ces JLabels "collés" côte à côte. L'avantage est de pouvoir déplacer l'ensemble de la pièce avec la souris(on déplace le JPanel constituant la pièce).
Dans la même optique, on a modélisé le plateau par un JPanel qui contient 400 JLabels (petits carrés) "collés"côte à côte. (Oui l'idée est un peu originale....c'est ce que nous a dit notre tuteur).
C'est la que j'en viens à ma question.
On a remarqué que:
- si on crée d'abord les pièces puis le plateau , lorsque on déplace une pièce sur le plateau la pièce apparait sur le plateau
-si on déplace une pièce sur une pièce déja existante sur le plateau, la pièce déplacée va disparaitre derriere la piece présente sur le plateau.
-si on effectue une rotation sur la pièce que l'on veut poser sur le plateau et que l'on déplace la pièce obtenue sur le plateau, la pièce disparait derrière le plateau. A noter que la rotation porte uniquement sur la pièce : on obtient une nouvelle pièce qui possède les mêmes attributs que la précédente mais les petits carrés sont agencés d'une autre manière. En fait l'agencement des petits carrés de la pièces est géré par une matrice qui est interne au constructeur de pièces.
Conclusion: un JPanel créé avant d'autres JPanels sera toujours visible meme si on déplace un autre JPanel sur lui ou même si on le déplace sur un autre JPanel.
Nous avons essayé de trouver un algo pour modifier cette hiérarchie, mais ça ne marche pas et cela nous freine considérablement....
==> N'y aurait-t'il pas une méthode existante dans Java qui modifie cette hiérarchie et permette un controle de la visibilité d'un JPanel par rapport à d'autres qui lui sont superposés?
Ainsi on pourrait voir les pièces rotationnées sur le plateau après déplacement plutot que de les voir disparaitre derriere le plateau. On est sur de les avoir derriere notre plateau: un algo nous le montre.
Si qqn a déja eu ce probleme, ce serait bien qu'il nous dise comment il a résoulu le probleme(une méthode Java existante? Un algo?)
Je ne peux pas fournir de code car environ 1500 lignes de code seraient un peu longue à lire....
Je peux juste dire que l'on a une classe PetitCarré qui étends JLabel, une classe pièce et une classe plateau qui étends JPanel, pour assembler des petits carrés, une classe graphique qui étends JFrame et implémente ActionListener et enfin une classe principale dans laquelle les pièces et le plateau sont créés et qui gère les événements de souris.
Enfin peut-être que notre conception du système est un peu trop originale et ne convient pas....Mais cela nous ferait du mal de tout se retapper surout que la fin du projet approche...
Voila si vous avez pu arriver jusque la je vous remercie de votre patience. Et j'espère que vous pourrez apporter une solution à notre problème.
Merci d'avance.