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

  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.

  7. #7
    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
    Citation Envoyé par joel.drigo
    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...
    Je viens d'essayer également, et rien ne fonctionne non plus. Au-de-là de la 3-4ème page, plus rien ne se passe.

    Citation Envoyé par Rumpel
    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" ?
    Si tu proposes des actions très spécifiques, il te faudra trouver un moyen pour "tagger" chaque type d'actions pouvant être susceptibles d'être proposées au joueur.

    L'exemple ci-dessous est bidon, mais ça pourrait te donner une idée:

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /* 
    Ta classe Paragraphe pourrait servir de "noeud" pour tracer en quelque sorte
    les conséquences qui peuvent découler de l'objet Paragraphe que le joueur aura choisi.
    */
    public class Paragraphe
    {
        private final String content;
        private final Tags paragraphe_tag;
     
        public Paragraphe(final String content, final Tags tag)
        {
            /* ... */
        }
     
        public static void main(String... args)
        {
            /* Tu peux donc préparer ta ressource de cette façon: */
            final Paragraphe p = new Paragraphe("Contenu de l'action proposée", Tags.GETITEM);
            /* Il te faudra bien entendu trouver un moyen de vérifier le type de l'action pour poursuivre ton histoire*/
        }
    }
     
    enum Tags
    {
       FIGHT,
       GETGOLD,
       GETITEM,
    }

    Je ne sais pas si j'ai été clair ou si l'exemple te convient, donc n'hésite pas à le faire savoir.

    Bonne journée !

  8. #8
    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
    Il faut bien lire les instructions et il faut choisir 5 disciplines, sinon rien ne se passe effectivement ...
    Moi ça marche très bien, j'ai déjà fait les deux premières aventures plusieurs fois, ou il y a un problème quand on regarde a carte, on perd son avancement dans l'aventure. Bon c'est pas parfait, mais j'aimerais arriver à un truc dans le genre quoi. Ça donne une idée ...

    Les actions peuvent être très diverses,

    Vous examinez rapidement votre récompense en suivant les couloirs qui vous permettront
    de ressortir du palais. Elle équivaut à quatre-vingt pièces d'argent.
    Notez les codes Arrêt et Cristal, effacez le code Illusion, puis rendez-vous au 363.
    Mais c'est surtout les conditions qui peuvent être encore plus compliquées :
    Par exemple voila le paragraphe 310 :


    Si vous avez le code Illusion, rendez-vous au 330.
    Si vous avez le code Éveil ou le code Matin, il existe trois possibilités :
    Si vous avez le code Nuit et au moins l'un des codes Pie et Graines, rendez-vous au 320.
    Si ce n'est pas le cas et que vous avez les codes Couleuvre et Cuivre, rendez-vous au 340.
    Si vous ne remplissez pas les conditions précédentes, rendez-vous au 320.
    Si vous avez le code Nuit et au moins l'un des codes Pie et Graines, il existe trois possibilités :
    Si vous avez le code Arrêt, le code Couleuvre et le code Cuivre, rendez-vous au 330.
    Si vous n'avez pas le code Arrêt, mais que vous avez au moins l'un des codes Couleuvre et
    Cuivre, rendez-vous au 330.
    Si vous ne remplissez pas les conditions précédentes, rendez-vous au 320.
    Si aucun des cas précédents ne correspond à votre situation, il existe quatre possibilités :
    Si vous avez le code Arrêt, le code Couleuvre et le code Cuivre, rendez-vous au 340.
    Si vous avez le code Arrêt, mais que vous n'avez pas à la fois les codes Couleuvre et Cuivre,
    rendez-vous au 320.
    Si vous n'avez pas le code Arrêt et que vous avez au moins l'un des codes Couleuvre et
    Cuivre, rendez-vous au 330.
    Si vous ne remplissez aucune des conditions précédentes, rendez-vous au 320.
    Bref, au départ, on ne voit pas forcément les difficultés, mais après pour coder proprement, c'est plus compliqué, enfin j'ai déjà un code qui marche, mais ce n'est pas du code de très bonne qualité ...

  9. #9
    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
    Bref, au départ, on ne voit pas forcément les difficultés, mais après pour coder proprement, c'est plus compliqué, enfin j'ai déjà un code qui marche, mais ce n'est pas du code de très bonne qualité ...
    Bonjour,

    Si tu as une structure qui fonctionne, tu peux toujours continuer à faire ton jeu, puis, une fois qu'il sera totalement terminé: factoriser ton code.

    A toi de voir comment centraliser toutes tes méthodes de manière à propager les conséquences de chaque choix.

  10. #10
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Salut,

    De mon point de vue je vois
    -Un "StoryBoard" composé de plusieurs (500) "Paragraphes".
    -Chaque paragraphe à une ou plusieurs pages de texte.
    -Chaque paragraphe à une ou plusieurs plusieurs "Action" possible
    -Chaque Action redirige vers un paragraphe
    -Chaque Action possède un texte descriptif et des "Conditions"
    -Chaque condition est composé d'"Objet" ou d'autres conditions
    -Chaque condition à un "Type" ( ET, OU, SUP, INF, NOT, ... )

    Et ce qui est pas mal c'est qu'on peut facilement transposer tout ça en XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <storyBoard>
        <paragraph id="0" title="L'histoire comence">
    		<text>Le héro se réveille dans un foret avec des lutins verts</text>
    		<text>Il prend la fuite sans raison</text>	
     
    		<action id="1">
    		    <text>Aller sur le bateau</text>
    		    <cond type="PARAGRAPH_0_BATEAU"/>
    		</action>
     
    		<action id="2">
    		    <text>Aller bronzer sur la plage</text>
    		    <cond type="ET">
    		        <!-- //condition : le joueur à de la crème solaire -->
    		        <obj>CREME_SOLAIRE</obj>
     
    				<!-- //condition : le joueur à au moins 2 objets dans la liste -->
    		        <cond type="SUP" val="2"> 
    		            <obj>PARASOL</obj>
    		            <obj>SERVIETTE</obj>
    		            <obj>LUNETTE</obj>
    		        </cond>
     
    		        <!-- //condition : le joueur n'à pas de coup de soleil -->
    		        <cond type="NOT">
    		            <obj>COUP_SOLEIL</obj>
    		        </cond>
    		    </cond>
    		</action>
    	</paragraph>
     
     
        <paragraph id="1" title="Le bateau"/>
     
        <paragraph id="2" title="La plage"/>
     
    </storyBoard>

    Un XML c'est bien joli mais ça fait pas avancer le chilmBlik.
    Il nous faut les objets JAVA qui vont faire la correspondance avec le fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "storyBoard")
    public class StoryBoard {
    	@XmlElement
        protected List<Paragraph> paragraph;
    }
     
     
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "paragraph")
    public class Paragraph {
    	@XmlAttribute(name = "id")
        protected int id;
    	@XmlAttribute(name = "title")
        protected String title;
    	@XmlElement
        protected List<String> text;
    	@XmlElement
        protected List<Action> action;
    }
     
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "action")
    public class Action {
    	@XmlAttribute(name = "id")
        protected int id;
    	@XmlElement
        protected String text;
    	@XmlElement
        protected Condition cond;
    }
     
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "cond")
    public class Condition {
    	@XmlAttribute(name = "type")
        protected TypeCondition type;	
    	@XmlElement
        protected List<Condition> cond;
    	@XmlElement
        protected List<Objet> obj;	
     
    	public boolean check(){
    		return type.check(this);
    	}
    }
     
     
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "obj")
    public enum Objet {
    	CREME_SOLAIRE,
    	PARASOL,
    	SERVIETTE,
    	LUNETTE,
    	COUP_SOLEIL;	
    }
     
    public enum TypeCondition {
     
    	ET{
    		public boolean check(Condition condition){
    			if(condition.cond != null){
    				for (Condition cond : condition.cond) {
    					if(!cond.check()) return false;
    				}
    			}
    			if(condition.obj != null){
    				for (Object obj : condition.obj) {
    					// Si le joueur ne possède pas l'objet
    					// return false
    				}
    			}
     
    			return true;
    		}
    	}	
    	,
    	OU{/*TODO*/},
    	SUP{/*TODO*/},
    	INF{/*TODO*/},
    	NOT{/*TODO*/},
    	PARAGRAPH_0_BATEAU{/*TODO*/};
     
    	public boolean check(Condition condition){
    		return false;
     
    	}
    }
    Plus qu'à passer dans la moulinette pour transformer le fichier XML en objet JAVA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	public static void main(String[] args){
    		StoryBoard storyBoard = loadStoryBoard("src/file.xml");
    		// L'histoire commence ici
    		/*
    		 * while(true){
    		 * 
    		 * storyBoard.paragrah.showText()
    		 * storyBoard.paragrah.showActions()
    		 * 
    		 * if(actionChoose.cond.check()){
    		 * 	storyBoard.paragrah = actionChoose.nextpara
    		 * }
    		 * 
    		 * }
    		 * 
    		 */
    	}
     
    	private static StoryBoard loadStoryBoard(String file){
    		try {
    			JAXBContext context = JAXBContext.newInstance(StoryBoard.class);
    			Unmarshaller unMarshaller = context.createUnmarshaller();
    			return (StoryBoard) unMarshaller.unmarshal(new FileInputStream(file));
    		} catch (JAXBException | FileNotFoundException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    On peut facile ajouter des TypeDeConditions génériques
    Faire évoluer les actions en y ajoutant des "Effets" ( gagne 10 pièces d'or, perd l'objet 'canard en plastique', ... )
    Mettre des actions dans des actions.
    Mettre des conditions préalable pour afficher les actions.

    Mais aussi, facilement ajouter des TU sur les conditions,
    Et faire des scénarios de test pour savoir si un personnage avec de la CREME_SOLAIRE au départ peut finir l'histoire


    C'est comme ça que je ferais pour ce type de projet.

    En espérant avoir été clair.

    A+

  11. #11
    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
    Bonjour,

    Merci pour ces informations.
    En effet, ça serait sympa d'avoir un fichier XML pour coder tout ça.
    Tu as effectivement tout compris du projet.

    Je suis juste pas sur à 100% de

    -Chaque condition à un "Type" ( ET, OU, SUP, INF, NOT, ... )
    Je n'ai pas regardé toutes les conditions, mais ça peut vraiment être très divers, même si dans 99% des cas, c'est avoir un objet, une compétence ou ce genre de chose ...

  12. #12
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Salut,

    Je n'ai pas regardé toutes les conditions, mais ça peut vraiment être très divers, même si dans 99% des cas, c'est avoir un objet, une compétence ou ce genre de chose ...
    Normalement il n'y a que (>,<,>=,<=,==,!=,&&,||) à coder. En les faisant "jouer" ensemble tu peux faire ce que tu veux.

    C'est la façon dont tu structureras ton fichier qui sera déterminante pour toute l'architecture du projet.
    Il faut prendre le temps de bien poser tous les cas possibles.

    +

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