Problème de nombre

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

Problème de nombre

Messagepar swiart2 le Mar Mai 01, 2018 9:10 pm

Bonjour

Comment définir un nombre illimité d'objet dans un endroit, par exemple un champ de carottes.
A chaque fois que le joueur prendre une carotte elle s'incrémente dans son inventaire, mais reste aussi visible sur l'endroit.

Merci
swiart2
Investigateur
 
Messages: 67
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Problème de nombre

Messagepar StephaneF le Mer Mai 02, 2018 6:33 am

Pour avoir un nombre " infini " d'objets, tu dois utiliser l'extension Dynamic Objets

Provides the ability to create new objects during game play. Requires Dynamic Tables.


http://inform7.com/extensions/Jesse%20M ... index.html

Ensuite tu crées un backdrop appelé " champ de carottes ", ou ce que tu veux, et à chaque fois que le joueur tapera " prendre une carotte " (il faudra magouiller un peu aussi pour que ça fonctionne, avec un
Code: Tout sélectionner
After reading a command :
if the player's command matches "prendre une carotte"
begin ;
blabla
...... par exemple), tu feras apparaître, ex nihilo, une nouvelle carotte. Je n'ai jamais utilisé cette extension, je ne peux donc pas t'en dire plus sur son fonctionnement
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 504
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Problème de nombre

Messagepar swiart2 le Mer Mai 02, 2018 12:33 pm

Bonjour

J'ai essayé avec le code suivant qui permet de définir un nombre d'objet.
Ce code fonctionne bien par contre, dans mes description de scéne j'intègre la description des objets.
Donc pour ne pas faire apparaître un objet je le défini avec la propriété " Undescribed". Seul problème, le code utilisé avec la propriété Undescribed ne gère plus correctement les quantités!
Si quelque sait pourquoi ....

>x carotte
Idéales en soupe ou en purée (Pour celui qui aime les carottes).

>x carottes
[Vous ne pouvez pas utiliser plusieurs objets avec ce verbe.]

>prendre carotte
Voilà qui est fait.

>prendre carottes
Vous l'avez déjà.



Code: Tout sélectionner
The plural of carotte is carottes. A carotte (f) is a kind of thing. A carotte is always edible. Ten carottes are in the jardin.
The description of the carotte is "Idéales en soupe ou en purée (Pour celui qui aime les carottes).". Understand "carottes", "carotte" as the carotte. The printed name of  the carotte is "carotte".


Le même code avec la propriété Undescribed :
Code: Tout sélectionner
The plural of carotte is carottes. A carotte (f) is a kind of thing. A carotte is undescribed. A carotte is always edible. Ten carottes are in the jardin.
The description of the carotte is "Idéales en soupe ou en purée (Pour celui qui aime les carottes).". Understand "carottes", "carotte" as the carotte. The printed name of  the carotte is "carotte".
Undescribed
swiart2
Investigateur
 
Messages: 67
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Problème de nombre

Messagepar Natrium le Dim Mai 06, 2018 7:57 pm

J'éviterais d'utiliser l'extension que StephaneF a mentionné, car elle est assez difficile à utiliser et il est souvent possible de faire sans. Aussi, pas besoin de l'after reading a command, puisqu'il suffit de rediriger "prendre carotte" vers le champ. En plus, avec l'after reading a command, il faudrait prendre en compte toutes les commandes possibles qui puisse mener à la prise d'une carotte, alors autant laisser le parser s'en charger pour nous.

Donc, pour répondre à ta question initiale, le mieux est de créer un nombre fixe de carottes hors du jeu, et de les donner au joueur quand il prend le champ. Il faudra bloquer l'action s'il n'y a plus de carottes en réserve.

Code: Tout sélectionner
[On crée des carottes hors-jeu. Augmenter le nombre de carotte si ce n'est pas suffisant.]
A carrote is a kind of thing. There are 10 carottes.

The champ is a room.

[L'objet qui simule la source inépuisable de carottes.]
Some carrot-supply are a thing in le champ. The printed name is "carottes"
Understand "carotte" as the carrot-supply.

[Si on prend la source, on apporte une nouvelle carotte à la place.]
Instead of taking the carrot-supply:
    if a carotte (called C) is off-stage:
        now the player carries C;
        say "Voilà qui est fait.";
    else:
        say "Vous avez déjà pris beaucoup de carottes.".

Avec ça, il peut y avoir un problème si le joueur tape "prendre carotte" et qu'il en possède déjà, car ça peut ne pas être redirigé vers le champ, mais ça peut se résoudre facilement si c'est le cas. Aussi, s'il est possible d'égarer des carottes, il faut finir par les enlever du jeu si on ne veut pas que le joueur soit obligé d'aller les retrouver (car il ne pourra plus en prendre de nouvelles puisqu'il a épuisé son quota).

Tout ça est tiré de l'exemple Pizza Prince (section 18;34).


Pour répondre à ta seconde question avec le undescribed, c'est parce qu'un objet ayant cette propriété est considéré comme caché. Quand le joueur prend pour la première fois des carottes, le jeu assume que le joueur sait qu'elles sont là car il l'a mentionné dans sa commande. Mais après cela, le jeu préfère choisir celles qui sont possédées par le joueur car les autres sont toujours considérées comme cachées. (J'espère que c'est assez clair.) Pour mentionner un objet, il faut les déclarer comme scenery, mais on ne pourrait dans ce cas plus les prendre. Une autre solution serait d'utiliser une certaine activité, mais je ne sais plus laquelle et je n'ai pas le temps de vérifier tout de suite.

Mais si tu adoptes le code plus haut, alors tu n'aura plus besoin d'undescribed, je pense.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1048
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité