Atelier d’un jour #
Objectifs #
-
Compléter l’implantation d’un jeu Pong
Exécuter le projet une première fois #
-
Télécharger un_jour.zip
-
Ouvrir le projet
-
Exécuter le projet… oups, il y a ni balle, ni palette!
Ajouter la balle #
-
Ouvrir le fichier
MondePong2d
et ajouter le code suivant:public class MondePong2d extends World2dFx { // ... @Override protected void initialize() { setWidth(LARGEUR_MONDE); setHeight(HAUTEUR_MONDE); paletteGauche = new Palette2d("gauche", 30); paletteDroite = new Palette2d("droite", LARGEUR_MONDE - 40); balle = new Balle2d(paletteGauche, paletteDroite); // ajouter addObject2d(balle); }
-
Sauvegarder et exécuter le projet
-
On a maintenant un balle!
Ajouter les palettes #
-
Dans
MondePong2d
, ajouter le code suivant:public class MondePong2d extends World2dFx { // ... @Override protected void initialize() { setWidth(LARGEUR_MONDE); setHeight(HAUTEUR_MONDE); paletteGauche = new Palette2d("gauche", 30); paletteDroite = new Palette2d("droite", LARGEUR_MONDE - 40); balle = new Balle2d(paletteGauche, paletteDroite); addObject2d(balle); // ajouter addObject2d(paletteGauche); addObject2d(paletteDroite); }
-
Sauvegarder et exécuter le projet
-
On a maintenant les palettes, mais la balle passe à travers
- NOTE: déplacer les palettes avec w/s et ↑/↓
Faire rebondir la balle sur les palettes #
-
Ouvrir
Balle2d
, ajouter le code suivant:public class Balle2d extends ObjetPong2d { @Override public void onTimePasses(double secondsElapsed) { super.onTimePasses(secondsElapsed); if(balleFrappeMurGauche()) { balleRebondiSurMurGauche(); } else if(balleFrappeMurDroit()) { balleRebondiSurMurDroit(); // ajouter }else if(balleFrappePalette(paletteGauche)) { // ajouter balleRebondiSurObjet(paletteGauche); // ajouter }else if(balleFrappePalette(paletteDroite)) { // ajouter balleRebondiSurObjet(paletteDroite); }else if(balleFrappePlafond()) { balleRebondiSurPlafond(); }else if(balleFrappePlancher()) { balleRebondiSurPlancher(); } }
-
Sauvegarder et exécuter le projet
-
La balle devrait maintenant rebondir sur les palettes
Défi 1: grossir la balle et changer son image #
-
Il faut ajouter une image dans le répertoire
pong/src/main/resources/images
-
Il faut modifier un peu le code de
Balle2d
Défi 2: changer la couleur des palettes #
-
Il faut modifier un peu le code de
Palette2d
public class Palette2d extends ObjetPong2d { @Override public void drawOnWorld(GraphicsContext gc) { gc.save(); // TODO: changer la couleur gc.fillRect(topLeftX, topLeftY, width, height); gc.restore(); }
-
Il faut trouver ici comment changer la couleur de remplissage (fill)
- https://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html
- TRUC: chercher pour
setFill
Défi 3: changer la couleur des palettes selon leur emplacement à l’écran #
-
Il faut modifier un peu le code de
Palette2d
public class Palette2d extends ObjetPong2d { @Override public void drawOnWorld(GraphicsContext gc) { gc.save(); // TODO: changer la couleur gc.fillRect(topLeftX, topLeftY, width, height); gc.restore(); }
-
Il faut trouver comment créer une couleur avec des valeurs RGB
- https://docs.oracle.com/javase/8/javafx/api/javafx/scene/paint/Color.html
- BUT: faire varier les valeurs RGB selon la valeur de
topLeftY
Finaliser le jeu: compter les points #
-
Modifier le code de
Balle2d
public class Balle2d extends ObjetPong2d { @Override public void onTimePasses(double secondsElapsed) { super.onTimePasses(secondsElapsed); if(balleFrappeMurGauche()) { // effacer // balleRebondiSurMurGauche(); // remplacer par ajouterPoint(Position.DROITE); choisirEtatInitial(); } else if(balleFrappeMurDroit()) { // effacer // balleRebondiSurMurDroit(); // remplacer par ajouterPoint(Position.GAUCHE); choisirEtatInitial(); }else if(balleFrappePalette(paletteGauche)) { balleRebondiSurObjet(paletteGauche); }else if(balleFrappePalette(paletteDroite)) { balleRebondiSurObjet(paletteDroite); }else if(balleFrappePlafond()) { balleRebondiSurPlafond(); }else if(balleFrappePlancher()) { balleRebondiSurPlancher(); } }
-
Re-exécuter le projet. Le pointage devrait fonctionner