Ajouter les palettes #
-
Dans
commun.monde2d
, créer la classePalette2d
public class Palette2d extends ObjetPong2d { private String id; public Palette2d() { super(); } public Palette2d(String id, double topLeftX) { super(); this.id = id; setTopLeftX(topLeftX); } @Override public String id() { return id; } @Override public void initialize() { setWidth(10); setHeight(100); setTopLeftY(getWorld2d().getHeight()/2 - getHeight()/2); } @Override public void drawOnWorld(GraphicsContext gc) { gc.fillRect(getTopLeftX(), getTopLeftY(), getWidth(), getHeight()); } }
-
Dans
Balle2d
, ajouter ce code pour mémoriser les palettespublic class Balle2d extends ObjetPong2d { // ... // ajouter private Palette2d paletteGauche; private Palette2d paletteDroite; // ajouter ce constructeur public Balle2d(Palette2d paletteGauche, Palette2d paletteDroite) { super(); this.paletteGauche = paletteGauche; this.paletteDroite = paletteDroite; }
-
Dans
Monde2Pongd
, ajouter les palettespublic class MondePong2d extends World2dFx { // ... // ajouter private Palette2d paletteGauche; private Palette2d paletteDroite; // ... @Override protected void initialize() { setWidth(LARGEUR_MONDE); setHeight(HAUTEUR_MONDE); // ... // ajouter paletteGauche = new Palette2d("gauche", 30); paletteDroite = new Palette2d("droite", LARGEUR_MONDE - 40); // ajouter addObject2d(paletteGauche); addObject2d(paletteDroite); // modifier pour que la balle mémorise les palettes balle = new Balle2d(paletteGauche, paletteDroite); addObject2d(balle); } // ...
-
Dans
Balle2d
, ajouter le code ci-bas pour rebondir sur les palettespublic 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 balleRebondiSurPalette(paletteGauche); //ajouter }else if(balleFrappePalette(paletteDroite)) { // ajouter balleRebondiSurPalette(paletteDroite); }else if(balleFrappePlafond()) { balleRebondiSurPlafond(); }else if(balleFrappePlancher()) { balleRebondiSurPlancher(); } } // ajouter private boolean balleFrappePalette(Palette2d palette) { return collidesWith(palette); } // ajouter private void balleRebondiSurPalette(Palette2d palette) { if(getTopLeftX() < palette.getTopLeftX()) { setTopLeftX(palette.getTopLeftX() - getWidth() - EPSILON); }else { setTopLeftX(palette.getTopLeftX() + palette.getWidth() + EPSILON); } setSpeedX(-getSpeedX()); }
-
Vérifier que ça fonctionne
$ sh gradlew pong
-
Ou plus réaliste avec une seule balle: