Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Jeux d'aventure en mode texte

8 réponses
Avatar
Matthieu Bonetti
Bonjour à tous,

Je souhaite réaliser un petit jeu d'aventure en mode texte comme il se
faisait il y a longtemps (du style Le livre dont vous êtes le héro).
Je ne sais pas vraiment comment m'y prendre. J'ai pensé à une sorte
d'arbre géant dont certaines feuilles seraient liées entre elle, mais bon.

Mon objetctif plus tard, serait de créer un moteur ainsi qu'un éditeur
d'aventure.

Merci

8 réponses

Avatar
codeworker
Matthieu Bonetti wrote in message news:<bnkuqp$28tb$...
Je souhaite réaliser un petit jeu d'aventure en mode texte comme il se
faisait il y a longtemps (du style Le livre dont vous êtes le héro).
Je ne sais pas vraiment comment m'y prendre. J'ai pensé à une sorte
d'arbre géant dont certaines feuilles seraient liées entre elle, mais bon.

Mon objetctif plus tard, serait de créer un moteur ainsi qu'un éditeur
d'aventure.


Pour l'avoir deja fait, je te propose de decrire tout ton scénario
dans un
format textuel que tu jugeras commode.

Ton scenario se decoupe en tableaux (pas dans le sens algorithmique)
numerotes. Un tableau possède la description de la scène (le baratin
numerote dans le "Livre dont vous etes le heros", mais on peut
imaginer une reference a une
sequence Flash - son - image - ...), les choix offerts au valeureux
queteur,
et une action attachee a chaque choix.

L'action est une partie qui demande du soin. Etudie par avance tous
les
types d'actions que tu es susceptible de rencontrer. Modelise-les et
represente
les (un peu a la maniere d'une regle [condition]=>[action]) dans le
format que
tu auras choisi.
Exemple de regle: [des < 4] => [goto 106] ou [bravoure > 3 && des ! 3] =>
[vitalite = vitalite - 1].

Construis un parseur, qui lira les tableaux: texte + choix + actions.
Si rediger un parseur t'effraie, utilise XML - ce n'est pas la
meilleure
solution, mais elle presente l'avantage de ne pas se poser de
questions sur
le parseur.

Construis un interpreteur qui parcourera tes tableaux en fonction des
choix
donnes par le joueur, et des actions associees.

Note : il n'est pas necessaire de representer les tableaux dans une
structure
de graphe.

S'il y a des points que tu souhaites que j'eclaircisse, n'hesite pas.

-- Cedric
--------------------------------------------------------------------
CodeWorker, a scripting language for parsing text and for generating
source code, available under LGPL at "http://www.codeworker.org".

Avatar
Zouplaz
Cedric LEMAIRE - :

Note : il n'est pas necessaire de representer les tableaux dans une
structure
de graphe.


C'est quoi une structure de graphe ?

Merci

Avatar
codeworker
Zouplaz wrote in message news:...
Cedric LEMAIRE - :

Note : il n'est pas necessaire de representer les tableaux dans une
structure
de graphe.


C'est quoi une structure de graphe ?


Une structure de données apte à représenter un graphe. Un graphe se
compose de noeuds reliés entre eux par des branches.

On peut représenter les expressions arithmétiques (par exemple) sous
la forme d'un graphe (et plus précisément, un arbre : partant d'un
noeud et parcourant les branches, on est sûr de ne jamais retomber
dessus).

"3*X + Y" se représente ainsi :

+
/
* Y
/
3 X

On pourrait décrire le noeud en C de la façon suivante :

struct Noeud {
/* mes champs, genre union operateur/variable/constante */
enum {OPERATEUR, VARIABLE, CONSTANTE} type;
union {
char operateur;
char* variable;
double constante;
} valeur;

/*L'ensemble des branches :
- vide pour un literal,
- unique pour l'oppose (operateur unaire '-')
- deux pour les operateurs '+', '-', '/', '*', '%' ...
- trois pour l'operateur ternaire ... ? ... : ...
*/
int nbFils;
Noeud** branches;
/*On peut se contenter de 'Noeud* branches;' si le noeud possède
toujours les noeuds qu'il pointe (agrégation et jamais référence)
*/
}

Pour faire simple, on a supposé que les branches ne portaient pas de
caractéristiques propres (on n'a pas créé de structure pour représenter
une branche, car on n'a pas d'information à lui attribuer), et qu'elles
étaient orientées (une branche permet d'aller d'un noeud A à un noeud B,
mais pas le contraire).

Pour en revenir au problème initial (décrire un jeu de role), on retrouvera
quand même une structure de graphe, mais à l'intérieur d'un scène, pour
décrire les choix, les actions, les effets sur la feuille d'aventure, les
redirections conditionnelles (en fonction des objets déjà acquis, du
niveau d'habileté, ...) sur d'autres scènes...

-- Cedric
--------------------------------------------------------------------
CodeWorker, a scripting language for parsing text and for generating
source code, available under LGPL at "http://www.codeworker.org".


Avatar
Zouplaz
Cedric LEMAIRE - :

Pour en revenir au problŠme initial (d‚crire un jeu de role), on
retrouvera quand mˆme une structure de graphe, mais … l'int‚rieur d'un
scŠne, pour d‚crire les choix, les actions, les effets sur la feuille
d'aventure, les redirections conditionnelles (en fonction des objets
d‚j… acquis, du niveau d'habilet‚, ...) sur d'autres scŠnes...


Tu veux dire qu'il s'agit d'une structure dynamique (un graphe = un arbre
?) évoluant au cours du temps et évitant de truffer le code the if() en
tous genres ?

Tu aurais pas un ou plusieurs liens sur le sujet (et orienté jeux si
possible).

Merci

Avatar
codeworker
Zouplaz wrote in message news:...
Cedric LEMAIRE - :

Pour en revenir au probl?me initial (d?crire un jeu de role), on
retrouvera quand m?me une structure de graphe, mais ? l'int?rieur d'un
sc?ne, pour d?crire les choix, les actions, les effets sur la feuille
d'aventure, les redirections conditionnelles (en fonction des objets
d?j? acquis, du niveau d'habilet?, ...) sur d'autres sc?nes...


Tu veux dire qu'il s'agit d'une structure dynamique (un graphe = un arbre
?) évoluant au cours du temps et évitant de truffer le code the if() en
tous genres ?

Tu aurais pas un ou plusieurs liens sur le sujet (et orienté jeux si
possible).


Oups! Je vois que mes lettres accentuees sont mal passees!

Un arbre decrit souvent quelque chose de statique. L'expression
arithmetique que je donne dans l'exemple n'evolue pas avec le temps.

En revanche, il se preterait bien a des changements au cours du temps :
allocation dynamique du tableau des branches, pointeurs de branche
modifiables, ...

C'est vrai qu'un graphe peut eviter d'ecrire une batterie de 'if()' hardcodes.
Il faut alors concevoir un moteur generique, destine a interpreter les
noeuds du graphes.

Mais la valeur ajoutee n'est pas tellement dans le graphe lui-meme. Elle
est plus dans la puissance du moteur d'interpretation.

Je n'ai pas de liens sur le sujet. En revanche, si je trouve un peu de
temps, je transcrirai "la malediction de la momie" (^_^)
(http://www.chez.com/dagonides/sommaire.html) dans un format approprie
(partie declarative qui decrit implicitement le graphe)
pour un moteur tres souple de jeux de roles textuel (partie imperative,
qui condense la batterie de 'if()'/algorithmique, ne dependant pas du
scenario), que je delivrerai aussi.
Avantage de cette aventure : 400 scenes + proprietes + objets + attaques
varies -> cela devrait conduire a un format de scenario et a un moteur
assez complets.
Semaine prochaine (fin) ?

Pour faire vite, ce ne sera malheureusement pas redige en C, mais dans un
langage de script qui se prete bien à la resolution de ce type de probleme.

Il n'empeche que la notion de graphe sera abondamment exploitee. Mais les
graphes n'auront pas a evoluer avec le temps.

-- Cedric
--------------------------------------------------------------------
CodeWorker, a scripting language for parsing text and for generating
source code, available under LGPL at "http://www.codeworker.org".


Avatar
Zouplaz
Cedric LEMAIRE - :

Zouplaz wrote in message
news:...
Cedric LEMAIRE - :

Pour en revenir au probl?me initial (d?crire un jeu de role), on
retrouvera quand m?me une structure de graphe, mais ? l'int?rieur
d'un sc?ne, pour d?crire les choix, les actions, les effets sur la
feuille d'aventure, les redirections conditionnelles (en fonction
des objets d?j? acquis, du niveau d'habilet?, ...) sur d'autres
sc?nes...


Tu veux dire qu'il s'agit d'une structure dynamique (un graphe = un
arbre ?) évoluant au cours du temps et évitant de truffer le code the
if() en tous genres ?

Tu aurais pas un ou plusieurs liens sur le sujet (et orienté jeux si
possible).


Oups! Je vois que mes lettres accentuees sont mal passees!


Non, non c'est mon XNews qui me fait ça... Pas trouvé de solution pour
régler ce problème.


Je n'ai pas de liens sur le sujet. En revanche, si je trouve un peu de
temps, je transcrirai "la malediction de la momie" (^_^)
(http://www.chez.com/dagonides/sommaire.html) dans un format approprie
(partie declarative qui decrit implicitement le graphe)
pour un moteur tres souple de jeux de roles textuel (partie
imperative, qui condense la batterie de 'if()'/algorithmique, ne
dependant pas du scenario), que je delivrerai aussi.
Avantage de cette aventure : 400 scenes + proprietes + objets +
attaques varies -> cela devrait conduire a un format de scenario et a
un moteur assez complets.
Semaine prochaine (fin) ?

Pour faire vite, ce ne sera malheureusement pas redige en C, mais dans
un langage de script qui se prete bien à la resolution de ce type de
probleme.



Ah ben volontiers ! Tu comptes donc mettre ça en ligne quelque part ? Moi
je suis preneur !



Avatar
codeworker
Zouplaz wrote in message news:...
Cedric LEMAIRE - :
Pour faire vite, ce ne sera malheureusement pas redige en C, mais dans
un langage de script qui se prete bien à la resolution de ce type de
probleme.


Ah ben volontiers ! Tu comptes donc mettre ça en ligne quelque part ? Moi
je suis preneur !


Oui, je le mettrai en ligne.


Avatar
codeworker
(Cedric LEMAIRE) wrote in message news:...
Zouplaz wrote in message news:...
Cedric LEMAIRE - :
Pour faire vite, ce ne sera malheureusement pas redige en C, mais dans
un langage de script qui se prete bien à la resolution de ce type de
probleme.


Ah ben volontiers ! Tu comptes donc mettre ça en ligne quelque part ? Moi
je suis preneur !


Oui, je le mettrai en ligne.


En revanche, ce ne sera pas fin de cette semaine, bien que cela soit
quasi complètement achevé sur le plan programmatoire :
- format de description des scènes,
- format choisi de manière à permettre facilement une génération en
HTML avec du CGI (PHP ou autre) pour le moteur (combats, lancers de
dés, ...),
- parsing du format,
- gestion de la feuille de route,
- exécution des scènes :
- passage d'une scène à l'autre,
- choix multiples,
- 'tentez votre chance' + 'testez votre habileté'
- combats contre un ou plusieurs ennemis,

Il manque en fait un peu plus de 70 scènes sur les 400, qu'il faut retranscrire
fidèlement pour le moteur (essentiellement des scènes de combat où le
déroulement est très particulier).

Ce sera en ligne quand j'aurai traité les scènes manquantes.

-- Cedric
--------------------------------------------------------------------
CodeWorker, a scripting language for parsing text and for generating
source code, available under LGPL at "http://www.codeworker.org".