IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

[debutant] faire bouger une balle et une raquette problème


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Par défaut [debutant] faire bouger une balle et une raquette problème
    bonjours voila j'ai un probleme dans une application que je cree une table de pingpong avec une interface autour donc au debut j'ai cree les raquette et la balle avec un Graphics tout va bien puis je commence a coder une partit pour faire bouger les raquette du joueur par rapport au coordonner la tout va bien aussi mais quand je crre le code pour faire bouger la balle pour la renvoyer de l'autre coter de la table la probleme l'application ne d'affiche plus

    voila une partit du code oui je mes les evennement des raquettes et la balles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
     
    [....]
    final JPanel pane2 = new JPanel(){
     
    			private int balle_X = BALLE_X_DEPART;
    			private int balle_Y = BALLE_Y_DEPART; 
     
    			public void paint(Graphics g) {
    				super.paint(g);
     
    				//dessine la table verte
    				g.setColor(new Color(couleur1, couleur2,couleur3));
    				g.fillRect(DISTANCE_BORD_X_TABLE , DISTANCE_BORD_Y_TABLE, LARGEUR_TABLE,HAUTEUR_TABLE );
    				//dessine la profondeur de la table
    				g.setColor(new Color(couleur4,couleur5,couleur6));
    				g.fillRect(DISTANCE_BORD_Y_TABLE_FONCER, DISTANCE_BORD_X_TABLE_FONCER, LONGUEUR_FONCER, LARGEUR_FONCER);
    				g.fillRect(DISTANCE_BORD2_Y_TABLE, DISTANCE_BORD2_X_TABLE, LARGEUR_FONCER2, LONGUEUR_FONCER2);
     
     
                                      [...coupeure trop long.........]
     
     
    				//Dessine le filet 
    				g.setColor(new Color(couleur16, couleur17, couleur18));
    				g.drawLine(POINT_LIGNE_HAUT, LIGNE_COMMENCE, POINT_LIGNE_BAS, LONGUEUR_LIGNE);
    				g.drawLine(POINT_LIGNE_HAUT2, LIGNE_COMMENCE, POINT_LIGNE_BAS2, LONGUEUR_LIGNE);
    				g.drawLine(POINT_LIGNE_HAUT3, LIGNE_COMMENCE, POINT_LIGNE_BAS3, LONGUEUR_LIGNE);
     
    				//dessine l'ombre du filet
    				g.setColor(new Color(couleur19, couleur20, couleur21));
    				g.drawLine(POINT_LIGNE_HAUT4, LIGNE_COMMENCE, POINT_LIGNE_BAS4, LONGUEUR_LIGNE);
     
    				//dessine la balle de ping pong
    				g.setColor(new Color(couleur22,couleur23 , couleur24 ));
    				g.fillOval(balle_X, balle_Y, 10, 10);
     
    //				indique les coordoner de la souris  a effacer par la suite
    				g.drawString("Y: "+Y+" X: "+X+" i:"+i, 30, 10);
     
    				run1();
    				if(nouvelle2 == true){
    					Graphics2D surface = (Graphics2D) g;
    					surface.setPaint(new Color(0, 0, 255, 64));
    				      surface.setFont(new Font("SansSerif", Font.ITALIC+Font.BOLD, 30));
    				      surface.drawString("Nouvelle Partie", 30, 110);
    				      surface.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
     
    				}
     
    				if(pointJoueur >= 21 && texteGagant2 == true){
    					texteGagant = true;
    				}else if (texteGagant2 == false){
    					texteGagant = false;
    				}
    				if(texteGagant == true && pointJoueur > pointOrdi && pointJoueur-2 >= pointOrdi ){
    					Graphics2D surface = (Graphics2D) g;
    //					  // tracé du texte en transparence sur l'image
    				      surface.setPaint(new Color(0, 0, 255, 64));
    				      surface.setFont(new Font("SansSerif", Font.ITALIC+Font.BOLD, 30));
    				      surface.drawString("Vous avez gagné", 30, 110);
    				      surface.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    				      quiterPartie = true;
     
    				    repaint();
    				}else if (texteGagant == false){
    					repaint();
    				}
    				quitter();
    				serviceEnfant();
    				run();
    			}
     
    			public void run(){
    				while(true){
    					if(balleService){//si la balle est en mouvement
    						//Etape1. La balle se deplace t'elle vers la gauche?
    						if(déplacementGauche  && balle_X > BALLE_X_MIN){
    							rebondPossible = (balle_Y >= departRaquetteOrdi 
    									&& balle_Y < (departRaquetteOrdi + 
    									departRaquetteOrdi) ? true : false); 
    							balle_Y -= deplacmentVertical;
    							balle_X -= INCREMENTATION_BALLE;
    						}
     
     
    					}
    				}
    			}	
     
     
    			public void run1(){
    				if(nouvelle == true){
    					nouvelle2 = true;
    				i++;
    				RAQUETTE_ENFANT_Y_DEPART = 95;
    				RAQUETTE_ENFANT_Y2 = 226;
    				RAQUETTE_ENFANT_Y3 = 226;
     
    				if(i == 200){
    						nouvelle = false;
    					}
     
    				}else if(nouvelle == false){
    					nouvelle2 = false;
    					i = 0;
    				}
    			}
     
    			private void serviceEnfant(){
    				int raquetteJoueur = RAQUETTE_ENFANT_Y_DEPART;
    				balleService = true;
    				balle_X = RAQUETTE_ENFANT_X -5;
    				balle_Y = raquetteJoueur +10;
     
    				if(service == false && balle_Y > HAUTEUR_TABLE / 2){
    					deplacmentVertical = -1;
    				}else{
    					deplacmentVertical = 1;
    				}
     
    			}
     
    			public void quitter(){
    				if(quiterPartie1 == true && quiterPartie == true){
    					System.exit(0);
    				}else if (quiterPartie1 == false){}
    			}};
     
     
     
    			pane2.addMouseMotionListener(new MouseAdapter(){
    				public void mouseMoved(MouseEvent événement) {
    					if(nouvelle == false){
    					int souris_Y = événement.getY();
    					int souris_X = événement.getX();
    					Y = souris_Y;
    					X = souris_X;
     
    					//actionne la raquette principale du joueur
    					if(souris_Y < RAQUETTE_ENFANT_Y_DEPART +15  && RAQUETTE_ENFANT_Y_DEPART + blocageRaquette33  > HAUT_TABLE +15 ){
    						RAQUETTE_ENFANT_Y_DEPART -= 4;
    						pane2.repaint();
    					}else if (souris_Y > RAQUETTE_ENFANT_Y_DEPART   
                                                [.....coupure du code tros long....]
     
     
    						pane2.repaint();
    					}else if(souris_X > RAQUETTE_ENFANT_Y3 +15 && RAQUETTE_ENFANT_Y3 + blocageRaquette44 < LARGEUR_TABLE -6 && souris_Y < LIGNE2_COMMENCE){
    						RAQUETTE_ENFANT_Y3 += 3;
    						pane2.repaint();
    					}}}});
     
    [...]


    et j'ai appris lors de mon tuto que l'ordinateur ne pouviat pas effectuer deux tache en meme temps donc on ma dit de mettre ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public void actionPerformed(ActionEvent evt){
    		//cree un fil et execute le code "tuer le temps"
    		//sans bloquer la fenetre.
    		Thread travailleur = new Thread(this);
    		travailleur.start();//Ceci appelle la methode run()
    	}
    	public void run(){...}
    donc je pense que ce code suffirait pour faire marcher les 2 taches en meme temps mais je voudrias savoir ou doje le placer pour qu il marche et est ce que le code c'est bine celui ou il ya t i ldes modification a faire sur celui ci??

    meric d'avance

  2. #2
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    juste un avis, utilises une image prète pour la table au lieu d'effectuer d'enormes calculs pour la dessiner.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Par défaut
    ouai mais pas bête j'avias pas pensez a sa mais le truc c'ets que le joueur peut modifier la taille de la table
    ddans les option sinon toujour pas la reponse a mes question??

  4. #4
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Par défaut
    bon une autre question je voudrias savoir comme faire actionner deux evenement en meme temps

  5. #5
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,

    Citation Envoyé par jerem721 Voir le message
    bon une autre question je voudrias savoir comme faire actionner deux evenement en meme temps
    La question n'est pas tres claire. Si tu veux dire executer deux taches en meme temps tu peux utiliser 2 threads dont chacun possede l

  6. #6
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Pardon! j'ai frappé a tort la touche Enter avant d'achever le message.

    Citation Envoyé par jerem721 Voir le message
    bon une autre question je voudrias savoir comme faire actionner deux evenement en meme temps
    La question n'est pas tres claire. Si tu veux dire executer deux taches en meme temps, tu peux utiliser 2 threads dont chacun définit le code d'une tache dans sa methode run et tu les déclenches par la methode start.
    Note: si ta classe implemente l'interface Runnable et redéfinit la methode run il ne serait pas tres pratique de créer deux threads en passant une reference de la classe a leurs constructeurs car ils executeront le meme code contenu dans run.
    Pour créer plusieurs threads qui execute du code different tu peux créer des classes qui héritent de Thread et qui surcharge chacune sa propre methode run:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class MonThread1 extends Thread{
     
     public void run()
     {
       // tache 1
       ....
     }
    }
     
    class MonThread2 extends Thread{
     
     public void run()
     {
       // tache 2
       ....
     }
    }
     
    MonThread1 th1 = new MonThread1();
    MonThread2 th2 = new MonThread2();
     
     th1.start();
     th2.start();
    Ces deux classes doivent de preferece etre internes pour qu'il bénéficient d'un accès a tous les champs de la classe qui les abrite.

    Sinon tu peux utiliser des classes anonymes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Thread th1 = new Thread(){
     public void run()
    {
      ...
    }
     
    };
    @+.

  7. #7
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Par défaut
    salut
    ok merci sa marche impect ta technique meric beaucoup

    jerem721

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo