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