User Tools

Site Tools


2016_2017:s2:td:td_jeux

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
2016_2017:s2:td:td_jeux [2017/03/06 22:44]
blay [Où l'on joue !]
2016_2017:s2:td:td_jeux [2017/03/13 11:35] (current)
blay [Modélisation et Codage de l'interface graphique Basique]
Line 5: Line 5:
  
 Nous allons créer un jeu de mini-Tennis. Nous allons créer un jeu de mini-Tennis.
-Pour cela, nous sommes "​grave" ​inspiré ​de http://​www.edu4java.com/​en/​game/​game3.html.+Pour cela, nous nous sommes "​grave" ​inspirés ​de http://​www.edu4java.com/​en/​game/​game3.html.
  
 <note warning>​**A LIRE** <note warning>​**A LIRE**
Line 20: Line 20:
  
 Notre objectif n'est pas de vous apprendre à programmer une interface graphique donc les codes correspondants vous sont donnés. Notre objectif n'est pas de vous apprendre à programmer une interface graphique donc les codes correspondants vous sont donnés.
 +
 +
 +
 +
 +<note warning>​Pour la semaine prochaine vous devez préparer le TD suivant qui est la préparation de l'​examen de l'an dernier !</​note>​
  
 ===== Spécifications ===== ===== Spécifications =====
Line 31: Line 36:
   - On veut pouvoir jouer en déplaçant la raquette de la gauche vers la droite ou de bas en haut et inversement.   - On veut pouvoir jouer en déplaçant la raquette de la gauche vers la droite ou de bas en haut et inversement.
   - On veut gérer plusieurs joueurs : en début de partie tous les joueurs saisissent leur nom, puis ils jouent. On affiche le joueur qui a le meilleur score à la fin de la partie.   - On veut gérer plusieurs joueurs : en début de partie tous les joueurs saisissent leur nom, puis ils jouent. On affiche le joueur qui a le meilleur score à la fin de la partie.
-  - On veut gérer plusieurs niveaux de jeu : facile : lenteur du déplacement de la balle; intermédiaire;​ évolutif : la balle se déplace de plus en plus vite; difficile, la taille de la raquette diminue, etc.+  - On veut gérer plusieurs niveaux de jeu : facile : lenteur du déplacement de la balle; intermédiaire;​ évolutif : la balle se déplace de plus en plus vite; difficile, la taille de la raquette diminue, etc. 
  
 **Question 10mn** **Question 10mn**
-    - Dessiner les grands cas d'​utilisation de votre jeu, +    - Dessiner les grands cas d'​utilisation de votre jeu, (Dans le cas 3, proposer votre propre interprétation,​ mais soyez claire)
     - Donner leur des priorités d'un point de vue "​utilisateur"​ (e.g. est-il plus important de jouer ou de stocker le score?).     - Donner leur des priorités d'un point de vue "​utilisateur"​ (e.g. est-il plus important de jouer ou de stocker le score?).
     - Evaluer la complexité de chaque cas d'​utilisation et le temps qu'il vous faudrait. Ecrivez le. Vous vérifierez à la fin du TD à quel point vous êtes prêt ou non de votre évaluation.     - Evaluer la complexité de chaque cas d'​utilisation et le temps qu'il vous faudrait. Ecrivez le. Vous vérifierez à la fin du TD à quel point vous êtes prêt ou non de votre évaluation.
Line 47: Line 52:
 Une Balle se définit par  Une Balle se définit par 
   * un diamètre (un entier), ​   * un diamètre (un entier), ​
-  * une position en x et y+  * une position en x et y (Il s'​agira de pixel donc des entiers...)((La solution proposée qui s'​appuie sur les codes initiaux, n'​utilise pas de classe ''​Position''​ mais vous pouvez très bien en utiliser une dans vos propres classes !!)) 
   * un pas de déplacement en X (deltaX) et un pas de déplacement en Y (e.g. un déplacement deltaX=deltaY et deltaX>0 déplace la balle en diagonale vers le bas de la gauche vers la droite), ​   * un pas de déplacement en X (deltaX) et un pas de déplacement en Y (e.g. un déplacement deltaX=deltaY et deltaX>0 déplace la balle en diagonale vers le bas de la gauche vers la droite), ​
   * déplacer une balle revient à modifier sa position de deltaX et deltaY (x= x+deltaX;y = y+deltaY)   * déplacer une balle revient à modifier sa position de deltaX et deltaY (x= x+deltaX;y = y+deltaY)
Line 92: Line 97:
              - A votre avis pourquoi avons-nous des objets ''​BallUI''​ et ''​RacquetUI''​ ?              - A votre avis pourquoi avons-nous des objets ''​BallUI''​ et ''​RacquetUI''​ ?
       - Chargez les codes correspondant.       - Chargez les codes correspondant.
 +          - Attention dans la classe ''​Game'',​ ajouter en première ligne de la méthode paint : ''​super.paint(g);''  ​
       - Connectez ce code à votre code.       - Connectez ce code à votre code.
  
Line 99: Line 105:
  
 Pour pouvoir jouer, vous devez à présent, déplacer la balle en fonction de la position de la raquette. Pour pouvoir jouer, vous devez à présent, déplacer la balle en fonction de la position de la raquette.
 +
 +**Questions**
      * 1 - Définir une méthode dans ''​Ball''​ qui détecte s'il y a collision avec la raquette. Pour cela, vous assimilez la balle à un carré et vous recherchez l'​intersection avec le rectangle (''​java.awt.Rectangle''​) qui compose la raquette      * 1 - Définir une méthode dans ''​Ball''​ qui détecte s'il y a collision avec la raquette. Pour cela, vous assimilez la balle à un carré et vous recherchez l'​intersection avec le rectangle (''​java.awt.Rectangle''​) qui compose la raquette
-<​code>​+<​code ​java>
 //Dans la classe Ball //Dans la classe Ball
 public Rectangle getBounds() { public Rectangle getBounds() {
Line 110: Line 118:
     }     }
 </​code>​ </​code>​
-     * 2 - A présent vous vérifiez si la balle entre en collision avec la raquette et change sa trajectoire ou si elle est passée en dehors de cette zone +     * 2 - A présent vous vérifiez si la balle entre en collision avec la raquette et change sa trajectoire ou si elle est passée en dehors de cette zone, par exemple implémenter la méthode suivante : 
-<​code>​+<​code ​java>
 moveInWithRacquet(getWidth(),​getHeight(),​racquet) moveInWithRacquet(getWidth(),​getHeight(),​racquet)
 </​code>​ </​code>​
-     * 3 - Evidemment dans le jeu il faut appeler votre nouvelle méthode de déplacement de la balle et gérer le cas où la balle sort des bornes avec un gameOver+     * 3 - Evidemment dans le jeu il faut appeler votre nouvelle méthode de déplacement de la balle et gérer le cas où la balle sort des bornes avec un gameOver, par exemple.
 <code java> <code java>
     private void play() {     private void play() {
Line 125: Line 133:
      * 4 - Testez et amusez-vous 1mn ((On n'a plus amusant à faire)) !  ​      * 4 - Testez et amusez-vous 1mn ((On n'a plus amusant à faire)) !  ​
  
-===== Enrichissement ​=====+===== Paramétrage du jeu =====
  
  
-** Question ​: ** +** Questions ​: ** 
-   - Comment faire pour accélérer la balle ? Tester.+   - Comment faire pour accélérer la balle ? .... Tester. ​
    - Comment faire pour accélérer la balle en fonction du nombre de fois que vous tapez la balle...?    - Comment faire pour accélérer la balle en fonction du nombre de fois que vous tapez la balle...?
 +   - N'​oubliez pas de mettre à jour votre modèle. ​
 +   - Complétez votre application pour gérer un niveau de jeu évolutif.
 +   - Modifier la raquette pour pouvoir la déplacer vers le haut et vers le bas.
  
  
  
-    public void moveIn(int width, int height) { +===== Une application ​ =====
-        moveIn(width);​ +
-        if (y + deltaY > 0 && y + deltaY < height - this.height) +
-            y y + deltaY; +
-    }+
  
 +A présent ​
 +** Questions : **
 +  - Choisissez les fonctionnalités à mettre en oeuvre.
 +  - Modifiez votre modèle pour intégrer, les scores, les joueurs, les niveaux de jeux et implémentez les.
  
-    public Rectangle getBounds() { +  
-        ​return new Rectangle(x,​ y, width, height); +<note warning>​Pour la semaine prochaine vous devez préparer le TD suivant qui est la préparation de l'​examen de l'an dernier !</​note>​
-    }+
  
-    int deltaY = 0; 
-    public void setDeltaY(int deltaY) { 
-        this.deltaY = deltaY; 
-    } 
-} 
  
  
Line 163: Line 168:
  
  
- +====== Boite à outils de code à n'​utiliser que si vous n'y êtes pas parvenus tous seuls ======
- +
- +
- +
- +
- +
-====== Boite à outils de code à n'​utiliser que si vous abandonnez ​======+
  
  
 ==== Gestion des déplacements de la balle si besoin... ==== ==== Gestion des déplacements de la balle si besoin... ====
  
-<​code>​+<​code ​java>
   if (x + deltaX < 0)   if (x + deltaX < 0)
             deltaX = 1;             deltaX = 1;
Line 189: Line 188:
  </​code>​  </​code>​
  
-Si on gère la collision (A vous de voir pour State ou autre... 
-<​code>​ 
-  public State moveInWithRacquet(int width, int height, Racquet racquet) { 
-        if (x + deltaX < 0) 
-            deltaX = speed; 
-        if (x + deltaX > width - diameter) 
-            deltaX = -speed; 
-        if (y + deltaY < 0) 
-            deltaY = speed; 
-        if (y + deltaY > height - diameter) { 
-            return State.out; 
-        } 
-        if (this.collision(racquet)){ 
-            deltaY = -speed; 
-            y = racquet.getY() - diameter; 
-            return State.collision;​ 
-        } 
-        move(); 
-        return State.in; 
-    } 
-</​code>​ 
 ==== Code de déplacement de la raquette ==== ==== Code de déplacement de la raquette ====
  
-<​code>​+<​code ​java>
     public void moveIn(int width) {     public void moveIn(int width) {
             if (x + deltaX > 0 && x + deltaX < width - this.width)             if (x + deltaX > 0 && x + deltaX < width - this.width)
Line 219: Line 197:
 </​code>​ </​code>​
  
 +==== Code de déplacement de la balle en relation avec la raquette ====
  
- +<code java>
-A présent nous désirons  +
- +
-    public void move() { +
-        x= x+deltaX; +
-        y = y+deltaY; +
- +
-    } +
- +
-    public boolean moveIn(int width, int height) { +
-        boolean moveOK = true; +
-        if (x + deltaX ​0) +
-            deltaX = 1; +
-        if (x + deltaX ​width - diameter) +
-            deltaX = -1; +
-        if (y + deltaY < 0) +
-            deltaY = 1; +
-        if (y + deltaY > height - diameter) { +
-            moveOK = false; +
-            deltaY = -1; +
-        } +
-       ​move();​ +
-       ​return moveOK; +
-    } +
     public State moveInWithRacquet(int width, int height, Racquet racquet) {     public State moveInWithRacquet(int width, int height, Racquet racquet) {
         if (x + deltaX < 0)         if (x + deltaX < 0)
Line 263: Line 218:
         return State.in;         return State.in;
     }     }
 +</​code>​
 +  ​
  
-    private boolean collision(Racquet racquet) { 
- 
-        return racquet.getBounds().intersects(getBounds());​ 
-    } 
- 
-    public Rectangle getBounds() { 
-        return new Rectangle(x,​ y, diameter, diameter); 
-    } 
- 
-    @Override 
-    public String toString() { 
-        return "​Ball{"​ + 
-                "​diameter="​ + diameter + 
-                ", deltaX="​ + deltaX + 
-                ", deltaY="​ + deltaY + 
-                ", x=" + x + 
-                ", y=" + y + 
-                '​}';​ 
-    } 
- 
- 
- 
- 
-Voici le code d'un jeu auquel il manque une balle et une raquette !! 
-Dessinez le modèle de classe correspondant. 
- 
- 
-Quelle classe joue le rôle d'​Interfaces graphiques ? 
-Quelle classe joue le rôle de contrôleur ? 
- 
- 
-Ajouter la notion de score à chaque fois que la raquette tape la balle. 
- 
-Modifier votre code pour accélérer le déplacement de la balle à chaque fois que vous parvenez à taper la balle. 
- 
- 
-Modifier la raquette pour pouvoir la déplacer vers le haut et vers le bas. 
  
  
-On veut gérer plusieurs joueurs. 
-Ils jouent à tour de rôle. 
  
2016_2017/s2/td/td_jeux.1488836673.txt.gz · Last modified: 2017/03/06 22:44 by blay