IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Conseils Architecture JAVA


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut Conseils Architecture JAVA
    Bonjour,

    Je suis sur un projet perso de création de livre-jeu en JAVA.
    (Pour ceux qui était adolescent dans les années 80-90 c'était très à la mode.)
    Actuellement j'ai une architecture qui marche, mais je voudrais quelque chose de plus propre.
    En gros une Aventure est composée de Paragraphe.
    Chaque paragraphe est composé de choix.
    Par exemple au paragraphe 1 on a le choix d'aller au paragraphe 4 ou 8 ou 10 ...
    Parfois les choix sont associés à des conditions, par exemple il faut absolument avoir le collier en dents de crocodile pour ne pas se faire tuer par la tribu cannibale
    Et les paragraphes sont associés à des actions : par exemple gagner 10 pièces d'or, ajouter une épée à la liste d'objet etc ...
    Actuellement j'ai un tableau pour coder les transitions c'est à dire toutes les possibilités de passer d'un paragraphe à un autre, j'ai un autre tableau pour les chaines de caractères :


    Si vous allez chercher votre lanterne pour qu'elle vous aide à voir ce dont il s'agit, rendezvous
    au 4. Si vous préférez vous avancer dans l'obscurité, rendez-vous au 8. Si vous jugez
    inutile ou imprudent de vous intéresser à ce bruit, vous placez le bâtonnet d'encens sous
    une patte du Chat des Monts Brumeux et retournez à la Ruche vous coucher : rendez-vous
    au 10.

    je code toutes les transitions possibles dans une fonction



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void initTransitions()
     
        m_transitions[1][0] = 4;
        m_transitions[1][1] = 8;
        m_transitions[1][2] = 10;
    Je regarde si elles sont valides dans une autre ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public boolean validTransition(Pair transition)
    {
        if ( transition.equals( 71, 86 ) )
            if ( !VAR_PREMIER)
                return false;
        if ( transition.equals( 71, 92 ) )
            if ( VAR_PREMIER)
                return false;
    J'ai les chaines de caractères dans une autre fonction ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void initButtonLabel()
    {
        m_buttonLabel[0][0] = "Commencer l'aventure.";
     
        m_buttonLabel[1][0] = "Vous allez chercher votre lanterne pour qu'elle vous aide à voir ce dont il s'agit. ";
        m_buttonLabel[1][1] = "Vous préférez vous avancer dans l'obscurité. ";
        m_buttonLabel[1][2] = "Vous jugez inutile ou imprudent de vous intéresser à ce bruit, vous placez le bâtonnet d'encens sous" +
                                "une patte du Chat des Monts Brumeux et retournez à la Ruche vous coucher.";
    Et puis les actions dans une quatrième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void move(int choice)
    {
        int next = m_transitions[m_current][choice];
        setSection(next);
     
        // @31 Notez le code Gris
        if (m_current == 31) CODE_GRIS = true;
    Je voudrais regrouper ça de façon à ne pas avoir à aller chercher à 4 endroits différents dans le code à chaque fois que je dois coder un paragraphe. Parce que pour cette aventure, j'ai plus de 500 paragraphes ...

    Donc faire une classe paragraphe, mais j'ai besoin de code spécifique pour chaque paragraphe, je dois coder l'action à faire quand j'arrive au paragraphe, je dois pouvoir ajouter des choix et des conditions liés à ces choix ...


    Voila, si cela inspire quelqu'un

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Commence par décrire avec tes mots à toi chaque concept : paragraphe, transition, action. Chacun va devenir une classe.

    • Une action : c'est à priori un changement d'état d'inventaire, ou d'autres états (comme gagné ou perdu). Il te faut donc une classe inventaire. Soit il y a un nombre fixe d'emplacement (donc tableau), soit variable (donc plus une liste (ArrayList), bien qu'on pourrait gérer ça dans un tableau, mais on referait plus ou moins ce que fait une ArrayList). Chaque élément d'inventaire est un objet et un nombre. Un objet, c'est peut-être juste un nom (épée, pièce d'or, dent de croco), ça peut-être aussi une classe, s'il y a une gestion d'état d'objet (gestion de l'usure de l'épée par exemple), voire si tu veux gérer la combinaison d'objets. Le corps lui-même est un inventaire spécial, ou les cases sont associées éventuellement à des emplacements, pour mettre le collier autour du coup, l'éper dans la main gauche ou droite, etc, ce qui pourrait se gérer avec une enum et une EnumMap.
    • une transition, c'est un texte, un paragraphe à priori (l'étape suivante dans l'aventure), et une action d'après ce que je comprends (non obligatoire peut-ête)
    • un paragraphe, c'est un texte d'explication, et plusieurs transitions fixées au départ (donc tableau ou liste, ou map pour éventuellement mais ce n'est pas indispensable vu le faible nombre de transition par paragraphe). Cela peut-être intéressant d'ajouter un id si tu veux faire un éditeur qui permet de sauvegarder l'aventure dans un fichier et la recharger pour jouer avec.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre Expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 494
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    Une action : c'est à priori un changement d'état d'inventaire, ou d'autres états (comme gagné ou perdu). Il te faut donc une classe inventaire. Soit il y a un nombre fixe d'emplacement (donc tableau), soit variable (donc plus une liste (ArrayList), bien qu'on pourrait gérer ça dans un tableau
    Ne serait-il pas plus adapté d'utiliser une LinkedList, si le nombre d'emplacements est variable ? (à partir d'un certains nombre, ça peut être assez coûteux de recréer des tableaux de n valeurs)

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Songbird_ Voir le message
    Ne serait-il pas plus adapté d'utiliser une LinkedList, si le nombre d'emplacements est variable ? (à partir d'un certains nombre, ça peut être assez coûteux de recréer des tableaux de n valeurs)
    Mouais, il ne devrait pas non plus y avoir des centaines ou des milliers d'objets non plus. En général, un inventaire c'est relativement limité. Et on peut créer la liste avec une taille prédéterminée dès le début, pour éviter la création de tableaux. Après, faut voir si on peut retirer ou pas des objets de l'inventaire. Et puis on est dans un jeu d'aventure, pas un jeu d'action où les temps de réponse ont leur importance.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Hello,

    Merci pour vos contributions.
    Pour l'inventaire, je pense avoir résolu de façon efficace le problème avec une HashMap.

    Par contre, il y a des difficultés qui ne peuvent pas être résolues si facilement que ça ...
    Si je ne fais qu'une classe paragraphe par exemple, ça ne marche pas, car j'ai vraiment besoin d'avoir des actions spécifiques qui peuvent être très diverses. (faire un combat, gagner de l'argent, trouver des objets etc).
    Alors j'ai pensé faire une classe mère "paragraphe" et puis dériver par des classes "paragraphe1" "paragraphe2", mais ça coince aussi, car comment passer d'un index 4 par exemple à "classe4" ?

    Voila ce que j'ai fait pour l'instant :

    https://www.youtube.com/watch?v=E0_G...ature=youtu.be

    Et voila une aventure que je trouve bien codée par une autre personne :

    http://chg96.online.fr/loup-solitair...mdt/depart.htm

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Rumpel Voir le message
    Si je ne fais qu'une classe paragraphe par exemple, ça ne marche pas, car j'ai vraiment besoin d'avoir des actions spécifiques qui peuvent être très diverses. (faire un combat, gagner de l'argent,
    Ce n'est pas la classe paragraphe qui est spécifique, c'est juste qu'il y a une hiérarchie de classes pour gérer les actions (plusieurs classes actions, héritant d'une classe abstraite)

    Citation Envoyé par Rumpel Voir le message

    Et voila une aventure que je trouve bien codée par une autre personne :

    http://chg96.online.fr/loup-solitair...mdt/depart.htm
    Tu sais qu'elle est bien codée parce que tu as vu les sources ? En tout cas, je viens de tester, et j'ai déjà fait planter le truc : je suis bloqué juste après les choix des skills et plus aucun lien ne fonctionne...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. conseil pour une architecture java
    Par ricault dans le forum Général Java
    Réponses: 2
    Dernier message: 12/11/2009, 22h37
  2. Conseil formation Java 13
    Par chess dans le forum Général Java
    Réponses: 1
    Dernier message: 27/02/2008, 12h22
  3. Conseil livre Java EE
    Par ®om dans le forum Java EE
    Réponses: 3
    Dernier message: 15/01/2008, 11h09
  4. [Architecture] java dans php
    Par yann999 dans le forum Développement Web en Java
    Réponses: 14
    Dernier message: 03/05/2006, 13h58
  5. [Architecture] Java et python.
    Par Extra-Nitro dans le forum Général Java
    Réponses: 22
    Dernier message: 04/02/2006, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo