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

972apprenti Messages postés 18 Date d'inscription samedi 30 janvier 2010 Statut Membre Dernière intervention 24 octobre 2011 - 15 oct. 2011 à 22:45
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 6 nov. 2011 à 21:37
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

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
17 oct. 2011 à 10:31
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.
0
972apprenti Messages postés 18 Date d'inscription samedi 30 janvier 2010 Statut Membre Dernière intervention 24 octobre 2011
24 oct. 2011 à 22:35
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.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 oct. 2011 à 07:55
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.
0
mbouale Messages postés 2 Date d'inscription lundi 17 octobre 2011 Statut Membre Dernière intervention 1 novembre 2011 1
1 nov. 2011 à 11:43
telecharge le livre JAVA POUR ENFANT et tu auras toute la solution detaillée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
6 nov. 2011 à 21:35
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
6 nov. 2011 à 21:37
C est plus propre comme ça ;o)

Jeu de pong.

GodConan ;o)
0
Rejoignez-nous