This is an old revision of the document!
Nous allons créer un jeu de mini-Tennis. Pour cela, nous sommes “grave” inspiré de http://www.edu4java.com/en/game/game3.html.
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 :
Notre objectif n'est pas de vous apprendre à programmer une interface graphique donc les codes correspondants vous sont donnés.
Voici une image d'une “partie” du jeu que nous allons créer.
Question 10mn
Question 10mn grand maximum
Question : Définir la classe Ball
Une Balle se définit par
Définir la classe Racquet
Une Raquette se définit par
Voici le modèle
Vous devrez peut etre ajuster le code donné ci-dessous avec votre code.
Voici comment il fonctionne….
Questions
BallUI
et RacquetUI
?Hélas la balle tourne infiniment ! Il faudrait maintenant utiliser la raquette !!
Pour pouvoir jouer, vous devez à présent, déplacer la balle en fonction de la position de la raquette.
Questions
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//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(); ...
Questions :
A présent Questions :
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;
Si on gère la collision (A vous de voir pour State ou autre…
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; }
public void moveIn(int width) { if (x + deltaX > 0 && x + deltaX < width - this.width) x = x + deltaX; }
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; }
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.