TP java tir canon

Document Sample
TP java tir canon Powered By Docstoc
					TP Programmation réseau 1ère année, 2003-2004                                               IUT, Département GTR, Béziers



                               TP Java – Programmation Réseau (9/11)
                                   Le tir au canon (ou équ. Diff., Thread etc .)

     1.   Reprendre la classe MyAppl qui devra fonctionner à la fois en applet et en application. Cette applet fera
          apparaître un canon dont l’angle theta contrôle le tir d’un boulet. Compléter la fonction main(). Pourquoi cette
          fonction ?

     2.   Pourquoi la ligne commençant par                    import   java.applet.*;
                                                              import   java.awt.*;
          f.addWindowListener() ?                             import   java.io.*;
                                                              import   java.awt.event.*; // rajout pour gestion d'événements
     3.   vx et vy sont supposées être les vitesses           public class MyAppl extends Applet implements ActionListener{
          initiales en x et y du boulet. Compléter                int vv=80 ; Scrollbar sc; Boulet bb;
                                                                public static void main(String args[]){
          pour que vx et vy soient fonction de vv                      Frame f=new Frame("Boum ..boum!");
          (module) et de l’angle theta ?1 Que se                          … (à completer)
                                                                       f.addWindowListener(new WindowAdapter() {// pour fermer
          passera-t-il lorsque le bouton « feu » sera         classiquement
          ‘cliqué’ ?                                                            public void windowClosing(WindowEvent e)
                                                              {System.exit(0);}});
                                                                       ap.init();
     4.   Compléter paint(g) pour faire apparaître                     f.show();
          en plus du boulet (s’il existe) un canon                   }
                                                                 public void init() {
          sous la forme d’une ligne2 entre les points             sc= new Scrollbar(Scrollbar.HORIZONTAL,50,22,10,90);
                                                              this.add(sc);
          0,h et vv.cos() et h-vv.sin() (h=hauteur              Button btn = new Button("feu"); this.add(btn);
          de l’applet).                                           btn.addActionListener(this) ;
                                                                   }
                                                                 public void actionPerformed(ActionEvent ev) {
     5.   Comment ‘rafraîchir’ chaque fois que                    double theta= this.sc.getValue()* … ;//(traduire en radian)
                                                                        if (ev.getActionCommand().equals(“feu”)) {
          change l’angle ?                                                ……
                                                                          bb=new Boulet(this);bb.setVitesse(vx,vy);bb.start();}
     6.   Pourquoi les objets boulets une fois qu’ils sont        repaint() ;}
                                                                 public void paint(Graphics g){
          lancés ‘vivent leur vie’. Quelle fonction définit           if (bb!=null) bb.paint(g);
          leur vie ? Quelle fonction dans MyAppl les               }
          lancent ?                                           }


     7.   Pourquoi ici transmet-on au boulet (à sa            class Boulet extends Thread {
          création : voir constructeur) l’applet qui le          MyAppl appl; double x=0 ; double y=0;
          crée ?                                                 double vx,vy;double dt=0.05;
                                                                     public Boulet(MyAppl _appl) {this.appl=_appl;}
                                                                 public void setVitesse(double _vx, double _vy)
     8.   À quelle équation différentielle simpliste               {this.vx=_vx; this.vy=_vy;}
          correspond3 : x += vx*dt (dt est le pas de             public void bouge()
          temps) ou y += vy*dt ?                                   { h=this.appl.getSize().height;
                                                                    x += vx*dt; y += vy*dt;
     9.   Ecrire une équation analogue pour la vitesse              if (x>this.appl.getSize().width) x=0;
                                                                    if (y>h) y=0;
          en y : vy += … traduisant que la dérivée de la           }
          vitesse vy est = -gPesanteur (-9.81). Modifier         public void paint(Graphics g) {
          bouge() pour tenir compte de la pesanteur.                g.setColor(new Color(222,22,22));
                                                                    g.fillOval((int)x-r,(int)(h-y-r),r+r,r+r);
     10. Introduire un mécanisme de ‘liste chaînée’                }
                                                                 public void run(){ while (true) {
         pour des tirs en rafale (Idée : Prévoir un                 this.bouge();
         champ prec dans Boulet, qu’on remplira au                  try {this.sleep((int)1000*dt);
         niveau du constructeur, et prévoir dans                         } catch (Exception ex){}
         paint(g) un appel au paint(g) du précédent s’il            this.appl.repaint();
         existe)                                                 }
                                                              }
     11. Définir une nouvelle classe BigScroll qui
         ‘étend’ la classe Scrollba, avec une
         redéfinition de la taille préférée (fonction
         getPreferredSize() appelée par le système
         quand il en a besoin).

     12. Améliorer le programme selon sa créativité :
         couleur des boulets, vitesse d’éjection, cible
         mobile, comptage des points, deux canons, etc




1
  x=Math.cos(theta) (fonction statique de la classe
Math) pour cos(
2
  g.drawLine(x1,y1,x2,y2)
3
  Voir TD Laplace
Y.M. fev 2004                                                 1
TP Programmation réseau 1ère année, 2003-2004       IUT, Département GTR, Béziers




Y.M. fev 2004                                   2

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:24
posted:8/31/2012
language:Unknown
pages:2