Index de l'article

 

Contrairement aux classes créées précédemment, la prise de décision fait partie du contrôle. Cependant, dans boardifier-console, elle peut être écrite sans que le reste de l’application soit écrit, notamment le contrôle global et la vue. On peut même l'implémenter en parallèle des classes du modèle, à partir du moment où l'on a bien défini toutes les zones du jeu, donc tous les objets ContainerElement nécessaires.

Pour implémenter la prise de décision, il suffit de créer une sous-classe de Decider et de définir sa méthode decide(). Le fichier de la classe doit aller dans le répertoire control.

Pour ce tutoriel, on doit donc compléter decide() dans le fichier HoleDecider.java

 

L'objectif de cette méthode est simplement de choisir un pion et sa destination, puis de représenter son déplacement par une instance de MoveAction, qui sera placée dans l'ActionList. Le choix du pion et de sa destination représente le plus gros challenge algorithmique si l'on veut le faire intelligemment. Dans ce tutoriel, pour simplifier, on prend une solution "au hasard" : on prend le premier pion disponible qui peut être placé et on choisit au hasard une des cases valides.

Cela conduit au code suivant (à compléter) :

    public ActionList decide() {
        ActionList actions = null;
        // do a cast get a variable of the real type to get access to the attributes of HoleStageModel
        HoleStageModel stage = (HoleStageModel)model.getGameStage();
        HoleBoard board = stage.getBoard(); // get the board
        HolePawnPot pot = null; // the pot where to take a pawn
        GameElement pawn = null; // the pawn that is moved
        int rowDest = 0; // the dest. row in board
        int colDest = 0; // the dest. col in board

        // fulfill below to set pot, pawn, rowDest, colDest
        // NB : the pot (black or red) depends on the player's id
        // recall: board.computeValidCells() allows to compute ... valid cells :-)
        // ...

        // create action list, with ActionFactory. After the last action, it is next player's turn.
        ActionList actions = ActionFactory.generatePutInContainer( model, pawn, "holeboard", rowDest, colDest);
        actions.setDoEndOfTurn(true); // after playing this action list, it will be the end of turn for current player.
        return actions;      
    }