Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Sorties: Dread Mac Farlane - episode 6 / News: Quoi de neuf sur Oniromancie (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

327 connectés actuellement

29353283 visiteurs
depuis l'ouverture

8507 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Lunae - le bazar d'Emz0

Hellsoft

RPG Fusion

Tashiroworld

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RMXP] Un ARRAY au lieu de 30 variables, c'est possible ?


Grimmelda - posté le 05/02/2023 à 19:03:16 (68 messages postés) -

❤ 0

Domaine concerné: script
Logiciel utilisé: RMXP
On va poser ça un peu comme un problème :D
Admettons j'ai N clients (chiffre qui peut évoluer ds le temps), et la date du jour stockée dans une variable. Ce que je veux c'est que quand chacun d'entre eux me parle, si c'est la première fois de la journée qu'il ou elle me voit, j'ai droit à une phrase d'intro/dialogue différent des autres fois où je leurs parlerait durant cette même journée, qui indique que c'est la première fois qu'on se voit, du genre "Hey, comment ça va aujourd'hui, t'es bien rentrée hier soir ?".

Bien sûr la première possibilité c'est d'utiliser N variables, en se disant que si la variable du client n° machinchose est différente de celle dans laquelle je stocke la date du jour, on lance l' intro spéciale, et puis on actualise la variable en la rendant égale à la date actuelle.

MAIS je me demande si je peux pas condenser le truc en utilisant un ARRAY, sauf que j'ai trouvé assez peu de doc sur le sujet, il y a les explications pour MV mais pas pour XP. En essayant j'ai l'impression d'avoir réussi à stocker trois valeurs distinctes dans un array de cette façon :
$game_variables[45]= ([33,1,2]); mais je ne peux rien en tirer car je ne sais pas comment demander la 1ere, 2e ou 3e valeur en tant que condition pour lancer mon "intro spéciale". L'idée serait de procéder exactement de la même façon, mais en stockant les valeurs dans mon array, pour n'utiliser qu'une seule variable au lieu de 30 ou plus.
Et donc on aurait entre crochets une série de N nombres entre 1 et 31, correspondant à la dernière fois où on à parlé à chaque personnage. les valeurs dans la partie entre parenthèses devraient être un peu équivalentes à ça ([15,24,20,24,24,22,18,24,24,24,7,15,24]); pour 13 clients, si on est le 24 du mois et que j'ai parlé à 7 personnages aujourd'hui. (je simplifie volontairement en n'indiquant que la date du jour car si par le plus grand des hasard on croise un perso qu'on a pas vu depuis pile un mois, bon, ça ne lance pas l'intro c'est pas grave.

Est-ce que ça parle à quelqu'un ?


Roi of the Suisse - posté le 05/02/2023 à 20:25:45 (29801 messages postés) - honor -

❤ 0

Alerte neige !

Les variables de RPG Maker XP sont normalement des nombres entiers, pas des tableaux. Si tu essaies de mettre des tableaux dedans, tu risques de faire beuguer le logiciel. Genre si par erreur tu essaies de diviser ta variable par 3 alors qu'elle contient un tableau, ça va péter.

Si tu sais d'emblée que tu as exactement 30 personnages dans ton jeu, je te conseille d'utiliser 30 variables portant le nom des personnages respectifs.
Avoir 30 variables et avoir un tableau de 30 cases, c'est exactement pareil.
Si, ce que tu veux faire, tu peux le faire avec des variables, alors le faire avec des tableaux sera seulement moins pratique, tu devras passer par des commandes Ruby à chaque fois au lieu de passer par la commande "variable".

Si, par contre, tu as un nombre de personnages qui varie, ou qui est potentiellement infini (par exemple des personnages générés procéduralement), alors oui un tableau/liste peut avoir un intérêt.

L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko


Grimmelda - posté le 06/02/2023 à 10:36:16 (68 messages postés) -

❤ 0

Merci, c'était aussi pour le savoir dans l'absolu en terme d'"optimisation" (avec des gros guillemets parce que c'est encore autre chose de capter de quoi il en retourne en terme de temps de calcul).

Est-tu sûr de toi, car RM stocke les nombres différemment avec cette écriture entre crochets (ce qui me fait dire ça c'est que quand on regarde l'état des variables via F9 on voit qu'il peut stocker des 0 avant les autres chiffres, ce qui n'est pas le cas avec les variables numériques habituelles.

A part ça, OK, je vais dédier des variables et en prévoir un peu plus au cas où.
Merci !


Mack - posté le 06/02/2023 à 13:07:04 (2288 messages postés)

❤ 0

Je crois que RM gère les variables comme des Objets sans type, et donc qu'on peut leur attribuer n'importe quel type.
( Et donc un array )
Mais je pense pas que ça soit une bonne idée, ça peut foutre bien le bordel si tu fais pas gaffe à ce que tu fais :F

Par contre, je vois pas l'intérêt ?
Oui utiliser plein de variables ça peut être chiant, mais utiliser un système pour autre chose qu'il est prévu, c'est souvent une mauvaise idée si tu sais pas parfaitement ce que tu fais x)


Sinon, je suppose que si tu peux effectivement mettre des array dans les variables, il te suffit d'y accéder comme ça :

Portion de code : Tout sélectionner

1
$game_variables[45][0]




Après je sais pas trop comment tu gères tes personnages, mais la meilleur solution c'est de leur attribuer arbitrairement un ID propre, et de calculer tes variables par rapport à cet ID.
Genre, Jean-Pierre à l'ID 1, Susie à l'ID 2, ...
Et la date du dernier dialogue, tu fais un truc du genre :
v[X] = ID du personnage * 10 + 100000
( On prend l'ID du personnage * le nombre d'info différentes à stocker + une très grosse valeur pour être sur que tu y accèdes pas en général )
V[v[X]] = Date du dialogue

Grosso modo, c'est comme si tu définissais une variable pour chaque PNJ à la main, donc si tu as besoin que de la date du dernier dialogue, c'est pas forcément utile, mais si par exemple tu veux faire un système d'amitié, ou quoi, ça peut vite être utile.
L'autre avantage, c'est que comme tu accèdes à des variables très haute que t'es pas censé accéder en temps normal, t'as pas besoin de prévoir des variables pour des personnages en plus.
( Il faut juste prévoir le nombre d'info à stocker )

( Je prend note de tout les commentaires, même si je n'y répond pas )


cortez - posté le 06/02/2023 à 21:05:03 (523 messages postés)

❤ 0

Votre échange a débloqué un truc dans mon cerveau. :youpi

C'est génial de pouvoir saisir un array dans une variable (en plus il ne semble pas y avoir de limite)

Voici ce que j'ai testé avec des commandes évènement "appel script"

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
 
# array de 5 valeurs
$game_variables[45]= [33,1,2,100,57]
 
# affiche la valeur du premier membre de l'array
print $game_variables[45][0]
 
# ajoute un membre après la dernière position ayant la valeur 5
$game_variables[45].push(5)
 
# affiche le nombre de menbre que contient l'array.
print $game_variables[45].length
 



Pour avoir un aperçu de tout ce qu'il est possible de faire essaye ce lien (en anglais)
https://ruby-doc.org/core-2.7.0/Array.html


Grimmelda - posté le 07/02/2023 à 13:33:00 (68 messages postés) -

❤ 0

Merci pour vos réponses,

du coup ça m'a motivé à persévérer, et bon, en fin de compte ça marche, j'ai la date de la dernière visite de tout le monde dans une seule variable, je récupère la Nème* valeur pour voir si elle est égale à ma variable Date du jour, et si c'est différent ça lance les salutations et à la fin du dialogue je rends ma Nème valeur égale à la variable Date du jour. Pour récupérer la valeur au sein de l'array et l'utiliser dans une conditionnal branch j'utilise une seconde variable qui elle n'est pas un array comme "variable tampon", mais pour celles et ceux qui maîtrisent bien le Ruby ça paraît dispensable.

J'ai fait le test, c'est bien différent les deux fois, ça me paraît complètement fonctionnel pour mon utilisation en tout cas. En tout cas on dirait bien qu'en fin de compte on peut s'en servir ! Et par ailleurs sur le sujet de ce que peut contenir une variable, on m'a aidé y a pas longtemps enfin elles peuvent également contenir des chaînes de caractères en tout cas (des strings, si je ne m'abuse).

*(... Bon j'imagine qu'il y a des blagues sur les nems à faire, j'ai pas réussi à mettre le "ème" en exposant.)


Roi of the Suisse - posté le 07/02/2023 à 14:07:22 (29801 messages postés) - honor -

❤ 0

Alerte neige !

Grimmelda a dit:

Merci, c'était aussi pour le savoir dans l'absolu en terme d'"optimisation" (avec des gros guillemets parce que c'est encore autre chose de capter de quoi il en retourne en terme de temps de calcul).

Pour répondre à ta question sur l'optimisation (performance, pas esthétique), un tableau va coûter plus cher à l'ordinateur à créer et manipuler. Pourquoi ? Parce qu'un tableau prend plus de place qu'un nombre seul. Pour stocker le tableau en mémoire, l'ordinateur a besoin de trouver un endroit où il y a beaucoup de cases vides à la suite. Tandis qu'avec des nombres isolés, il peut en ranger un par-ci, un par-là, il n'y a pas besoin que ces cases mémoires soient contigües.
Si un jour ton tableau devient trop grand (à force de rajouter des éléments dedans), l'ordinateur va devoir trouver un autre endroit plus grand dans la mémoire pour l'y déplacer. Il se peut que cet endroit plus grand n'existe pas, alors il va devoir déplacer plein d'autres éléments pour créer cet espace.
Donc, utiliser un tableau n'est pas forcément optimal.

Cela dit, aujourd'hui les machines sont tellement puissantes que manipuler un tableau de chiffres est extrêmement rapide. Nous sommes entrés dans une ère où on construit des machines plus puissantes au lieu d'écrire un code bien optimisé...

Ça ne veut pas dire qu'il ne faut jamais utiliser des tableaux, bien sûr. À force de programmer, avec l'expérience, tu vas finir par associer un problème à une structure de données qui répond à ce problème. Un tableau (array), une liste, un ensemble (set), un arbre binaire, un arbre quelconque, un dictionnaire... Chaque structure de données répond à un problème. Il y a des programmeurs qui font ça depuis longtemps et qui utilisent encore parfois une liste au lieu d'un set. La structure tableau est parfaitement adaptée pour certains problèmes.

On a été plusieurs à te répondre "oui, techniquement, c'est possible de mettre un tableau dans une variable", mais la vraie question c'est : est-ce que tu es sûr que c'est ici la structure de données la plus adaptée à ton problème ? Tu n'as qu'à essayer, et si plus tard tu te rends compte que ça n'est vraiment pas pratique et que tu es dans un cul-de-sac, c'est que la réponse était non :F


En tout cas, vérifie bien que ton tableau est sauvegardé quand tu : mets des trucs dedans, sauvegardes, quittes le jeu, réouvres le jeu, charges ta partie, lis le contenu du tableau.
Et manipule toujours ton tableau avec les lignes Ruby, pas avec les commandes évènementielles, sinon ça risque de péter.

L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko

Index du forum > Entraide > [RESOLU] [RMXP] Un ARRAY au lieu de 30 variables, c'est possible ?

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers