begin process at 2010 02 10 02:53:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

JavaBeans

 > 

Jeu de stratégie


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Jeu de stratégie

samedi 5 juin 2004 à 06:12:03 | Jeu de stratégie

killians


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.
lundi 7 juin 2004 à 12:47:07 | Re : Jeu de stratégie

gaelcal

Salut
Je voulais te demander si tu avais pensé à utilisé des graphics2D pour ton problèmes (associé à des Area on puet faire des systèmes simples et spéctaculaire)

PS 1500 lignes c'est pas tant que sa (le code de notre projet de fin d'année devait atteindre les 10000 lignes)
lundi 7 juin 2004 à 20:17:41 | Re : Jeu de stratégie

killians


Non on n'a pas utilisé de graphics2D...
Mais voila du code si qqn trouve commnet faire passer mes pièces sur le plateau après avoir les avoir tourner...
Le problème est que l'on ne puet plus revenir en arrière : problème de temps....


//--------Fenetre graphique----------------

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;

public class F_Graphique extends JFrame {

static int count;
static Blocus jeu;

/** Aucune piece posée: carré gris. */
final static int RIEN = 0;
/** Constante de la couleur BLEU. */
final static int BLEU = 1;
/** Constante de la couleur JAUNE. */
final static int JAUNE = 2;
/** Constante de la couleur ROUGE. */
final static int ROUGE = 3;
/** Constante de la couleur VERT. */
final static int VERT = 4;

//Différents bouttons
final JButton play,stop,abandon,rotationn,rotationp,symh,symv;

//Une combo Box
final JComboBox menu3;

//Différents Label
final JLabel tps,brobot_tp_af,bjoueur_tp_af,pvert_af,prouge_af,pjaune_af,pbleu_af ;
final JLabel couleur;

//Différents panneaux
final JPanel pane1,pane2,pane4;

//Un timer pour compter
final Timer timer1 = new Timer(1000,new ActionCompte());

//Création du timer de clignotement
final Timer timer2 = new Timer(500,new ActionClignotement());

// Pièce récupérée lors d'un clic
Piece pieceSelect;




public F_Graphique(){

//Création de la fenêtre principale
setSize(900,900);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon blokus = new ImageIcon ("blokus.gif");
setIconImage(blokus.getImage());
setTitle("Jeu Blokus");
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setLocation(dim.width/2 - getWidth()/2, dim.height/2 - getHeight()/2);


//Création du panneau père
JPanel mainpane=new JPanel();
mainpane.setLayout(null);
mainpane.setSize(600,550);


//Création du 1er panneau fils de mainpane
pane1=new JPanel();
pane1.setLayout(null);
pane1.setBorder (BorderFactory.createMatteBorder (5,5,5,2,Color.black));
pane1.setSize(450,500);
pane1.setBackground(Color.gray.brighter());

//Création d'un panneau pour ajouter
//les pièces et le plateau de jeu
JPanel pane11=new JPanel();
pane11.setSize(450,470);
pane11.setLayout(null);
pane11.setBorder (BorderFactory.createMatteBorder (5,5,2,2,Color.black));
pane11.setBackground(Color.gray);
jeu = new Blocus();
jeu.setSize(442,462);
jeu.setLocation(5,5);
jeu.setBackground(Color.gray.darker().darker().darker());
pane11.add(jeu);


//Une barre d'outils
JToolBar menu2 = new JToolBar();
menu2.setFloatable(false);
menu2.setSize(200,25);
menu2.setLocation(20,470);
menu2.setBackground(Color.gray.brighter());

//Mise en page de la Tool Bar
menu3 = new JComboBox ();
menu3.addItem("bleu/rouge");
menu3.addItem("jaune/vert");
menu3.setMaximumRowCount(2);
Icon Play = new ImageIcon ("play.gif");
play= new JButton(Play);
play.addActionListener(new ActionButton());
Icon Stop = new ImageIcon ("stop.gif");
stop= new JButton(Stop);
stop.setEnabled(false);
stop.addActionListener(new ActionButton());
Icon Abandon = new ImageIcon ("abandon.gif");
abandon= new JButton(Abandon);
abandon.setEnabled(false);
abandon.addActionListener(new ActionButton());

menu2.add(menu3);
menu2.add(play);
menu2.add(stop);
menu2.add(abandon);


//Une deuxième barre d'outils
JToolBar menu1 = new JToolBar();
//menu1.setMargin(Espacements(50,100,50,50));
menu1.setFloatable(false);
menu1.setSize(150,25);
menu1.setLocation(250,470);
menu1.setBackground(Color.gray.brighter());

//Mise en page de la Tool Bar
Icon Rotationp = new ImageIcon ("rotationp.gif");
rotationp= new JButton(Rotationp);
//rotationp.setBounds(37,1,25,25);
rotationp.setEnabled(false);
rotationp.addActionListener(new ActionButton());
Icon Rotationn = new ImageIcon ("rotationn.gif");
rotationn= new JButton(Rotationn);
//rotationn.setBounds(62,1,25,25);
rotationn.setEnabled(false);
rotationn.addActionListener(new ActionButton());
Icon Symh = new ImageIcon ("symh.gif");
symh= new JButton(Symh);
//symh.setBounds(87,1,25,25);
symh.setEnabled(false);
symh.addActionListener(new ActionButton());
Icon Symv = new ImageIcon ("symv.gif");
symv= new JButton(Symv);
//symv.setBounds(112,1,25,25);
symv.setEnabled(false);
symv.addActionListener(new ActionButton());

menu1.add(rotationp);
menu1.add(rotationn);
menu1.add(symh);
menu1.add(symv);






pane1.add(pane11);
pane1.add(menu2);
pane1.add(menu1);



//Création du 2ème panneau fils de mainpane
pane2=new JPanel();
pane2.setBorder (BorderFactory.createMatteBorder (5,1,2,5,Color.black));
pane2.setSize(200,200);
pane2.setLocation(450,0);
pane2.setBackground(Color.gray.brighter());
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
pane2.setLayout(gridbag);

//Intitulé du robot
buildConstraints(constraints, 0, 0, 2, 1, 0, 50);
constraints.fill = GridBagConstraints.HORIZONTAL;
JLabel brobot = new JLabel("ROBOT",JLabel.CENTER);
brobot.setForeground(Color.red.darker().darker());
gridbag.setConstraints(brobot, constraints);
pane2.add(brobot);

//Champs du score du robot
buildConstraints(constraints, 0, 1, 1, 1, 80, 10);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
JLabel brobot_sc = new JLabel("Score :",JLabel.CENTER);
gridbag.setConstraints(brobot_sc, constraints);
pane2.add(brobot_sc);

//Affichage du score du robot
buildConstraints(constraints, 1, 1, 1, 1, 800, 0);
constraints.fill = GridBagConstraints.BOTH;
JLabel brobot_sc_af = new JLabel("000",JLabel.CENTER);
gridbag.setConstraints(brobot_sc_af, constraints);
pane2.add(brobot_sc_af);

//Champs du temps de jeu du robot
buildConstraints(constraints, 0, 2, 1, 1, 0, 10);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
JLabel brobot_tp = new JLabel("Temps de jeu :",JLabel.CENTER);
gridbag.setConstraints(brobot_tp, constraints);
pane2.add(brobot_tp);

//Affichage du temps
buildConstraints(constraints, 1, 2, 1, 1, 0, 0);
constraints.fill = GridBagConstraints.BOTH;
brobot_tp_af = new JLabel(Integer.toString(count),JLabel.CENTER);
gridbag.setConstraints(brobot_tp_af, constraints);
pane2.add(brobot_tp_af);

//Intitulé du joueur
buildConstraints(constraints, 0, 3, 2, 1, 0, 50);
constraints.fill = GridBagConstraints.HORIZONTAL;
JLabel bjoueur = new JLabel("JOUEUR",JLabel.CENTER);
bjoueur.setForeground(Color.red.darker().darker());
gridbag.setConstraints(bjoueur, constraints);
pane2.add(bjoueur);

//Champs du score du joueur
buildConstraints(constraints, 0, 4, 1, 1, 0, 10);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
JLabel bjoueur_sc = new JLabel("Score :",JLabel.CENTER);
gridbag.setConstraints(bjoueur_sc, constraints);
pane2.add(bjoueur_sc);

//Affichage du score du joueur
buildConstraints(constraints, 1, 4, 1, 1, 0, 0);
constraints.fill = GridBagConstraints.BOTH;
JLabel bjoueur_sc_af = new JLabel("000",JLabel.CENTER);
gridbag.setConstraints(bjoueur_sc_af, constraints);
pane2.add(bjoueur_sc_af);

//Champs du temps de jeu du joueur
buildConstraints(constraints, 0, 5, 1, 1, 100, 10);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
JLabel bjoueur_tp = new JLabel("Temps de jeu :",JLabel.CENTER);
gridbag.setConstraints(bjoueur_tp, constraints);
pane2.add(bjoueur_tp);

//Affichage du temps de jeu du joueur
buildConstraints(constraints, 1, 5, 1, 1, 100, 0);
constraints.fill = GridBagConstraints.BOTH;
bjoueur_tp_af = new JLabel(Integer.toString(count),JLabel.CENTER);
gridbag.setConstraints(bjoueur_tp_af, constraints);
pane2.add(bjoueur_tp_af);

//Création du 3ème panneau fils de mainpane
JPanel pane3=new JPanel();
pane3.setBorder (BorderFactory.createMatteBorder (1,1,2,5,Color.black));
pane3.setBounds(450,200,200,150);
pane3.setBackground(Color.gray.brighter());
GridBagLayout gridbag2 = new GridBagLayout();
GridBagConstraints constraints2 = new GridBagConstraints();
pane3.setLayout(gridbag2);

//Champs du score des pièces bleues
buildConstraints(constraints2, 0, 0, 1, 1, 70, 10);
constraints2.fill = GridBagConstraints.NONE;
constraints2.anchor = GridBagConstraints.EAST;
JLabel pbleu= new JLabel("Score bleu :");
pbleu.setForeground(Color.blue);
gridbag2.setConstraints(pbleu, constraints2);
pane3.add(pbleu);

//Affichage du score des pièces bleues
buildConstraints(constraints2, 1, 0, 1, 1, 400, 0);
constraints2.fill = GridBagConstraints.BOTH;
pbleu_af= new JLabel("000",JLabel.CENTER);
gridbag2.setConstraints(pbleu_af, constraints2);
pane3.add(pbleu_af);

//Champs libre
buildConstraints(constraints2, 0, 1, 2, 1, 80, 50);
constraints2.fill = GridBagConstraints.HORIZONTAL;
JLabel trou1= new JLabel();
gridbag2.setConstraints(trou1, constraints2);
pane3.add(trou1);

//Champs du score des pièces jaunes
buildConstraints(constraints2, 0, 2, 1, 1, 0, 10);
constraints2.fill = GridBagConstraints.NONE;
constraints2.anchor = GridBagConstraints.EAST;
JLabel pjaune= new JLabel("Score jaune :");
pjaune.setForeground(Color.yellow.brighter());
gridbag2.setConstraints(pjaune, constraints2);
pane3.add(pjaune);

//Affichage du score des pièces jaunes
buildConstraints(constraints2, 1, 2, 1, 1, 0, 0);
constraints2.fill = GridBagConstraints.BOTH;
pjaune_af= new JLabel("000",JLabel.CENTER);
gridbag2.setConstraints(pjaune_af, constraints2);
pane3.add(pjaune_af);

//Champs libre
buildConstraints(constraints2, 0, 3, 2, 1, 80, 50);
constraints2.fill = GridBagConstraints.HORIZONTAL;
JLabel trou2= new JLabel();
gridbag2.setConstraints(trou2, constraints2);
pane3.add(trou2);

//Champs du score des pièces rouges
buildConstraints(constraints2, 0, 4, 1, 1, 0, 10);
constraints2.fill = GridBagConstraints.NONE;
constraints2.anchor = GridBagConstraints.EAST;
JLabel prouge= new JLabel("Score rouge :");
prouge.setForeground(Color.red);
gridbag2.setConstraints(prouge, constraints2);
pane3.add(prouge);

//Affichage du score des pièces rouges
buildConstraints(constraints2, 1, 4, 1, 1, 0, 0);
constraints2.fill = GridBagConstraints.BOTH;
prouge_af= new JLabel("000",JLabel.CENTER);
gridbag2.setConstraints(prouge_af, constraints2);
pane3.add(prouge_af);

//Champs libre
buildConstraints(constraints2, 0, 5, 2, 1, 80, 50);
constraints2.fill = GridBagConstraints.HORIZONTAL;
JLabel trou3= new JLabel();
gridbag2.setConstraints(trou3, constraints2);
pane3.add(trou3);

//Champs du score des pièces vertes
buildConstraints(constraints2, 0, 6, 1, 1, 0, 10);
constraints2.fill = GridBagConstraints.NONE;
constraints2.anchor = GridBagConstraints.EAST;
JLabel pvert= new JLabel("Score vert :");
pvert.setForeground(Color.green.darker().darker());
gridbag2.setConstraints(pvert, constraints2);
pane3.add(pvert);

//Affichage du score des pièces vertes
buildConstraints(constraints2, 1, 6, 1, 1, 0, 0);
constraints2.fill = GridBagConstraints.BOTH;
pvert_af= new JLabel("0",JLabel.CENTER);
gridbag2.setConstraints(pvert_af, constraints2);
pane3.add(pvert_af);



//Création du 4ème panneau fils de mainpane
pane4=new JPanel();
pane4.setLayout(null);
pane4.setBorder (BorderFactory.createMatteBorder (1,1,5,5,Color.black));
pane4.setBounds(450,350,200,150);
pane4.setBackground(Color.gray.brighter());

//Mise en page du pane4
couleur=new JLabel("couleur à jouer",JLabel.CENTER);
couleur.setBackground (Color.gray.brighter());
couleur.setBounds(0,0,200,20);
couleur.setOpaque(true);
couleur.setBorder (BorderFactory.createMatteBorder (1,1,3,5,Color.black));

//Un JLabel
JLabel Tps = new JLabel("TEMPS ECOULE :",JLabel.CENTER);
Tps.setForeground(Color.red.darker().darker());
Tps.setBackground(Color.gray.brighter());
Tps.setBounds(0,50,200,50);

//Un champs de texte
tps = new JLabel(Integer.toString(count),JLabel.CENTER);
tps.setBounds(0,100,200,20);



pane4.add(couleur);
pane4.add(Tps);
pane4.add(tps);



//ajout des 4 panneaux fils à main pane
mainpane.add(pane1);
mainpane.add(pane2);
mainpane.add(pane3);
mainpane.add(pane4);
setContentPane(mainpane);


}



void buildConstraints(GridBagConstraints gbc, int gx, int gy,
int gw, int gh, int wx, int wy) {
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
}

/*public Insets Espacements(int haut,int gauche,
int bas,int droite) {
return new Insets(haut,gauche,bas,droite);
}*/


/* Stockage en mémoire de la pièce sur laquelle l'utilisateur a cliqué en vue de son utilisation ultérieure */
public void stockPiece (Piece i) {

pieceSelect = i;
rotationn.setEnabled(true);rotationp.setEnabled(true);
symh.setEnabled(true);symv.setEnabled(true);


}


//On cache les boutons de transformation géométrique
public void transfoEnabled() {

rotationn.setEnabled(false);rotationp.setEnabled(false);
symh.setEnabled(false);symv.setEnabled(false);

}


/* Ajout d'un score à l'une des couleurs */
public void addScore(int couleur, int score) {

switch (couleur) {

case VERT: pvert_af.setText(Integer.toString(Integer.parseInt(pvert_af.getText()) + score));
break;

case JAUNE: pjaune_af.setText(Integer.toString(Integer.parseInt(pjaune_af.getText()) + score));
break;

case ROUGE: prouge_af.setText(Integer.toString(Integer.parseInt(prouge_af.getText()) + score));
break;

case BLEU: pbleu_af.setText(Integer.toString(Integer.parseInt(pbleu_af.getText()) + score));
break;



}

}


//-------------Action des boutons---------------------------


class ActionButton implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
if (e.getSource()==play)
{
play.setEnabled(false);stop.setEnabled(true);
abandon.setEnabled(true);menu3.setEnabled(false);
timer1.start();timer2.start();
JOptionPane.showMessageDialog(pane1,"La partie commence",
"Message de Blokus",JOptionPane.INFORMATION_MESSAGE);
}

if (e.getSource()==stop)
{
timer1.stop();timer2.stop();
JOptionPane.showMessageDialog(pane1,"La partie est terminée",
"Message de Blokus",JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(pane1,"temps de jeu : "
+Integer.toString(count)+ " secondes",
"Message de Blokus",JOptionPane.INFORMATION_MESSAGE);
abandon.setEnabled(false);stop.setEnabled(false);
count=0;
tps.setText(Integer.toString(count));
brobot_tp_af.setText(Integer.toString(count));
bjoueur_tp_af.setText(Integer.toString(count));
play.setEnabled(true);menu3.setEnabled(true);
//System.out.println(+count);
}

if (e.getSource()==abandon)
{
System.out.println ("abandon");
}

if (e.getSource()==rotationn)
{
System.out.println ("rotation de -90");

if ((pieceSelect!=null)&&(pieceSelect.deplacable==true)) {
pieceSelect.rotm90();
pieceSelect.dessinerPiece(pieceSelect.couleur,pieceSelect.x,pieceSelect.y,(JPanel)pieceSelect.getParent());
}
}

if(e.getSource()==rotationp)
{
System.out.println("rotation de +90");
if ((pieceSelect!=null)&&(pieceSelect.deplacable==true)) {
pieceSelect.rotp90();
pieceSelect.dessinerPiece(pieceSelect.couleur,pieceSelect.x,pieceSelect.y,(JPanel)pieceSelect.getParent());
}
}

if(e.getSource()==symh)
{
System.out.println("Symétrie horizontale");
if ((pieceSelect!=null)&&(pieceSelect.deplacable==true)) {
pieceSelect.symver ();
pieceSelect.dessinerPiece(pieceSelect.couleur,pieceSelect.x,pieceSelect.y,(JPanel)pieceSelect.getParent());
}
}

if(e.getSource()==symv)
{
System.out.println("Symétrie verticale");
if ((pieceSelect!=null)&&(pieceSelect.deplacable==true)) {
pieceSelect.symhor ();
pieceSelect.dessinerPiece(pieceSelect.couleur,pieceSelect.x,pieceSelect.y,(JPanel)pieceSelect.getParent());
}
}


}
}


//--------------Action des timers-------------------------------------

class ActionClignotement implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
if (couleur.getBackground().equals (Color.gray.brighter()))
couleur.setBackground (Color.green);
else
couleur.setBackground (Color.gray.brighter());
}
}

class ActionCompte implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
count++;
tps.setText(Integer.toString(count));
brobot_tp_af.setText(Integer.toString(count));
bjoueur_tp_af.setText(Integer.toString(count));
}
}

}

/** Classe servant a representer les briques élémentaires de chaque pièce. */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class PetitCarre extends JLabel {

int x, y;
int c1=14;
int c2=14;

/** Aucune piece posée: carré gris. */
final static int RIEN = 0;
/** Constante de la couleur BLEU. */
final static int BLEU = 1;
/** Constante de la couleur JAUNE. */
final static int JAUNE = 2;
/** Constante de la couleur ROUGE. */
final static int ROUGE = 3;
/** Constante de la couleur VERT. */
final static int VERT = 4;


/** Constante des abcisses. */
final static int X = 0 ;
/** Constante des ordonees. */
final static int Y = 1 ;


/** Couleur de la piece. */
protected int couleur;

/**
* Constructeur de la piece.
* -> Paramètre couleur à attribuer a la piece.
*/

public PetitCarre(int couleur) {
couleur = couleur;
}

/**
* Surcharge du constructeur de la piece.
* -> Affichage du petit carré à la position spécifiée
*/

public PetitCarre(int couleur,int x0,int y0) {
couleur = couleur;
x = x0; y = y0;



setBorder (BorderFactory.createBevelBorder (BevelBorder.RAISED,Color.gray,Color.black));


switch (couleur) {

case ROUGE:
setBackground(Color.red);
break;

case BLEU:
setBackground(Color.blue);
break;

case JAUNE:
setBackground(Color.yellow);
break;

case VERT:
setBackground(Color.green);
break;
}

setOpaque(true);
setSize (c1,c2);
setLocation (x, y);


}


public PetitCarre(boolean fond,int x0,int y0) {
x = x0; y = y0;
if (fond==true) {
setBorder (BorderFactory.createBevelBorder (BevelBorder.RAISED,Color.white,Color.white));



setBackground(Color.gray);

setOpaque(true);
setSize (c1,c2);
setLocation (x, y);
}
}


/**
* Accesseur pour la couleur de la piece.
* -> Résultat: la couleur.
*/
public int getCouleur() { return couleur; }

}


/** Classe mere qui sert a representer les pieces du jeu d'echec. */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class Piece extends JPanel{

int x,y;
protected boolean deplacable;
/** Aucune piece posée: carré gris. */
final static int RIEN = 0;
/** Constante de la couleur BLEU. */
final static int BLEU = 1;
/** Constante de la couleur JAUNE. */
final static int JAUNE = 2;
/** Constante de la couleur ROUGE. */
final static int ROUGE = 3;
/** Constante de la couleur VERT. */
final static int VERT = 4;


/** Constante des abcisses. */
final static int X = 0 ;
/** Constante des ordonees. */
final static int Y = 1 ;

/** Déclaration de la pièce comme tableau d'entiers indiquant la présence ou non de petitcarrés */
public int[][] matrice;

/** Type de la piece. */
protected int type;

/** Couleur de la piece. */
protected int couleur;

/* Nombre de petits carrés de la pièce */
public int Nb_pcarre;

/* Matrice intermédiaire pour les opérations de géométrie */
int[][] matdiag = new int[5][5];

static F_Graphique f;

/**
* Constructeur de la piece.
* -> Paramètre couleur à attribuer a la piece, position, type,
* fenêtre dans laquelle afficher, deplacable ou non, afficher ou non
*/

public Piece (int couleur0, int Nb_pcarre0, int type, int x0, int y0, boolean afficher, boolean deplacable1, JPanel fenetre) {
couleur = couleur0;
type = type;
x = x0; y = y0;
deplacable = deplacable1;
Nb_pcarre=Nb_pcarre0;

matrice = new int[5][5] ; // Initialisation de la matrice représentant la pièce
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++)
matrice[i][j] = 0; // 0 pour absence de petit carré
}

switch (Nb_pcarre) {

case 1:

Nb_pcarre= 5;

switch (type) {

case 1: // la croix

matrice[1][2]=1;
matrice[2][2]=1;
matrice[3][2]=1;
matrice[2][3]=1;
matrice[2][1]=1;


break;

case 2: //une croix avec un carre déplacé

matrice[1][1]=1;
matrice[2][2]=1;
matrice[2][1]=1;
matrice[2][3]=1;
matrice[3][2]=1;


break;

case 3: // la barre

matrice[0][2]=1;
matrice[1][2]=1;
matrice[2][2]=1;
matrice[3][2]=1;
matrice[4][2]=1;


break;

case 4: // le T élargi

matrice[1][1]=1;
matrice[2][1]=1;
matrice[3][1]=1;
matrice[2][2]=1;
matrice[2][3]=1;


break;

case 5: // le gros carré avec un carré en plus

matrice[1][1]=1;
matrice[1][2]=1;
matrice[2][2]=1;
matrice[2][1]=1;
matrice[3][1]=1;


break;

case 6: // le L

matrice[1][3]=1;
matrice[1][2]=1;
matrice[2][2]=1;
matrice[3][2]=1;
matrice[4][2]=1;


break;

case 7: // une autre forme de L

matrice[1][3]=1;
matrice[2][3]=1;
matrice[3][1]=1;
matrice[3][2]=1;
matrice[3][3]=1;


break;

case 8: // le M

matrice[1][1]=1;
matrice[1][2]=1;
matrice[2][1]=1;
matrice[3][1]=1;
matrice[3][2]=1;


break;

case 9: // la croix avec les 2 carrés de la barre transversale déplacés

matrice[1][1]=1;
matrice[2][1]=1;
matrice[2][2]=1;
matrice[2][3]=1;
matrice[3][3]=1;


break;

case 10: // Une autre forme de T

matrice[0][2]=1;
matrice[1][2]=1;
matrice[2][2]=1;
matrice[3][2]=1;
matrice[2][3]=1;


break;

case 11: // une barre avec 2 carrés surélevés

matrice[0][2]=1;
matrice[1][2]=1;
matrice[2][2]=1;
matrice[2][1]=1;
matrice[3][1]=1;


break;

case 12: // une forme biscornue

matrice[1][3]=1;
matrice[2][3]=1;
matrice[2][2]=1;
matrice[3][2]=1;
matrice[3][1]=1;


break;
}

break;

case 2:

Nb_pcarre= 4;

switch (type) {

case 1: // le T

matrice[1][2]=1; // 1: présence d'un petit carré
matrice[2][2]=1;
matrice[3][2]=1;
matrice[2][3]=1;


break;

case 2: // le gros carré

matrice[1][1]=1;
matrice[2][2]=1;
matrice[1][2]=1;
matrice[2][1]=1;

break;

case 3: // la barre

matrice[2][0]=1;
matrice[2][2]=1;
matrice[2][1]=1;
matrice[2][3]=1;

break;

case 4: // le L

matrice[1][1]=1;
matrice[1][3]=1;
matrice[1][2]=1;
matrice[2][3]=1;

break;

case 5: // Une forme biscornue

matrice[1][1]=1;
matrice[2][2]=1;
matrice[3][2]=1;
matrice[2][1]=1;

break;

}

break;

case 3:

Nb_pcarre= 3;

switch (type) {

case 1: // Une barre

matrice[3][2]=1;
matrice[2][2]=1;
matrice[1][2]=1;

break;

case 2: // Un gros carré moins un petit carré

matrice[1][1]=1;
matrice[2][1]=1;
matrice[1][2]=1;

break;

}

break;

case 4:

Nb_pcarre= 2;

switch (type) {

case 1: // la barre

matrice[2][2]=1;
matrice[1][2]=1;


break;

}

break;

case 5:

Nb_pcarre= 1;

switch (type) {

case 1: // le simple carré

matrice[2][2]=1;


break;

}

break;

}

if (afficher == true) { dessinerPiece(couleur,x,y,fenetre); }

}


/** Dessin d'une pièce à un endroit spécifié
*/

public void dessinerPiece (int couleur, int x0, int y0, JPanel fenetre) {

setLayout(null);
setSize(67,67);
setLocation(x0,y0);
setOpaque(false);

System.out.println(couleur);

removeAll();

for (int i = 0; i < 5; i++) { // Parcours de la matrice de la piece
for (int j = 0; j < 5; j++) {
if (matrice[i][j]==1) { add(new PetitCarre(couleur,13*i,13*j));}
} // dessin des petits carrés nécessaires
}

//setFocusable(true);
//requestFocusInWindow();
paintImmediately(0,0,67,67);

fenetre.add(this);


}

/* Opérations sur les pièces: symétries, rotations, ...
*/


// Symétrie horizontale:

public void symhor () {

for (int j = 0; j<5; j++) {
for (int i = 0; i<5; i++) {
matdiag[i][j] = matrice[i][4-j];


}

}


for (int j = 0; j<5; j++) {
for (int i = 0; i<5; i++) {
matrice[i][j] = matdiag[i][j];

}

}

}

// Symétrie verticale:

public void symver () {

for (int j = 0; j<5; j++) {
for (int i = 0; i<5; i++) {
matdiag[i][j] = matrice[4-i][j];

}

}

for (int j = 0; j<5; j++) {
for (int i = 0; i<5; i++) {
matrice[i][j] = matdiag[i][j];

}

}


}

// Symétrie par rapport à la diagonale:

public void symdiag () {



for (int j = 0; j<5; j++) {
for (int i = 0; i<5; i++) {
matdiag[i][j] = matrice[j][i];

}

}

for (int j = 0; j<5; j++) {
for (int i = 0; i<5; i++) {
matrice[i][j] = matdiag[i][j];

}

}

}

// Rotation de +90°: symétrie verticale suivie d'une symétrie diagonale


public void rotp90 () {

symver();
symdiag();


}
// Rotation de -90°: symétrie diagonale suivie d'une symétrie verticale

public void rotm90 () {

symdiag();
symver();

}

public int[][] getRotm90Matrice(){
symdiag();
symver();
return this.matrice;
}





/** Vérifie que l'utilisateur clique sur un carré occupé du panel de la pièce
*/

public boolean clickDessus (int x0, int y0) {

int x1; int y1;

// Il faut s'assurer que la souris est sur la piece

if ((x0>0)&&(x0<65)&&(y0>0)&&(y0<65)) {

// On cherche la position du petit carré correspondant

x1= (int)(x0/13);
y1= (int)(y0/13);

// On teste l'existence du petit carré:

if (matrice[x1][y1]==1) { setCursor(new Cursor(12)); return true; }
else {setCursor(new Cursor(0)); return false; }
}
else {setCursor(new Cursor(0)); return false;}
}


/**
* Accesseur pour la couleur de la piece.
* -> Résultat: la couleur.
*/
public int getCouleur() { return couleur; }

/**
* Accesseur pour le type de la piece.
* -> Résultat: le type.
*/
public int getType() { return type; }

public void isDeplacable(){ deplacable=true;}

}


/** Classe representant le plateau */


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;


public class Plateau extends JLayeredPane{

int tabx; int taby;

/** Constante de largeur du plateau */
final static int HORIZONTALE = 21 ;
/** Constante de hauteur du plateau */
final static int VERTICALE = 21 ;

/** Aucune piece posée: carré gris. */
final static int RIEN = 0;
/** Constante de la couleur BLEU. */
final static int BLEU = 1;
/** Constante de la couleur JAUNE. */
final static int JAUNE = 2;
/** Constante de la couleur ROUGE. */
final static int ROUGE = 3;
/** Constante de la couleur VERT. */
final static int VERT = 4;

/** Constante des abcisses. */
final static int X = 0 ;
/** Constante des ordonees. */
final static int Y = 1 ;

/** Declaration du plateau comme tableau d'entiers appelé grille */
public int[][] grille ;

/** Taille fixe en pixels du plateau graphique */
final static int TAILLE = 261;

static F_Graphique f;

JLayeredPane laypan;

/**
* Cree le tableau et place toutes les pieces sur le plateau.
*/
public Plateau (int tabx0, int taby0, final JPanel fenetre) {
tabx=tabx0; taby=taby0; // Coordonnées d'attache du plateau

setLayout(null);
setSize(TAILLE,TAILLE);
setLocation(tabx,taby);

//laypan = new JLayeredPane();
//laypan.setPreferredSize(new Dimension(261, 261));
//add(laypan);

grille = new int[HORIZONTALE][VERTICALE] ;
for (int i = 0; i < HORIZONTALE; i++) {
for (int j = 0; j < VERTICALE; j++)
grille[i][j] = RIEN;
}



}


/* Mise à l'avant d'une pièce sur le plateau */

public void enAvant (Piece i) {


setLayer(i,0);



}


/**
* Redessine le plateau sur commande.
* @Param: JPanel fenetre: où dessiner le plateau
* (x,y): localisation exacte
*/

public void dessiner (JPanel fenetre) {


for (int u = 0;u<20;u++) {
for (int v=0;v<20;v++) {

// Carré gris si aucune pièce présente

if ( grille[u] == RIEN ) {
add(new PetitCarre(true,tabx+13*u,taby+13*v),0);



}



}

}


fenetre.add(this);


}


/* Ajouter une pièce entière au plateau
*
*/

public void ajouterPiece (Piece piece, int x0, int y0, int posx0, int posy0, F_Graphique f0) {

f = f0;

int xp = x0, yp = y0;

int k=0;


for (int i=0; i<5;i++){
for (int j=0; j<5;j++){

/* Des que l'on trouve un petit carré dans la pièce on teste si celui-ci peut être posé */

if (piece.matrice[i][j]==1) {

if ((xp+i<21)&&(yp+j)<21) {

if (grille[xp+i][yp+j]!=0) {

k++;
}
}

}
}

}


/* Si la variable k est restée nulle, toute la pièce est dessinable, on accepte le déplacement:
*/

if (k==0) {

for (int i=0; i<5;i++){
for (int j=0; j<5;j++){
if (piece.matrice[i][j]==1) {
if ((xp+i<21)&&(yp+j)<21) {
grille[xp+i][yp+j]=piece.couleur; // Si oui, on pose la couleur sur le tableau/plateau
}
}
}
}

f0.addScore(piece.couleur,piece.Nb_pcarre);
f0.transfoEnabled();

} else {

/* Sinon on affiche un message d'erreur et on ramène la pièce */

piece.setLocation(posx0,posy0);

JOptionPane.showMessageDialog(null,"Les pièces ne doivent pas se chevaucher",
"Message de Blokus",JOptionPane.WARNING_MESSAGE);

}


afficher();

}

/* Test: Affichage dans la console de la matrice représentant l'état du plateau
*/

public void afficher () {

for (int v = 0;v<20;v++) {
for (int u=0;u<20;u++) {

if (u!=19) {
System.out.print(grille[u]);
} else { System.out.println(grille[u]); }


}

}

}


/**
* Accesseur pour les petits carrés.
* -> Paramètres: pos Case dont on aimerait obtenir le petit carré.
* -> Résultat: Le petit carré en question.
*/
public int getCarre(int[] pos) {
return grille[ pos[X] ][ pos[Y] ];
}



public boolean estVide(int[] pos) {
return ((grille[ pos[X] ][ pos[Y] ]) == RIEN);
}
}

//--------Classe principale--------------
//pour l'instant

import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.border.*;

public class Blocus extends JPanel {
int lastX, lastY;
MouseListener m1;
MouseMotionListener mm1;
static Plateau plateau1;
final static Blocus jeu = new Blocus();
boolean deplacable;
int pospiece0x = 0, pospiece0y = 0;
static Piece pieceClick;
public Piece a,b,c,d,c1,f1,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;
static F_Graphique f;



/** Aucune piece posée: carré gris. */
final static int RIEN = 0;
/** Constante de la couleur BLEU. */
final static int BLEU = 1;
/** Constante de la couleur JAUNE. */
final static int JAUNE = 2;
/** Constante de la couleur ROUGE. */
final static int ROUGE = 3;
/** Constante de la couleur VERT. */
final static int VERT = 4;
/** Taille fixe en pixels du plateau graphique */
final static int TAILLE = 261;


public Blocus () {



setLayout(null); // Pas de repositionnement automatique des composants swing

// Création du plateau avec (0,0) comme coordonnée d'attache
plateau1 = new Plateau(0,0, this);


// Tentative d'affichage du plateau à la position (0,0) et des autres pieces

try {
creerPieces();
creerPlateau(0,0);
}
catch(Exception e) {
e.printStackTrace();
}





m1 = new MouseAdapter () {


public void mousePressed (MouseEvent e) {

Piece i = (Piece)e.getComponent();

/* On stocke la pièce cliquée en vue de la tourner ultérieurement */

f.stockPiece(i);

plateau1.enAvant(i);




//i.setBorder (BorderFactory.createMatteBorder (1,1,1,1,Color.white));
//i.rotm90();
//System.out.println ("rotation de -90");
//i.dessinerPiece(i.couleur,i.x,i.y,(JPanel)i.getParent());





/* Si on a cliqué au dessus d'un petit carré, et que la piece peut
être déplacée, on autorise le mouvement de toute la pièce */

if ((i.clickDessus(e.getX(),e.getY())==true)&&(i.deplacable == true)) {
lastX = e.getX (); lastY = e.getY ();

/* Si on ne clique pas au-dessus du plateau on mémorise la position initiale de la pièce avant drag */
if ((i.x+getX()>plateau1.tabx)&&(i.x+getX()<plateau1.tabx+TAILLE)&&(i.y+getY()>plateau1.taby)&&(i.y+getY()<plateau1.taby+TAILLE)) {}
else {pospiece0x = i.x; pospiece0y = i.y;}

/* Mémorisation de la dernière pièce sélectionnée par un clic */
pieceClick = i;
}

if (i.deplacable == true) { System.out.println("Deplacement d'une piece...");
} else { System.out.println("Piece posee.");
}



}


/* Relâchement de la souris: blocage de la pièce si elle est à la bonne position
*/

public void mouseReleased (MouseEvent e) {

Piece i = (Piece) e.getComponent ();

/* On vérifie d'abord que la pièce a été relâchée au-dessus du plateau
*/
if (i.deplacable==true) {

if ((i.x+getX()>plateau1.tabx-2)&&(i.x+getX()<(plateau1.tabx+TAILLE))&&((i.y+getY())>plateau1.taby-2)&&((i.y+getY())<(plateau1.taby+TAILLE))) {

/* Si la pièce est bien sur le plateau, on la gèle sur la position correcte la plus proche
* sinon on la renvoie à sa position initiale
* */

int xp = (int)(i.x/13), yp = (int)(i.y/13);


if ((abs(xp*13-(i.x+2))<8)&&(abs(yp*13-(i.y+2))<8)) {

i.setLocation(xp*13,yp*13);
i.deplacable = false;

plateau1.ajouterPiece(i,xp,yp,pospiece0x,pospiece0y,f);


}
else if ((abs(xp*13-(i.x+2))>8)&&(abs(yp*13-(i.y+2))>8)) {


i.setLocation(xp*13+13,yp*13+13);
i.deplacable = false;

plateau1.ajouterPiece(i,xp,yp,pospiece0x,pospiece0y,f);

}

else {
i.setLocation(pospiece0x, pospiece0y);
}

}

}
}





};





// drag pièce

mm1 = new MouseMotionAdapter () {

public void mouseDragged (MouseEvent e) {
int x2 = e.getX (), y2 = e.getY ();
Piece i = (Piece) e.getComponent ();





// Si le mouvement de la pièce a été autorisé on le fait
if (i.deplacable == true) {
i.x += x2 - lastX; i.y += y2 - lastY;
i.setLocation (i.x, i.y); // deplacement pièce
}



}



};


/*
// creation d'un Instru

addMouseListener (new MouseAdapter () {
public void mousePressed (MouseEvent e) {




//j.addMouseListener (ml);
//j.addMouseMotionListener (mml);
//add (j);



repaint (); // marche pas sans ca
}
} );*/

}

public static void main (String [] args) {

f =new F_Graphique();
f.setVisible (true);



}

private void creerPlateau(int x0, int y0) {


// Dessin du plateau dans la fenêtre courante en (0,0):
plateau1.dessiner(this);



}


public int abs(int x) {
if (x<0) { return -x;} else {return x;}

}




private void creerPieces() {


/* Création des pièces disponibles autour du plateau de jeu
* avec leur différentes couleurs, leur position, leur type,
* ainsi que leur capacité à être déplacées.
*/

a = new Piece(VERT,1,1,70,300,true,true,this);
b = new Piece(VERT,1,2,220,360,true,true,this);
c = new Piece(VERT,1,3,5,270,true,true,this);
d = new Piece(VERT,1,4,130,285,true,true,this);
c1 = new Piece(VERT,1,5,80,370,true,true,this);
f1 = new Piece(VERT,1,6,280,360,true,true,this);
g = new Piece(VERT,1,7,280,285,true,true,this);
h = new Piece(VERT,1,8,150,370,true,true,this);
i = new Piece(VERT,1,9,350,285,true,true,this);
j = new Piece(VERT,1,10,5,360,true,true,this);
k = new Piece(VERT,1,11,210,285,true,true,this);
l = new Piece(VERT,1,12,350,360,true,true,this);
m = new Piece(VERT,2,1,350,140,true,true,this);
n = new Piece(VERT,2,2,260,140,true,true,this);
o = new Piece(VERT,2,3,300,140,true,true,this);
p = new Piece(VERT,2,4,260,210,true,true,this);
q = new Piece(VERT,2,5,310,210,true,true,this);
r = new Piece(VERT,3,1,260,60,true,true,this);
s = new Piece(VERT,3,2,330,60,true,true,this);
t = new Piece(VERT,4,1,260,5,true,true,this);
u = new Piece(VERT,5,1,310,5,true,true,this);

final Piece[]pieces = {a,b,c,d,c1,f1,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u};

for(int Lettre=0;Lettre<pieces.length;Lettre++)
{add(pieces[Lettre]);}

repaint();

MouseAdapter adapt = new MouseAdapter () {
public void mousePressed (MouseEvent e) {

for(int Lettre1=0;Lettre1<pieces.length;Lettre1++)
{pieces[Lettre1].addMouseListener (m1);
pieces[Lettre1].addMouseMotionListener (mm1);}




}


};

addMouseListener (adapt);




}



}


voila si qqn trouve une solution je suis preneur....

Merci beaucoup
mercredi 9 juin 2004 à 16:55:22 | Re : Jeu de stratégie

gaelcal

Est ce que tu peut mettre une capture d'écran s'il te plait?
mercredi 9 juin 2004 à 23:13:11 | Re : Jeu de stratégie

killians




voila la capture d'écran....


Cette discussion est classée dans : pièce, jeu, jpanel, pièces, plateau


Répondre à ce message

Sujets en rapport avec ce message

probleme de JPanels [ par killians ] BonjourJe 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èc *** jEu bLaCkBoX *** [ par samder76 ] Je doit réaliser un jeu intitulé Blackbox...Pour cela je dois faire un plateau de jeu où je doit poser des drapeaux sur des cases (que l'on appellera image de fond???? [ par pheather ] Bonjour! Voila mon probleme je suis en train de developper un abalone en java et je voudrai savoir si c'est possible (et comment faire) pour inserer u Comment faire un plateau de jeu avec des pions [ par Migs ] Voici mon problème: Je souhaite réalisé un jeu, plus exactement un JawBreaker ou Bubblets pour ceux qui connaissent. Mon problème est simple, j'appr AIDER...MOI..................Probléme de Rafraichisement en JAVA [ par kenza_sana ] Bonjour j'ai un trés grand probléme...Je programme un jeu pour cela j'utilise 5 classes dont une s'apple Grille (elle hérite d'un JPanel et apple la f Pb saisie jeu !! [ par joduak ] Salut! Voilà je développe un jeu de plateau, et j'ai un problème au niveau des commandes de déplacements des personnages. Si par exemple 2 joueurs jou Problème d'affichage de JPanel (et de synchronisation?) [ par NonoMoreno ] Tout d'abord, Bonjour / Bonsoir à tous !Et je remercie d'avance ceux qui auront le courage de lire jusqu'en bas et de tenter de m'aider : -)...Je suis [debutant les classe [ par jeremeclip ] plateau de jeu [ par angelique111 ] salut,je dois creer un jeu (reversi - othello) en java. apres avoir initialisé mon tableau et placer les pieces initiales, je suis sensée afficher le Programmation socket... [ par joduak ] Bonjour, Je dois faire transiter des positions d'objets présents sur un plateau de jeu d'un client 1 à un client 2. Chaque objet présents sur le plat


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales