Ma réponse est assez longue, alors je tiens tout d’abord à préciser que tout ce code n’est pas nécessaire par rapport à la question initiale si les combinaisons ne sont pas un élément clef du jeu. Dans ce cas, on peut juste bloquer l’action avec une règle check et gérer les cas où ça fonctionne avec des instead.
Pour répondre à Landry :
Ton code est pas mal ! C’est une bonne idée de mettre une liste dans un tableau si on veut systématiser le truc. Cependant, comme chaque combinaison ne peut contenir que deux éléments (et pas un nombre indéterminé), ce serait peut-être mieux d’à la place écrire deux colonnes, chacune correspondant à un élément. Il faudrait aussi pouvoir éviter de spécifier deux fois chaque recette, sauf bien sûr si l’ordre des objets peuvent mener à des résultats différents.
Du coup, je le verrais plutôt comme suit :
- On parcourt le tableau.
- Si le premier ingrédient de la ligne en cours est le noun et le second ingrédient est le second noun, ou bien si le premier ingrédient est le second noun et le second ingrédient est le noun, on effectue la combinaison, comme tu l’as fait.
Si tu veux vraiment garder la liste, ce serait mieux de transformer la liste de « travail » en variable d’action, plutôt que de la mettre en variable globale, ça fait un peu plus « propre » et plus flexible.
Aussi, dans l’idéal, pour suivre les conventions d’Inform, il aurait été mieux de mettre la réponse quand ça ne fonctionne pas dans un règle check.
Enfin, pour la question du désassemblage, ça peut poser problème de garder les ingrédients en jeu, parce que le joueur pourra toujours interagir avec eux. On pourrait simplement utiliser deux propriétés sur les produits qui contiennent les ingrédients, ou utiliser des relations.
D’ailleurs, plutôt que d’utiliser un tableau, j’aurais peut-être utilisé des relations pour tout, en fait. Je n’ai pas testé, mais ça donnerait quelque chose de ce genre :
[code]Composition relates various things to various things.
The verb to be made of means the composition relation.
The verb to make means the reversed composition relation.
Le balai is made of le manche. Le balai is made of la brosse.
The combining action has a thing called the combined object.
Setting action variables for combining:
if something (called product) is made of the noun:
if the product is made of the second noun:
now the combined object is the product;
else:
now the combined object is the player.
[on va utiliser le joueur pour détecter si la combinaison ne mène nulle part.]
Check combining something with something:
if the combined object is the player, say « Vous ne parvenez pas à assembler [the noun] avec [the second noun] » instead;
Carry out combining:
now the player carries the combined object.[/code]
Et pour une éventuelle action pour récupérer les objets, il faudrait vérifier comme cela :
repeat with T running through things that make the noun:
now the player carries T;
now the noun is nowhere.
Bien sûr, un tableau peut être mieux en fonction du projet, mais les relations font peut-être un peu plus « informien ».