Index de l'article

 

Les modifications des classes du modèle sont relativement limitées et concernent seulement 3 classes :

  • HoleStageFactory : modifier les coordonnées des éléments en pixels, et créer un TextElement pour représenter le nom du joueur courant dans la scène (contrainte non présente dans la version console)
  • HoleStageModel : ajouter tout ce qui concerne le TextElement (attribut +  getter/setter), et ce qui concerne la sélection d'un pion (état de la sélection & définition du callback quand on sélectionne un pion)

Remarque : pour fournir à boardifier le callback utilisé lors de la sélection d'un pion, il suffit d'appeler la méthode onSelectionChange() dans setupCallbacks() (même principe qu'en mode console avec onPutInGrid() ). Cette méthode prend en paramètre le callback, sous la forme d'une fonction lambda. Dans le cas présent, il suffit de vérifier si un pion est sélectionné. Si oui, on calcule les case atteignables en fonction du pion sélectionné, et sinon on remet à zéro les cases atteignables :

       onSelectionChange( () -> {
            // get the selected pawn if any
            if (selected.size() == 0) {
                board.resetReachableCells(false);
                return;
            }
            Pawn pawn = (Pawn) selected.get(0);
            board.setValidCells(pawn.getNumber());
        });
  • Pawn : redéfinir la méthode update() afin de jouer l'animation si elle existe.

Remarque : dans un jeu où les seules animations consistent à bouger des éléments (pions, cubes, ...), on peut utiliser le code "universel" suivant pour jouer une animation de déplacement linéaire :

    public void update(double width, double height, GridGeometry gridGeometry) {
        // if must be animated, move the pawn
        if (animation != null) {
            AnimationStep step = animation.next();
            if (step != null) {
                setLocation(step.getInt(0), step.getInt(1));
            }
            else {
                animation = null;
            }
        }
    }

 

Toutes ces modifications sont relativement simples à mettre en place et se retrouvent dans la solution téléchargeable en fin d'article.