Oniromancie: Tutoriels - )Joke's tuts)- Classer des variables dans l'ordre croissant/décroissant.


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

Jeux: Monster World RPG / Jeux: Pif et Hercule / News: Mise à jour de RPG Maker 2003 / Tutos: Création de charset / Jeux: FAYLINAWA /

Chat  (27 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

75 connectés actuellement

9262690 visiteurs
depuis l'ouverture

863 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Make & Graph'

Guelnika - E Magination

Lunae, le baz'arts d'Emz0

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs




)Joke's tuts)- Classer des variables dans l'ordre croissant/décroissant.
Ecrit par Joke

Ce tutoriel fonctionne pour toute les versions de RPGmaker (2000, 2003, XP, VX)

Mais il est surtout utile pour RM2000 et 2003 car pour XP et VX, les scripts sont plus utile comme l'explique Zeus81 en troisième commentaire de ce tutoriel ! =)


Ce tutoriel explique une méthode permettant de comparer, classer plusieurs variables à l'intérieur d'un groupe de plusieurs variables qui diront quelle est la première, la deuxième, la troisième, etc.

PRÉ-REQUIS

Savoir ce qu'est une variable pointée par une autre variable.
-> Explication dans le tutoriel "Tout tout, tout sur les variables !"

OBJECTIF :

Dans l'exemple d'un système de combat, déterminer l'ordre des actions des personnages suivant leur caractéristique "rapidité", le plus rapide attaque le premier, et ainsi de suite. Il y a plusieurs utilité à pouvoir classer plusieurs variables dans l'ordre croissant ou décroissant ! ^^

NÉCESSAIRE :

-Une boucle
-Un groupe de variable (variables qui se suivent) de 1 à ce qu'on veut (si on estime ne pas avoir plus de 10 variables à classer, on fait un groupe de 10 variables nommées de rang1 à rang10)
-Une variable "Numéro var. de rang"
-Une variable "Valeur de contrôle"
-Vos variables à classer (qui sont déjà faite si vous avez besoin de les classer, donc^^) elles n'ont pas besoin d'être groupées, sauf si vous êtes expert, vous pourriez concentrer 10 fois plus mon code si vos variables étaient groupées mais n'entrons pas dans le complexe ! ^^

TAILLE DU CODE :

Pas très grand, il varie suivant le nombre de variables à classer (une condition en plus pour une variable en plus)

RALENTISSEMENTS ?

Aucun, sauf qu'il faut éviter de l'utiliser pour classer des variables allant de 0 à plus de 1000, une fois ça ne ralentit pas le jeu mais si vous utiliser la technique 10 fois toute les 1 frames ça ralentira forcément^^

PRINCIPE :

The gros principe de barbare :
-Vous faites une boucle, qui n'aura surtout pas d'"attendre" à l'intérieur.
-Avant la boucle on met une variable "valeur de contrôle" à la valeur minimum des variables à classer* si on classe du plus petit au plus grand, ou la valeur maximum* si on veut classer du plus grand au plus petit.
-Dans la boucle, cette variable va diminuer de 1 à chaque tour de boucle si on veut classer du plus grand au plus petit, augmenter de 1 si on veut classer du plus petit au plus grand.
-On sort de la boucle si toute les variables sont classées ou si la variable lancée atteint : La valeur minimum que peuvent avoir les variables, si on a débuté avec la valeur maximum, et à l'inverse, la valeur maximum que peuvent avoir les variables si on a débuté avec le minimum.

Si vous classez dans l'ordre croissant, de la plus petite à la plus grande variable, la plus petite variable sera indexée* dans le rang1
Si vous classez dans l'ordre décroissant, de la plus grande à la plus petite variable, la plus grande variable sera indexée dans le rang1

*Indexer ??
Par exemple vous avez des variables "vitesse héros 1", "vitesse héros 2" etc... si c'est la variable"vitesse héros 5" la plus grande, et que vous classez de la plus grande à la plus petite, vous aurez "5" dans la variable "rang1"

*Valeur maximum et minimum des variables ??
C'est important de savoir les définir, dans l'exemple d'un système de combat, on compare les vitesse de héros alors une caractéristique de vitesse a pour minimum 1 et maximum 99, généralement. Si la variable "vitesse héros 4" est à 0 c'est que le héros est absent et c'est là que c'est important, car il ne faut pas classer les variables des héros et monstres absent ! (je suis toujours dans l'idée du système de combat mais ce pourrait être un mini-jeu ou un système de repérage de l'objet le plus proche ou autre.) donc c'est pour ça que dans cet exemple.
Le minimum serait 1 et non 0 car 0 serait la valeur des variables inactives qu'on ne veut pas classer. si on a besoin de 0 voir même de classer aussi les valeurs négatives genre à partir de -200, il faudra trouver une valeur spéciale genre -300 pour les variables inactives.
Le maximum sera la valeur maximale de vos variables, la valeur pour laquelle vos variables ne sont pas sensées dépasser, dans le cadre de leur utilisation.
Evitez de classer des variable dans une trop grande fourchette genre de -5000 à 5000


EXEMPLE DE GROUPE DE VARIABLES :

image

Retenez bien ce qu'est le numéro du premier rang de votre groupe, et le numéro du dernier rang.

C'est un groupe de rang1 à rang8, mais vous pouvez aussi bien faire de "rang1" à "rang 20" comme de "rang1" à "rang4" ^^ Ça ne changera pas la longueur du code ! ^^ (c'est le nombre de variable à entrer par contre qui feront 3 conditions supplémentaires pour 3 variables supplémentaires, etc...)


Vous avez tous les éléments nécessaire pour essayer de comprendre le code, maintenant :

LE CODE :


<>modifier variable : plusieurs : du "Numéro du premier rang" au "Numéro du dernier rang" rendre égal à "0" (comme ceci)
<>modifier variable : "Numéro var. rang" rendre égal à "Numéro du premier rang"
<>modifier variable : "Valeur de contrôle" rendre égal à "Valeur la plus basse de vos variables" si vous faite dans l'ordre croissant (1er=le plus petit), rendre égal à "Valeur la plus haute de vos variables" si vous faites l'ordre décroissant (1er=le plus grand)
BOUCLE
<>condition : si variable "Valeur de contrôle" = variable "Votre première variable"
---<>modifier variable : d'après la variable "Numéro var. rang" rendre égal à "1"
---<>modifier variable : "Numéro var. rang" additionner "1"
fin de condition
<>condition : si variable "Valeur de contrôle" = variable "Votre deuxième variable"
---<>modifier variable : d'après la variable "Numéro var. rang" rendre égal à "2"
---<>modifier variable : "Numéro var. rang" additionner "1"
fin de condition
<>condition : si variable "Valeur de contrôle" = variable "Votre troisième variable"
---<>modifier variable : d'après la variable "Numéro var. rang" rendre égal à "3"
---<>modifier variable : "Numéro var. rang" additionner "1"
fin de condition
Et ainsi de suite, Mêmes conditions pour chaque variables contrôlées, il n'y a que "modifier variable : d'après la variable "Numéro var. rang" rendre égal à "..." où l'indexe "1", "2", "3", "..." changera ^^
<>modifier variable : "Valeur de contrôle" soustraire "1" si on classe du plus grand au plus petit, additionner "1" si on classe du plus petit au plus grand.
<>condition : si variable "Numéro var. rang" inférieur strict à variable "Numéro du dernier rang"
---<>Sortir de la boucle
fin de condition
<>condition : si variable "Valeur de contrôle" inférieur strict à "Valeur minimum des variables" si on classe du plus grand au plus petit, supérieur strict à "Valeur maximum des variables" si on classe du plus petit au plus grand.
---<>Sortir de la boucle
fin de condition
FIN DE BOUCLE


Et avant qu'un grand défenseur du lag ne vienne me dire "eh, t'as oublié de mettre un "attendre" dans ta boucle, ça va lagger !!", je signale qu'il ne faut pas en mettre car voyez vous cette boucle va faire une centaine de tours en une fraction de seconde, et elle aura forcément céssé au bout d'une fraction de seconde grâce aux conditions qui font "sortir de la boucle". ^^ Voici donc un exemple de boucle de calcul où il ne faut pas mettre de "attendre", tant que la boucle est sensée arrêter de tourner même pas un dixième de seconde après son lancement, pas de problème, mais une boucle qui tourne pendant 5 seconde ça ferait 5 secondes de lag, alors imaginez une boucle qui ne se termine pas.^^ Donc pour ces autres cas, n'oubliez pas le "attendre".^^


YOUPI !

Et voilà, vous mettez ce code à l'endroit où vous voulez classer vos variables et vous aurez vos variables classées dans le groupe "rang1 à rangX"^^

Par exemple, si on voulait classer quatre variable :
Pv héros 1 = 58
PV héros 2 = 27
Pv héros 3 = 58
Pv héros 4 = 97

on aurait, si on classe dans l'ordre croissant :

rang 1 = 2 (le plus petit nombre)
rang 2 = 1
rang 3 = 3
rang 4 = 4

si on classe dans l'ordre décroissant :

rang 1 = 4 (le plus grand nombre)
rang 2 = 1
rang 3 = 3
rang 4 = 2


Il y a d'autres techniques c'est sûr, mais celle ci est infaillible car ça peut ne pas compter les variables inactive dans le classement et ça compte aussi les variables qui ont la même valeur, comme montré ci-dessus les variables 1 et 3 qui ont la même valeur sont classé l'une après l'autre suivant la hiérarchie des conditions à l'intérieur de la boucle.^^

Bilou !


Drakhaine - posté le 08/10/2008 à 19:53:28. (52 messages postés)

Programmeur/chanteur à toute heure!

Sympa le tuto ! (clin d'oeil à Nemäu au passage)

En pause : Désignée, Pokémon TCG, Rayman ! En cours : A pirate I was meant to be


Falco - posté le 10/10/2008 à 19:20:42. (15336 messages postés) - heberge

L'homme à Abattre

Super tuto.
J'ai put tester, ça marche niquel.

C'est vraiment quelque chose qui beaucoup ne savent pas faire en plus.

Pixold - Site web sur mes créations - Inexistence - Disponible sur Steam- Zelda Creator -Suivez moi sur Twitter


Zeus81 - posté le 10/10/2008 à 21:18:12. (11072 messages postés)

Su XP et VX, c'est plus rapide de le faire en script et plus complet.
Les actions suivantes doivent être écrite en utilisant la commande "Insérer un script" des évènements.
Si tout ne rentre pas dans une commande, c'est pas grave, ça peut être fait en plusieurs fois.

On créé d'abord un tableau :

Portion de code : Tout sélectionner

1
@tableau = []


On y insère les id des variables à trier :

Portion de code : Tout sélectionner

1
2
3
4
5
@tableau.push(128)
@tableau.push(64)
@tableau.push(2352)
@tableau.push(10)
etc...


On trie :
- Si on veut par ordre croissant :

Portion de code : Tout sélectionner

1
@tableau.sort! {|a, b| $game_variables[a] <=> $game_variables[b]}


- Si on veut par ordre décroissant :

Portion de code : Tout sélectionner

1
@tableau.sort! {|a, b| $game_variables[b] <=> $game_variables[a]}


On récupère le résultat :
- Si on veut récupérer l'id d'une variable :

Portion de code : Tout sélectionner

1
$game_variables[Numéro d'une variable où stocker le résultat] = @tableau[rang-1]


- Si on veut récupérer la valeur d'une variable :

Portion de code : Tout sélectionner

1
$game_variables[Numéro d'une variable où stocker le résultat] = $game_variables[@tableau[rang-1]]


- Par exemple si on veut la valeur de la variable qui est au 1er rang :

Portion de code : Tout sélectionner

1
$game_variables[Numéro d'une variable où stocker le résultat] = $game_variables[@tableau[0]]


On supprime le tableau :

Portion de code : Tout sélectionner

1
@tableau = nil



=> Pas de boucle
=> Permet de trier des variables même si elles ne se suivent pas
=> Une variable pour le résultat
Efficacité !


Joke - posté le 10/10/2008 à 21:32:25. (5029 messages postés)

De toute façon on peut programmer ce qu'on veut en événement, ce sera plus simple de le faire en script donc ouais c'est surtout pour le 2000 et 2003, j'ai signalé ton coup de pouce dans les premières lignes du tutoriel, merci =)

http://rmex.github.io/ | Joke's Tuts | Joke's Gribs | SoundCloud | Terre cuite | BilouCorp | Genesis | Groupe Skype RPG Maker | DELIRIUM-II


Monos - posté le 10/10/2008 à 23:22:32. (56317 messages postés) - admin

Vive le making libre

C'est bien beau aussi de parler de script c'est plus simple et tous.
C'est seulement vrais pour les personnes qui savent utiliser les scripts/Scripter.

Pixner|Offgame | Le comptoire des clikeurs


Zeus81 - posté le 11/10/2008 à 00:16:59. (11072 messages postés)

C'est sur que si on essai de le faire en script alors qu'on ne sait pas scripter, c'est pas facile, mais vu que je donne tout le code, y a juste a faire copier/coller.


Monos - posté le 11/10/2008 à 00:24:06. (56317 messages postés) - admin

Vive le making libre

heu je doute qu'une personne qui ne connais pas le ruby sache de quoi tu parles vraiment. On place le code ou? et ses question la.

Car je suis sur que pour beaucoup de monde c'est du chinois.

Pixner|Offgame | Le comptoire des clikeurs


Joke - posté le 11/10/2008 à 10:10:06. (5029 messages postés)

Citation:

Y a juste a faire copier/coller.


C'est spécialement pour ça que je n'aime pas les RPGmaker XP et VX, le "il suffit juste de copier/coller, pas besoin de comprendre le script"...

Il faut faire des tutoriels qui décomposeraient le fonctionnement d'un script pour ne pas qu'il suffise juste de le copier coller mais de pouvoir en refaire un pour une autre utilisation, copier coller des lignes de codes sans piger d'où elles sortent c'est naze et on peut pas empêcher les gens de le faire mais c'est pour ça que lorsque je fais un tutoriel sur l'événementiel (le script je touche pas^^) je ne dis pas simplement ce qu'il faut faire mais surtout comment ça marche.

http://rmex.github.io/ | Joke's Tuts | Joke's Gribs | SoundCloud | Terre cuite | BilouCorp | Genesis | Groupe Skype RPG Maker | DELIRIUM-II


Zeus81 - posté le 11/10/2008 à 15:40:29. (11072 messages postés)

J'ai édité un peu le début et je trouve que j'explique assez bien quels bouts de codes font quoi.


Tricky - posté le 11/10/2008 à 16:34:16. (205 messages postés)

Portion de code : Tout sélectionner

1
C'est sur que si on essai de le faire en script alors qu'on ne sait pas scripter, c'est pas facile



Et j'en suis la preuve 8-)

...

Wha, c'est trop concept... Zeus a Light de DeathNote et moi L (ryuuzaki) comme avatar...

====>[]


Joke - posté le 12/10/2008 à 21:49:55. (5029 messages postés)

Merci Dayen ça m'fait plaisir que mes tutoriels t'intéressent ! =)
Mais publier un livre pour ça ce serait du massacre d'arbre inutile ! x)

Merci Zeus81, le nouveau making (XP, VX) aurait plus fière allure si on faisait plus de tutoriels de script genre un tutoriel sur la fonction @tableau qui peut servir à trier etc... ^^

En attendant, l'événementiel reste une technique valable et bonne pour tous les RM (bien que meilleure pour 2000/2003) ^^

http://rmex.github.io/ | Joke's Tuts | Joke's Gribs | SoundCloud | Terre cuite | BilouCorp | Genesis | Groupe Skype RPG Maker | DELIRIUM-II

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

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis