Table of Contents

Jeu de Mini-Tennis 4h

Allez aussi loin que vous le pouvez !

Nous allons créer un jeu de mini-Tennis. Pour cela, nous nous sommes “grave” inspirés de http://www.edu4java.com/en/game/game3.html.

A LIRE

Seulement nous allons développé une solution un peu différente. Si vous choisissez de recopier les codes… tant pis pour vous, mais ne nous ne demandez pas de les corriger !

Suivez bien les instructions pour ne pas perdre l'objectif pédagogique :

  1. vous apprendre à modéliser et programmer une application,
  2. vous montrer que vous savez déjà faire beaucoup de choses.

Notre objectif n'est pas de vous apprendre à programmer une interface graphique donc les codes correspondants vous sont donnés.

Pour la semaine prochaine vous devez préparer le TD suivant qui est la préparation de l'examen de l'an dernier !

Spécifications

Voici une image d'une “partie” du jeu que nous allons créer.

  1. On veut pouvoir jouer en déplaçant la raquette de la gauche vers la droite ou de bas en haut et inversement.
  2. 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.
  3. 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

  1. Dessiner les grands cas d'utilisation de votre jeu, (Dans le cas 3, proposer votre propre interprétation, mais soyez claire)
  2. Donner leur des priorités d'un point de vue “utilisateur” (e.g. est-il plus important de jouer ou de stocker le score?).
  3. 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.

Question 10mn grand maximum

  1. Concevez un diagramme de classe représentant votre jeu, sur papier. N'y passez pas trop longtemps car ensuite on vous aidera, mais ce diagramme doit vous permettre de confronter votre solution à celle que nous allons vous aider à réaliser.

Modélisation et Codage des classes "métier"

Question : Définir la classe Ball Une Balle se définit par

Définir la classe Racquet Une Raquette se définit par

Modélisation et Codage de l'interface graphique "Basique"

Voici le modèle

Vous devrez peut etre ajuster le code donné ci-dessous avec votre code.

Voici les codes

Voici comment il fonctionne….

Questions

  1. Comprenez le modèle de ces codes.
    1. A votre avis pourquoi avons-nous des objets BallUI et RacquetUI ?
  2. Chargez les codes correspondant.
    1. Attention dans la classe Game, ajouter en première ligne de la méthode paint : super.paint(g);
  3. Connectez ce code à votre code.

Hélas la balle tourne infiniment ! Il faudrait maintenant utiliser la raquette !!

Où l'on joue !

Pour pouvoir jouer, vous devez à présent, déplacer la balle en fonction de la position de la raquette.

Questions

//Dans la classe Ball
public Rectangle getBounds() {
        return new Rectangle(x, y, diameter, diameter);
    }
 
private boolean collision(Racquet racquet) {
        return racquet.getBounds().intersects(getBounds());
    }
moveInWithRacquet(getWidth(),getHeight(),racquet)
    private void play() {
        racquet.moveIn(getWidth());
        State moveState = ball.moveInWithRacquet(getWidth(),getHeight(),racquet);
        if (moveState==State.out)
            gameOver();
        ...

Paramétrage du jeu

Questions :

  1. Comment faire pour accélérer la balle ? …. Tester.
  2. Comment faire pour accélérer la balle en fonction du nombre de fois que vous tapez la balle…?
  3. N'oubliez pas de mettre à jour votre modèle.
  4. Complétez votre application pour gérer un niveau de jeu évolutif.
  5. Modifier la raquette pour pouvoir la déplacer vers le haut et vers le bas.

Une application

A présent Questions :

  1. Choisissez les fonctionnalités à mettre en oeuvre.
  2. Modifiez votre modèle pour intégrer, les scores, les joueurs, les niveaux de jeux et implémentez les.
Pour la semaine prochaine vous devez préparer le TD suivant qui est la préparation de l'examen de l'an dernier !

Boite à outils de code à n'utiliser que si vous n'y êtes pas parvenus tous seuls

Gestion des déplacements de la balle si besoin...

  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;
 

Code de déplacement de la raquette

    public void moveIn(int width) {
            if (x + deltaX > 0 && x + deltaX < width - this.width)
                x = x + deltaX;
    }

Code de déplacement de la balle en relation avec la raquette

    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;
    }
1)
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 !!
2)
On n'a plus amusant à faire