Menu
Eclipso logo
Merry Christmas !
28/03/2024 22:49:01

Merci du partage + des pouains - RitoJS

[résolu] [script] aide à la compréhension d'une fonction (une ligne)

Arkain

Amateur
Arkain
  • Messages : 69

[résolu] [script] aide à la compréhension d'une fonction (une ligne)


dim. 19 oct. 2014 - 16h02

[b]BONJOUR AUX SCRIPTEURS[/b], les autres, au revoir. [i](enfin vous pouvez hein rester mais sans réel but je pense)[/i] Voici une fonction : [img]http://img11.hostingpics.net/pics/467508hum.png[/img] alors étant donné son nom, je suppose qu'il y a un rapport avec le "milieu" mais afin que ce soit plus clair dans ma tête, je demande : [b]Que fait-elle ?[/b] et aussi quelle est l'utilité du "?" tout seul comme dans cette fonction


[i]lol[/i]

Cantarelle

Adepte
Cantarelle
  • Messages : 298

[résolu] [script] aide à la compréhension d'une fonction (une ligne)


dim. 19 oct. 2014 - 16h49

[quote]alors étant donné son nom, je suppose qu'il y a un rapport avec le "milieu" mais afin que ce soit plus clair dans ma tête, je demande : Que fait-elle ?[/quote] [img]http://img11.hostingpics.net/pics/467508hum.png[/img] Donc, pour plus de compréhension, on va y aller point par point (désolée, je suis en train de faire ça pour mon truc à rendre en caml... Donc, autant continuer)... Surtout que j'ai l'impression que c'est codé comme du fonctionnel... Cette fonction middle prend trois paramètres : min_x, x et max_x [quote]x > min_x?[/quote] est assez simple à comprendre. Le ? te permet de savoir que min_x? est une fonction qui renvoie un booleen. C'est une convention d'écriture qui te permet, en un seul coup d'oeil, de savoir que c'est une fonction qui renvoie un booleen (attention : ce n'est pas dans tous les langages qui acceptent cette convention. Par exemple, en C, ça ne marchera pas). Normalement, tu as une fonction qui te fait ça. Ctrl+F pour chercher :) Dans ce cas-là, il compare si x est supérieur au min_x... [quote]x < max_x?[/quote] Pareil, mais pour max_x? Dans ce cas-là, il compare si x est inférieur au max_x... [quote]x:man_x:min_x[/quote] Je n'ai presque jamais vu cette écriture, vu que ce n'est utilisé qu'en fonctionnel (je débute en fonctionnel. Perso, je préfère l'objet). [strike]Sans compter que c'est une horreur pour y lire et y décoder...[/strike] Bref, de ce que je comprends, ainsi que mon ami google, il fait une comparaison booleenne (par contre, laquelle... Je pense que c'est le ET) et il renvera cette comparaison (true ou false). Après, un tel résultat, il faut apprendre les tables de vérité :p Attention, sur la troisième, c'est à prendre avec précaution, vu que ce ne sont que des suppositions. Mais, en gros, cette fonction détermine si ton x est bien dans un certain intervalle défini entre min_x et max_x. Pourrais-je savoir où tu as péché un tel code ? Parce que ça me fait penser à EE...

Arkain

Amateur
Arkain
  • Messages : 69

[résolu] [script] aide à la compréhension d'une fonction (une ligne)


dim. 19 oct. 2014 - 18h01

Donc, [i](parce que je suis pas sûr de comprendre)[/i] en gros, [quote]x > min_x ? x < max_x ?[/quote] ça équivaut à dire [quote]si x est compris entre min_X et max_x [/quote] ou j'ai pas compris ? ensuite pour le x : x_max : x_min si j'ai bien compris ce que tu dis, je t'avoue que je ne suis pas tout à fait convaincu d'une telle utilité. Je tire ce code du jeu [u]Touhou Wandering Souls[/u] de Estheone. Parce que j'ai kiffé son jeu, j'essaie de comprendre son code. Du coup je tombe sur cette partie de code : (on se trouve dans la classe Game_Weapon, et la fonction créée ici est celle utilisée pour faire gagner de l'expérience à une arme. @id est l'ID de l'arme @ap est l'expérience actuelle de l'arme @ap_list[] est la table d'expérience de l'arme en fonction de son niveau @level est le niveau de l'arme) [spoiler] def gain_ap(ap) return if @id == 0 @ap = Math.middle(0, @ap+ap, 9999999) while @ap >= @ap_list[@level+1] and @ap_list[@level+1] > 0 level_up end end [/spoiler] du coup je trouve assez clair sauf ce truc avec la fonction middle, je comprends pas bien ce qu'elle lui fait au final à ce @ap, et je vois pas trop ce qu'une comparaison booléenne viendrait faire ici:o? Dans les script du jeu, il y a un module Math ou sont rangées les fonctions que voici (dont celle que j'ai parlé) : [spoiler] module Math module_function def min(x, max_x) x < max_x ? x : max_x end def max(x, min_x) x > min_x ? x : min_x end def middle(min_x, x, max_x) x > min_x ? x < max_x ? x : max_x : min_x end def ang_val(rad_val) return (rad_val*180/PI) end def rad_val(ang_val) return (ang_val*PI/180) end end [/spoiler] EDIT : et euh au fait euh merci de m'avoir répondu si vite ! [b]EDIT2 : Après réflexion, je pense qu'il serait possible que la fonction fasse en sorte que si x < x_min alors x = x_min ou si x > x_max alors x = x_max mais j'aimerais quand même la confirmation de quelqu'un de plus compétent que moi sur le sujet :D)[/b]


[i]lol[/i]

Joke

Amateur
Joke
  • Messages : 77

[résolu] [script] aide à la compréhension d'une fonction (une ligne)


dim. 26 oct. 2014 - 22h39

Bonjour Cantarelle s'est malheureusement faite avoir par le "?" et sa connaissance des autres langages... :p En fait c'est tout simple, la ligne en question : [code]x > min_x ? x < max_x ? x : max_x : min_x[/code] Reprend deux fois la forme d'une condition raccourcie type "Condition [b]?[/b] SiOui [b]:[/b] Sinon" C'est à dire qu'au lieu de la forme qu'on connaît tous : [code]if Condition QuelqueChoseSiOui else AutreChoseSinon end[/code] On peut écrire : [code]Condition ? QuelqueChoseSiOui : AutreChoseSinon[/code] En l’occurrence, on a deux fois ce type de condition, l'une dans l'autre : Condition1 ? [color=red][u]Condition2 ? QuelqueChoseSiOui : AutreChoseSinon[/u][/color] : AutreChoseSinon x > min_x ? [color=red][u]x < max_x ? x : max_x[/u][/color] : min_x Donc si on traduit la ligne mystère avec la forme de condition qu'on rencontre plus fréquemment, on a : [code]if x > min_x if x < max_x x else max_x end else min_x end[/code] Ce qui fait que : - ça renvoi X si X est entre MIN et MAX - ça renvoi MIN si X est inférieur à MIN - ça renvoi MAX si X est supérieur à MAX La fonction s'appelle "middle" car si on prend trois valeurs a, b, c au hasard, et qu'on fait "Math.middle(a, b, c)", c'est supposé renvoyer dans tous les cas la valeur parmi les trois qui se situe entre les deux autres. (LA VALEUR AU MILIEU) [size=6]En fait, ce n'est pas [i]la véritable fonction "middle"[/i], car ici la fonction impose d'avoir "a < c" (min_x < max_x, c'est logique) pour se comporter comme une fonction "middle". (Par exemple, Math.middle(3,2,1) renverra 3, qui n'est PAS le milieu). MAIS ON S'EN FOUT dès lors qu'on retient que les arguments sont MIN_X, X et MAX_X.[/size] Dans ton script, la fonction est utilisée pour garder le nouvel AP entre 0 et 9999999. ^^ Je suppose que c'est comme ça pour la plupart des stats. La fonction peut être utile par exemple dans le cas d'un choix, pour que le curseur s'arrête bien en haut de la liste et s'arrête bien en bas de la liste au lieu de continuer de se déplacer vers le haut ou vers le bas. Pour ma part, au lieu de faire "Math.middle(MIN, X, MAX)", je faisais "[[X, MIN].max, MAX].min" qui revient au même... mais je vais retenir cette fonction, maintenant. :)


[url=http://urlz.fr/yt9]Joke's Gribs[/url] | [url=http://forum.eclipso.fr/forum.php?id=20&sujet=1941]Joke's Sounds[/url] | [url=http://urlz.fr/yt2]Terre cuite[/url] | [url=http://www.alexdor.info/?p=jeu&id=784]Vaisseau3D[/url] | [url=http://www.alexdor.info/?p=jeu&id=785]Décadence[/url] | [url=http://urlz.fr/yt7]BilouCorp[/url] | [url=http://urlz.fr/yte]Genesis[/url] | [url=http://forum.eclipso.fr/forum.php?id=11&sujet=1871]Groupe Skype RPG Maker[/url]

Arkain

Amateur
Arkain
  • Messages : 69

[résolu] [script] aide à la compréhension d'une fonction (une ligne)


lun. 27 oct. 2014 - 15h05

Quel charisme dans cette réponse !! [b]Merci à toi, BLAGUE ![/b] Tout est dorénavant [u]clair et logique[/u]. [size=8](et j'suis content car c'est finalement bien ce que j'avais fini par comprendre tout seul*-*)[/size]


[i]lol[/i]