Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / News: Muma|Rope est disponible en (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

173 connectés actuellement

30731908 visiteurs
depuis l'ouverture

1886 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Kingdom Ultimate

RPG Maker VX

Alex d'Or

Tashiroworld

Offgame

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RMXP] Comparer 4 variables


Updater3000 - posté le 02/02/2014 à 22:32:37 (307 messages postés)

❤ 0

Truth will be revealed !

Domaine concerné: Event
Logiciel utilisé: RMXP
Salut, j'ai récemment repris le rpg making, j'ai oublier plusieurs commandes et astuces et maintenant je suis là à demander de l'aide.
J'ai créer 4 variables (G, V, C et M) G pour guerrier, V pour voleur, C pour clerc et M pour mage, leur valeur initial est 0, c'est 4 variables vont servirent à déterminer dans quelle classe le joueur va être diriger et cela avec un questionnaire ex :
Q1 une question qui a comme réponse :
R1, R2, R3 et R4.

Si R1 est choisie Variable 0001 G =+4
Si R2 est choisie Variable 0002 V =+4
Si R3 est choisie Variable 0003 C =+4
Si R3 est choisie Variable 0004 M =+4

Q2 une autre question :
R1, R2, R3 et R4.

Si R1 est choisie Variable 0001 G =+2
Si R2 est choisie Variable 0002 V =+2
Si R3 est choisie Variable 0003 C =+2
Si R3 est choisie Variable 0004 M =+2

Et enfin une dernière question :
Q3 une autre question :
R1, R2, R3 et R4.

Si R1 est choisie Variable 0001 G =+1
Si R2 est choisie Variable 0002 V =+1
Si R3 est choisie Variable 0003 C =+1
Si R3 est choisie Variable 0004 M =+1

Ses questions vont déterminer quelle classe le personnage va jouer, si par ex moi je choisie comme réponses R4, R4 et R4 la variable M va stocké 4+2+1 donc 7 mais, là ou je veut en venir c'est qu pour diriger le joueur et donner le résultat des questions il faut comparer les 4 variables, c'est là où je coince je n'arrive pas a créer les conditions nécessaires pour comparer les 4 variables.
J'ai essayer de faire un organigramme mais il étais tellement énorme qu'une feuille a4 n'a pas suffit alors j'ai trouver une idée.
C'est de sommer G+V est stocké le résultat dans une variable S1 et C+M est le stocké dans S2 puis comparer S1 et S2 si S1 est plus grand que S2 alors je compare G et V pour trouver la plus grande valeur et celle qui va attribuer la classe au perso principale, mais là aussi je coince je n'arrive pas a stocké G+V dans une autre variable je ne trouve pas le moyen de le faire.
SVP aider moi sa me rond fous je n'arrête même pas à y réfléchir, il faut que je trouve la solution. Merci d'avance.

Fous du role play


Hellper - posté le 02/02/2014 à 22:49:21 (5402 messages postés)

❤ 0

Tonton Hellper

Ton système basé sur le fait que si G+V > C+M alors G ou V est la plus grande variable est erroné. Par exemple avec les valeurs G = 12, V = 10, C = 15, M = 6 : G+V = 22 et C+M = 21 alors que c'est G qui a la plus grande valeur.

La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux


Joke - posté le 02/02/2014 à 23:02:20 (5090 messages postés)

❤ 0

Bilouteux fou

Vas chercher bonheur chez ton wikipedia !

Les algorithmes lents, bien que lents, sont très simples à réaliser en événement. ^^

J'avais fait un tutoriel pour trier des valeurs en événement, mais on peut le jeter, j'étais jeune et débile...

biloumaster.fr, mon joli site ouèb tout bô tout frai !


Tassle - posté le 02/02/2014 à 23:25:18 (5274 messages postés)

❤ 0

Disciple de Pythagolf

Ou si utiliser une insertion de script ne te gêne pas :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
 
start = 1
n = 0
var_i = 0
$game_variables[start,start+4].each_with_index do |val,i|
  if val>n
    var_i = i+start 
    n = val
  end
end
$game_variables[5] = var_i


Là ça va stocker le numéro de la variable contenant la valeur la plus grande dans la variable 5. Tu peux changer le 5 pour la variable que tu veux. Tu peux aussi changer le start = 1 si tes quatre variables commencent pas à la variable numéro 1 (je sais pas si c'est clair :wouah)

Tu peux bien sûr également reproduire le même principe en événements. Il suffit pour chaque variable de tester si elle est supérieure à une cinquième variable et si oui remplacer cette cinquième variable par la valeur de la variable testée et remplacer une sixième variable par le numéro de la variable testée. (je sais toujours pas si c'est clair :wouah)
Au final le numéro de ta variable contenant la valeur la plus élevée sera contenu dans la sixième variable.

~~


Danzaiver - posté le 03/02/2014 à 01:02:50 (364 messages postés)

❤ 0

Perso j'aurai fait :


Condition si variable G > a la variable V
Alors :
==> comparaison avec la troisième variable donc re condition du meme genre.

Condition si variable G > a la variable C
==> comparaison avec la quatrème variable donc re condition du meme genre.

Condition si variable G > a la variable M

Dans se cas sa veut dire que G est séléctionner :

Changer classe du héros guerrier.

SINON si aucune de c'est condition n'est rempli rien ne se passe.

Et tu recommence avec V puis C puis M

Tu peut meme y mettre des étiquette et des sauter a l' étiquette.

Par exemple tu sait que G est > a V mais que C est > a G donc c'est pas un guerrier, vu qu'avec toutes les condition que tu as mit si tu les as toutes mit comme au dessus tu peut directement mettre dans le sinon de la condition qui n'est pas remplis un sauté a l'étiquette qui se trouvera juste avant la vérification de la condition qui vérifia si C est > a M puisque par déduction C est > a G et a V puisque G>V.

Bon courage test et re-test jusqu'à obtenir se que tu veut.


solidboko - posté le 03/02/2014 à 08:17:54 (292 messages postés)

❤ 0

Via script :

Portion de code : Tout sélectionner

1
2
choices = [$game_variables[1], $game_variables[2], $game_variables[3], $game_variables[4]]
$game_variables[5] = choices.index(choices.sort.last)



A ce niveau, ta variable 5 vaut de 0 à 3, selon qui est le plus grand entre G, V, C et M :
0 => G
1 => V
2 => C
3 => M

Je peux comprendre l'attachement à l'idée de tout faire "en events", mais quand un script fait le boulot en deux lignes, autant l'utiliser ;)

Surtout qu'il suffit de définir une méthode genre :

Portion de code : Tout sélectionner

1
2
3
4
def definir_classe
  choices = [$game_variables[1], $game_variables[2], $game_variables[3], $game_variables[4]]
  $game_variables[5] = choices.index(choices.sort.last)
end



et d'utiliser la commande "appeler script" pour appeler ladite méthode "definir_classe". A noter en revanche que c'est le premier résultat trouvé à la valeur cumulée la plus grande qui sera retenu, ça ne gère donc en rien une égalité entre deux possibilités.

Mais même ça, ça peut se gérer mieux via un script un peu plus poussé. Après, si tu préfères recoder un algo de tri en events, libre à toi. Mais ici tu n'as qu'un copier / coller à faire pour que ça marche directement. :)

Maker un jour, maker toujours.


Updater3000 - posté le 03/02/2014 à 12:37:17 (307 messages postés)

❤ 0

Truth will be revealed !

Vos réponses sont très instructifs, c'est vrai que je n'ai pas remarqué qu'il y avait une faille dans lon idée merci a toi Hellper, je l'abandonne et je crois que je vais opter pour une solution avec script.
Et merci à toi aussi Joke je sens que ce wiki va me servir a l'avenir.

@Tassle
C'est exactement ce que je chercher a faire, c'est comparer chaque variable a une 5éme si elle est supérieurs a elle elle la remplace, en plus, j'ai déjà trier une matrice par cette méthode en cours de programmation (Je suis complétement con de ne pas y avoir pensé avant)
Par contre je ne suis pas très familier avec le ruby même si il ressemble beaucoup au fortron

@Danzaiver
J'ai déjà essayer cette méthode mais, elle prend énormément de temps et il y a beaucoup de commandes de conditions

@solidboko
...Tu peux me re-expliqué le tout ? Je suis curieux mais, je n'ai pas tous compris.

Enfin bref, vos méthodes sont très intéressantes mais, même si par exemple je choisie de le faire en quatre lignes de code comment je vais faire pour l'appliqué ? Je fais appelle au definir_classe et je met une condition derrière ?
Je vais vous dire ce qui ma pousser a faire ça, s'il y a entre vous qui connaisses http://www.pottermore.com/fr le site, je me suis inscris récemment et on m'a fais passer plusieurs question pour me casé dans une école, j'aimerais bien le reproduire ce teste il m'intrigue :triste2

Merci pour vos réponses.

Fous du role play


solidboko - posté le 03/02/2014 à 12:48:05 (292 messages postés)

❤ 0

La méthode que je t'ai proposée est dite "procédurale", dans le sens où elle ne renvoie rien. Elle se contente de faire le boulot, point barre.

Considère que tes variables $game_variables sont en fait un tableau de variables globales (d'où le $ situé en début de nom de variable). Donc en gros, mon script va directement modifier la valeur de ta variable 5 en fonction de tes variables de 1 à 4.

Donc tu as juste à appeler le script, c'est tout.

EDIT : explication pas à pas :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
def definir_classe # je cree une methode qui a pour but d'etre appelee depuis un event via "appeler script"
  
  # ci-dessous je cree un tableau qui contient les variables qu'il faut comparer
  choices = [$game_variables[1], $game_variables[2], $game_variables[3], $game_variables[4]]
  
  # ici j'enchaine pas mal de methodes
  # choices.sort.last trie le tableau des choix et renvoie le dernier : tri du plus petit au plus grand,
  # donc le dernier correspond au plus grand, ce que tu voulais, donc
 
  # choice.index(plus grande valeur ainsi calculee) renvoie l'index du tableau qui contient la valeur trouvee
  # on affecte ce resultat a ta variable 5
  $game_variables[5] = choices.index(choices.sort.last)
end
 



Maker un jour, maker toujours.


Updater3000 - posté le 04/02/2014 à 17:39:08 (307 messages postés)

❤ 0

Truth will be revealed !

Merci solidboko, j'ai bien compris avec les commentaires dans le code :sourire2 reste juste a l'installer, je crée un nouveau scripte et je copie le tous dedans c'est ça ?

Fous du role play


solidboko - posté le 04/02/2014 à 17:50:29 (292 messages postés)

❤ 0

Sur le principe c'est ça. Après, j'ai utilisé RPG Maker XP y a si longtemps que je t'avoue que je l'ai même pas testé. Mais je code en Ruby tous les jours, donc je suis sûr de mon truc. Dis-moi si t'as un soucis avec, je réinstallerai XP pour tester.

Maker un jour, maker toujours.


Updater3000 - posté le 04/02/2014 à 18:17:17 (307 messages postés)

❤ 0

Truth will be revealed !

Je viens de le teste et sa ne marche pas :triste2.
J'ai upload une image de ce qu'est mon event à chaque fois que je teste, la variable 5 contient 0.

Spoiler (cliquez pour afficher)



Fous du role play


solidboko - posté le 04/02/2014 à 18:23:21 (292 messages postés)

❤ 0

Pour moi ça fonctionne très bien :

image

Comme tu peux le voir, j'ai configuré mes variables et le résultat est bien 3. Dans le tableau [var1, var2, var3, var4], c'est bien la dernière variable qui a la valeur la plus grande, son indice est 3 (car on compte à partir de 0). Si je change les valeurs des variables, ça fonctionne. Tu as peut être un soucis dans ton insertion de script, fais un screen.

Maker un jour, maker toujours.


Updater3000 - posté le 04/02/2014 à 18:24:26 (307 messages postés)

❤ 0

Truth will be revealed !

Merci et désolé de t'obliger a réinstaller rpg maker.


EDIT : Ahhh d'accord ce n'ai pas la valeur de la plus grande variable qui ce stock dans la variable 5 mais son emplacement, il y a un moins de faire en sorte que la valeur contenu dans la plus grande variable soi égale a la variable 5 ? Genre j'ai :
V1 = 10
V2 = 5
V3 = 8
V4 = 12
donc j'aurais une variable 5 qui va être égale à la variable 4 donc 12 comme ça je pourrais comparer chaque variable avec la 5éme pour savoir quel classe attribuer.
Merci et désolé pour mon langage et sure tous mon orthographe.

Fous du role play


solidboko - posté le 04/02/2014 à 18:38:33 (292 messages postés)

❤ 0

EDIT du fait de ta réponse :

si bien sûr

Portion de code : Tout sélectionner

1
2
3
4
def definir_classe
  choices = [$game_variables[1], $game_variables[2], $game_variables[3], $game_variables[4]]
  $game_variables[5] = choices.sort.last
end



Tu peux même l'abréger :


Portion de code : Tout sélectionner

1
2
3
def definir_classe
  $game_variables[5] = [$game_variables[1], $game_variables[2], $game_variables[3], $game_variables[4]].sort.last
end



Au passage, du fait de la simplicité du code, tu peux aussi directement taper :

Portion de code : Tout sélectionner

1
$game_variables[5] = [$game_variables[1], $game_variables[2], $game_variables[3], $game_variables[4]].sort.last



dans ta commande "insérer script", au lieu de t'emmerder à créer un script dans la base de scripts.

Maker un jour, maker toujours.


Updater3000 - posté le 04/02/2014 à 23:09:16 (307 messages postés)

❤ 0

Truth will be revealed !

Ah merci infiniment solidboko c'est nickel chrome.

Fous du role play


solidboko - posté le 05/02/2014 à 01:12:15 (292 messages postés)

❤ 0

Content d'avoir pu t'aider et hésite pas si t'as besoin :)

Maker un jour, maker toujours.


zeus81 - posté le 05/02/2014 à 01:22:04 (11071 messages postés)

❤ 0

Citation:

donc j'aurais une variable 5 qui va être égale à la variable 4 donc 12 comme ça je pourrais comparer chaque variable avec la 5éme pour savoir quel classe attribuer.

Tu sais le nombre que y'avait dans la variable 5 c'était justement le numéro de la classe, comme ça t'avais pas besoin de comparer. :fou


solidboko - posté le 05/02/2014 à 08:40:12 (292 messages postés)

❤ 0

C'était effectivement l'enjeu de mon premier script : faire ressortir directement la classe. Mais bon, faut y aller doucement avec l'intrusion de script, à force d'en voir les qualités, le Ruby se propagera peut être dans son projet ;)

Maker un jour, maker toujours.


Crystal - posté le 05/02/2014 à 09:51:02 (2146 messages postés) -

❤ 0

Plus simple, si tu veux ajouter des classes sans te casser la tête.

Portion de code : Tout sélectionner

1
2
3
def check_class(*var)
  var.index(var.max {|i, j| $game_variables[i] <=> $game_variables[j] })
end



Ainsi, les variables pourraient être 2, 7, 34, 241 et 4 par exemple. Le ID de classe sera selon l'ordre dans lequel tu les fournis à la fonction. Tu peux donc faire quelque chose comme:

Portion de code : Tout sélectionner

1
$game_variables[5] = check_class(1, 2, 3, 4)




solidboko - posté le 05/02/2014 à 10:02:20 (292 messages postés)

❤ 0

Oui, une belle solution aussi. Après, s'il conserve bien au chaud ce code à un seul endroit, dans un seul event (ce qui est le cas ici), il n'a qu'à ajouter les variables dans mon tableau, ce qui revient au même que d'ajouter les indices supplémentaires à ta fonction. Enfin, comme tu le sais, en Ruby t'as à peu près autant de façons de faire que de codeurs.

Ta solution est fort élégante, j'aime beaucoup.

Maker un jour, maker toujours.


Updater3000 - posté le 05/02/2014 à 10:42:25 (307 messages postés)

❤ 0

Truth will be revealed !

Je m’intéresses beaucoup le Ruby mais, je n'ai vraiment pas donner le temps a son apprentissage et je le regrette d’ailler, Crystal peut tu m'expliquer chaque syntaxe que tu a utiliser et s'il te plait m'expliquer pourquoi 2, 7, 34, 2414 et 4 ? Je n'ai pas compris ce que ton code fais, et je suis très curieux de le savoir j'avoue.

Fous du role play


Crystal - posté le 05/02/2014 à 11:00:26 (2146 messages postés) -

❤ 0

Merci ^^

Les nombres que j'ai mis en exemple sont fictifs, en gros ça veut dire que tu pourrais appeler ta fonction avec les numéros de variables que tu veux, et ça retournerait l'index de la valeur la plus grande selon l'ordre que tu as fourni.

En mettant l'astérisque devant var, cela veut dire que var est un tableau qui contient tous les arguments donnés à la méthode. Par la suite, on obtient le numéro de variable avec la valeur la plus grande avec max, qui compare les numéros selon la variable à laquelle ils réfèrent. Finalement, on appelle index de var sur ce résultat pour avoir sa position et on la retourne. Tu peux donc utiliser cette dernière pour avoir un ID de classe selon tes besoins.


Updater3000 - posté le 05/02/2014 à 11:20:14 (307 messages postés)

❤ 0

Truth will be revealed !

Ok, merci pour cette explication :D

Fous du role play


solidboko - posté le 05/02/2014 à 12:20:37 (292 messages postés)

❤ 0

Clairement, si tu comptais comparer beaucoup de variables, je te recommande d'utiliser sa méthode plutôt que la mienne, plus lisible.

Taper juste l'indice plutôt que $game_variables[indice] c'est sûr que c'est plus lisible. A toi de voir, les deux méthodes fonctionnent très bien et font sensiblement la même chose. Je pourrais t'en inventer pas mal encore :)

Et pour Ruby, je prévois d'écrire dessus prochainement. Crystal, si d'ailleurs ça t'intéresse, je t'enverrai les protos quand ça aura avancé. Ce que j'aime avec Ruby, c'est qu'on voit chez les autres codeurs des petites astuces qu'on aurait pas pensé utiliser soi-même. Donc si ça te dit de déceler les coquilles / m'aider sur ce projet, ça serait un vrai plaisir.

L'idée sera :
- d'expliquer en toute simplicité ce que Ruby permet, comment ça fonctionne etc. en partant du principe que le public cible n'y connait rien / n'a pas le temps / prendra peur facilement / les trois en même temps.

- d'expliquer comment utiliser Gosu pour créer des jeux vidéo en 2D.

- d'expliquer comment fonctionne Ruby-OpenGL et comment l'allier à Gosu pour créer des jeux vidéo en 3D.

- de poster des sample codes de tout et n'importe quoi.

Maker un jour, maker toujours.


Crystal - posté le 07/02/2014 à 19:32:34 (2146 messages postés) -

❤ 0

Ça pourrait être intéressant. Tu peux me contacter par MP quand ce sera prêt, mais je verrai selon le temps que j'ai évidemment.

Index du forum > Entraide > [RMXP] Comparer 4 variables

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