Je n'arrive pas a lancer la balle de mon jeu de ping pong

Signaler
Messages postés
18
Date d'inscription
samedi 30 janvier 2010
Statut
Membre
Dernière intervention
24 octobre 2011
-
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
-
Bonjour à tous, je ne suis que débutant dans la programmation, notamment en java, je me suis lancer dans la création d'un jeu de pingpong, j'ai réussi à faire la boucle pour le déplacement de la balle, j'ai voulu mettre un menu afin que l'utilisateur puisse décider du moment ou la balle pourra partir, et c'est la que ce pose mon problème: la balle ne défile pas mais la boucle a bien démarré car je peu vérifier les résultat avec la console, l'aspect graphique demeure bloquer, je ne peux même pas fermer la fenêtre, ou changer de menu, je ne sais pas d’où viens le problème, s'il vous plaît aider moi.

Voici mon code:
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
 
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


 
public class Fenetre extends JFrame {
 
        private Panneau pan = new Panneau();
        private JMenu file = new JMenu("File");
        private JMenuItem Go = new JMenuItem ("Go!");
        private JMenuItem Stop = new JMenuItem ("Stop");
        private JMenuBar mb = new JMenuBar();
        public Fenetre(){
                file.add(Go);
                Go.setMnemonic(KeyEvent.VK_G);
                Go.setIcon(new ImageIcon(getClass().getResource("play.gif")));
                file.add(Stop);
                Stop.setMnemonic(KeyEvent.VK_S);
                Stop.setIcon(new ImageIcon(getClass().getResource("pause.gif")));
                
                mb.add(file);
                this.setTitle("PingPong");
                this.setSize(300, 300);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setLocationRelativeTo(null);
                this.setJMenuBar(mb);
                this.setContentPane(pan);
                this.setVisible(true);
                
                	Go.addActionListener(new java.awt.event.ActionListener() {
                		   public void actionPerformed(java.awt.event.ActionEvent e) {
                			   
                			   go();
                		   }
                		});
                	
                
        }

        public void go(){
        	Boolean Run=true;
        	System.out.println("lancement de la fonction");
        	boolean droite= true;
        	/*Les x diminuent on vas vers la droite*/
        	boolean bas= true;
        	/*Les y diminuent mais on va vers le haut dans le repere dans le repère de la fenetre*/
        	int maxx=this.getWidth()-50;
        	int minx=0;
        	
        	int maxy=this.getHeight()-50;
        	int miny=0;
                while(Run ==true)
                {	

                	System.out.println("Haut de la boucle");
                        int x pan.getPosX(), y pan.getPosY();
                        
                        if(droite)
               		 {
               			 x=x+2;
               			 if(x>maxx)droite=false;
               			 }
               		 else
               		 {
               			 x=x-2;
               			 if(x<minx)droite=true;
               			 }
                        
                        if(bas)
                  		 {
                  			 y=y-3;
                  			 if(y<miny)bas=false;
                  			 }
                  		 else
                  		 {
                  			 y=y+3;
                  			 if(y>maxy)bas=true;
                  			 }
                       System.out.println("("+x+";"+y+")");
           		 	 
                        pan.setPosX(x);
                        pan.setPosY(y);
                        pan.repaint();  
                        try {
                                Thread.sleep(10);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                
        }       
}

6 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Bonjour,

Je pense que tu as oublié de mettre un setLayout(null) dans ta fenetre.

Deux remarques, essayes de respecter les conventions de nommage en java, tu seras plus facile à lire. Et au lieu de réinventer la poudre avec ta méthode go(), implémente l'interface runnable et remplaces go par run, tu pourras ainsi exécuter ton jeu dans un autre thread que le thread courant.
Messages postés
18
Date d'inscription
samedi 30 janvier 2010
Statut
Membre
Dernière intervention
24 octobre 2011

Merci, cela m'as bcp aidé, mais je suis à nouveau bloqué, je voudrais déplacer un petit rectangle qui servivera de raquette pour ma balle de ping pong, le problème c'est que je n'arrives pas à mettre les touches directionnelles en écoute, j'ai beau copier des script supposé correcte, ça ne marche pas.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Il faut que tu utilises un keyListener et que tu fasses un switch sur la source pour récupérer la bonne touche, je pense que c'est ce que tu as trouvé sur internet.

Le problème est que ton keyListener est associé a un composant qui doit avoir le focus (requestFocusInWindow()) pour que le listener soit activé.

Juste par curiosité, montre moi ton code que je vois si tu as un soucis.
Messages postés
2
Date d'inscription
lundi 17 octobre 2011
Statut
Membre
Dernière intervention
1 novembre 2011
1
telecharge le livre JAVA POUR ENFANT et tu auras toute la solution detaillée
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
C est plus propre comme ça ;o)

Jeu de pong.

GodConan ;o)