[i7] Tableau en tant que propriété d'objet

Salut à tous !

Question toute bête. En i7, est-il possible d’assigner un tableau à un type d’objet ? Ainsi, chaque représentant de ce type aurait son propre tableau. Le problème, c’est que les tableaux se déclarent de façon bien spécifique. Il me donne l’impression de vouloir être unique.

Merci d’avance !

[code]A person has a table name called loot.

Table of Butin du gobelin
Butin
épée rouillée
pain rassis

Le pain rassis est une chose. L’ épée rouillée (f) est une chose.
Le gobelin est une personne. Le loot du gobelin est la Table of Butin du gobelin[/code]Non testé, mais l’idée est là : le type correspondant aux tables est table name, ou nom de tableau en français. Et on peut l’utiliser comme n’importe quel type : dans une phrase, une variable, même en tant que valeur dans un autre tableau.

Oui, effectivement, c’est possible que ça marche comme ça, mais ce n’est pas tout à fait ce que je cherche à obtenir.

Dans ton exemple, tu définie manuellement la relation entre le loot du gobelin et le tableau qui s’y rapporte. Il n’existe donc qu’un seul tableau au final, qui est référencé dans un objet. Enfin, c’est comme ça que je l’interprète.
Ce que je cherche à obtenir, c’est un type d’objet qui possède un tableau directement. Si je crée X objets de ce type, il doit exister X tableaux associés. Si je veux accéder à un de ses tableaux sans spécifier à qui il appartient, il doit se produire une erreur comme si on cherchait à obtenir la description de rien en particulier.

Tant que j’y suis, une autre question. Lorsqu’on définit une propriété du style :

Une chose has a number called Bidule.

Est-il possible d’obtenir le nom de cette propriété en tant que texte par exemple pour faire une recherche dans un tableau ? Si oui, est-il possible de faire une boucle qui passe en revue toutes les propriétés d’un objet ?

Désolé si je n’ai pas compris ! (et désolé si ce qui suit ne correspond toujours pas à ta question !)

Si je comprends bien, tu veux quelque chose comme « A monster has a table name called loot » puis « There are 50 monsters », et il y aura 50 tableaux différents (il y aurait en quelque sorte la Table of monster loot 1, of monster loot 2, … , of monster loot 50). Et donc, si tu veux ajuster le butin d’un monstre en particulier (par exemple il s’est laissé pousser des cornes, que le joueur pourra récupérer, pendant la partie), tu n’as qu’à modifier son tableau, et ça ne touchera pas aux tableaux des autres.

Dans ce cas, ce n’est en théorie pas possible : les tableaux ne sont pas dynamiques dans Inform, ils doivent être créés à l’avance et avoir des colonnes et un nombre de lignes spécifiés et fixes, et ainsi de suite.

Je vois au moins deux solutions à ton problème.

Tu pourrais concevoir la chose différemment, en utilisant par exemple des listes — qui sont dynamiques, elles — à la place. Ou bien tu ne définis plus à l’avance le butin (si on reste dans le même exemple) mais tu le détermines en cours de jeu au moment où le monstre meurt, par exemple en suivant un livre de règles (ce serait pour moi la meilleure solution dans cette situation précise).

Tu peux aussi utiliser cette extension qui permet de changer la taille d’un tableau en cours de jeu, ou même d’en créer à la volée. Si tu l’utilises, tu pourrais donc parcourir tous les monstres au début du jeu et leur créer un tableau un par un. Le problème, c’est que ça pourra prendre du temps au début de la partie s’il y a beaucoup de monstres ; tu pourrais pour remédier à cela leur créer un tableau seulement quand ils entrent en jeu, mais que s’il n’en n’ont pas encore eu un.

Bref, tout dépend de pourquoi tu veux que chaque monstre ait son propre tableau spécifique. Si tu expliques un peu plus, peut-être qu’on pourra te trouver la meilleure solution.

(et pour ton autre question, ce n’est à ma connaissance pas possible de convertir un texte en nom de propriété et vice-versa, ou de parcourir toutes les propriétés d’un objet. Inform 7 n’est pas Python !)

Merci pour tes réponses ! Ça correspond à ce que je voulais savoir.

Je posais ces questions toujours pour ajouter des cordes à mon arc mais j’en ai désormais bien assez pour faire à peu près ce que je veux. Du coup, je ne vais pas monopoliser ton temps, je vais m’en sortir sans problème.

Niveau mémoire, j’ai opté pour le système qui me semble le plus solide :

  • Ne sont instancié qu’une petite quantité d’objets génériques qui ont vocation à être recyclés, réutilisés.
  • Les choses concrètes sont créés au besoin par des règles et se concrétisent en jeu via les objets génériques qui sont là pour les accueillir.
    Du coup, même si j’ai dix milles monstres et autant d’objets, ça ne devrait pas avoir d’impact sur la mémoire.

Voilà, voilà !

C’est une bonne solution, oui, même si quand tu as (vraiment trop) de règles qui tournent en même temps, ça fait ramer le jeu aussi. Question d’équilibre :slight_smile:

Glulx met à disposition une mémoire quasi-infinie (au moins du point de vue d’un jeu textuel). Comme l’a dit Azathoth, ce sont les règles qui peuvent vraiment ralentir le jeu, surtout quand il y a vraiment beaucoup d’objets.

Mais globalement tu n’as pas vraiment à t’en inquiéter. C’est seulement quand tu commence à avoir des gros ralentissements qu’il faut voir s’il n’y a pas des optimisations possibles.

Ho, pour le coup, je ne pense pas qu’elles tournent en même temps. Mais je verrai bien. De toute façon, plus un jeu est gros, plus il demande de mémoire. Tout ce qu’on peut faire, c’est réduire cette augmentation en trouvant, comme dit Azatoth, le bon équilibre.