Bonjour à tous, voila actuellement je suis sur un petit projet de fin d'année qui consiste à réaliser le jeux "tours de Hanoï" par java, sauf problème je n'arrive pas à dessiner sur ma fenêtre JFrame des graphics, ca fait a peine un ans que j connais java, je d'abord appris a manipuler les méthodes graphcis, mais toute fois je n'arrive pas à gerer les methodes swing, pour tant j'ai bien essayé d'utiliser lé methodes paint() et paintComponent() mais ca ne marche tjs pas.
voila il est pt pas parfait le programme encore mais le principe est le suivant :
- avec une class hanoi (class principal) j'utilise ft d'une class Fenetre, avec encore deux autres type de class afin de pouvoir gerer les poteau puis les disque.
-pour le transferer des donnée j'ai choisi des vector pour les disque des poteau et un vector de poteau pour la class hanoi (toute fois il n'est pas encore complex à fin de pouvoir gerer les disque sur les poteau) car je suis encore bloké à comment dessiner les poteau.
voici les class principal apellé par le jeux :
public class Hanoi {
/**
* @param args the command line arguments
*/
private final int hauteur_pile_max = 15;
private int hauteur_init = 0;
static private int nb_disque = 0;
private int n;
private boolean bot;
private String deplacement;
private Fenetre ft = new Fenetre ();
private static Vector <Disque> d = new Vector ();
private static Vector <Poteau> ptx = new Vector ();
private final int delta_x = 15;
private final int delta_y = 15;
public static void solution (int hauteur,Vector<Disque> A,Vector<Disque> C,Vector<Disque> B,Fenetre ft1,Vector<Disque> resultat)
{
if(nb_disque>0){
solution((nb_disque-1),A,B,C,ft1,resultat);
resultat.addElement(A.get(nb_disque));
resultat.addElement(C.get(nb_disque));
solution((nb_disque-1),B,C,A,ft1,resultat);
}
}
public Vector <Poteau> Poteaux(Vector <Disque> v){
Vector <Poteau> Ptx = new Vector();
for (int i = 0; i< 3; i++ ){
switch (i){
case 0 :Poteau A = new Poteau(v);
Ptx.add(i, A);
case 1 :Poteau B = new Poteau(v);
Ptx.add(i, B);
case 2 :Poteau C = new Poteau(v);
Ptx.add(i, C);
}
}
return Ptx;
}
public Vector <Disque> Disque(int hauteur){
Vector <Disque> DisqueP = new Vector();
hauteur_init = hauteur;
for (int i = 0; i<hauteur; i++ ){
Disque nDisque = new Disque(hauteur_init);
DisqueP.add(i, nDisque);
}
return DisqueP;
}
public static void main(String[] args) {
Hanoi p = new Hanoi();
p.ft.initFrame();
Graphics g = p.ft.getGraphics();
System.out.println("Entrez le nombre de Disque :");
nb_disque = Input.readInt();
d = p.Disque(nb_disque);
ptx = p.Poteaux(d);
p.ft.paintPoteau(g,ptx);
}
}
// La class Fenetre
public class Fenetre extends JFrame {
private Container contenaire = new Container();
private JLabel nmbAnneauLabel = new JLabel();
private JTextField nmbAnneauField = new JTextField();
private JButton simulationBouton,confirmerBouton = new JButton();
private JComponent Cp;
private int nombreAnneau;
private final int hauteur = 500;
private final int largeur = 700;
private final int delta_x = 15;
private final int delta_y = 15;
public Fenetre (){
this.setVisible(true);
this.toFront();
this.setTitle("Tours d'hanoï");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(largeur, hauteur);
setLocationRelativeTo(null);
}
public void initFrame(){
contenaire = getContentPane();
contenaire.setBackground(Color.white);
contenaire.setLayout(null);
simulationBouton=new JButton("commencer");
simulationBouton.setBounds(500,15,150,25);
simulationBouton.setBackground(Color.black);
simulationBouton.setForeground(Color.red);
contenaire.add(simulationBouton);
confirmerBouton=new JButton("Voir Solution");
confirmerBouton.setBounds(250,delta_y,200,25);
confirmerBouton.setBackground(Color.black);
confirmerBouton.setForeground(Color.red);
contenaire.add(confirmerBouton);
setVisible(true);
}
public void paintPoteau(Graphics g, Vector <Poteau> v)
{
Poteau A = new Poteau(v.elementAt(0).d);
Poteau B = new Poteau(v.elementAt(1).d);
Poteau C = new Poteau(v.elementAt(2).d);
int x = 0;
int y = 50;
x = WIDTH/4 ;
A.setCentre_x(x);
A.setCentre_y(y);
paint(g);
A.drawPoteau(g);
super.paint(g);
x = WIDTH/2 ;
B.setCentre_x(x);
B.setCentre_y(y);
B.drawPoteau(g);
x = 3*WIDTH/4 ;
C.setCentre_x(x);
C.setCentre_y(y);
C.drawPoteau(g);
}
}
// les class poteau et disque
private int hauteur_pile;
private int pos_x ;
private int pos_y ;
private final int hauteur = 20;
private Disque dl ;
Vector <Disque> d = new Vector ();
private final int delta_x = 15;
private final int delta_y = 15;
private int largeurBase;
public Poteau(Vector <Disque> v){
this.hauteur_pile = v.size();
d = v;
}
public void drawPoteau(Graphics g){
//base poteau
this.largeurBase = 2*d.size()*delta_x;
g.setColor(Color.RED);
g.fillRect(pos_x - d.size()*delta_x, pos_y + hauteur, largeurBase, hauteur);
// Hauteur fexible par rapport au nombre de disque
g.setColor(Color.BLACK);
g.drawLine(pos_x, pos_y, pos_x, (pos_y+hauteur+(d.size()*delta_y)));
System.out.println("Graphics: " + g );
}
public int getCentre_x(){
return this.pos_x;
}
public int getCentre_y(){
return this.pos_y;
}
public void setCentre_x(int x){
this.pos_x = x;
}
public void setCentre_y(int y){
this.pos_y = y;
}
}
public class Disque {
private final int delta_x = 15;
private final int delta_y = 15;
private int largeur = 0;
private int nDisque;
public Disque (int n){
nDisque = n;
}
public void PaintDisque(Graphics g, Poteau p){
int x = 0;
int y = 0;
x = coin_haut_gauche_x (p);
y = coin_haut_gauche_y (p);
g.setColor(Color.GRAY);
g.fillRect(x, y, 2*largeur*delta_x, delta_y);
System.out.println("Graphics: " + g );
}
public int coin_haut_gauche_x (Poteau poteau_acc){
int x = 0;
x = poteau_acc.getCentre_x()- this.largeur*delta_x;
return x;
}
public int coin_haut_gauche_y (Poteau poteau_acc){
int y = 0;
y = poteau_acc.getCentre_y()- nDisque*this.delta_y*2;
return y;
}
public void removeDisque(Graphics g, Poteau poteau_acc){
int x = 0;
int y = 0;
x = coin_haut_gauche_x(poteau_acc);
y = coin_haut_gauche_x(poteau_acc);
g.setColor(Color.WHITE);
g.fillRect(x, y, largeur, delta_y);
}
}
voila si quelqu'un pourrais prendre un petit instant pour m'expliquer un peu pourquoi mon struction paint() ca serais sympa!!
