|
| [RESOLU] Séparation d'un nombre ? | |
| | Auteur | Message |
---|
Mamie Wawa Très bonne participation
Messages : 112
| Sujet: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 0:42 | |
| Bonjour, J'ai un petit problème que je n'arrive pas à résoudre, et je n'ai pas non plus trouvé sur le forum, ni sur google, donc je pose la question. J'ai une variable que j'affiche avec un draw, mais cette variable, dans un soucis d'esthétique, j'aimerai séparer tous les 3 chiffres d'une virgule pour qu'esthétiquement ce soit mieux, c'est assez brouillon expliqué comment ça mais en gros je veux passer de ça > 123456789 à ça > 123,456,789 ( ou encore 12,459 / 3,153 / etc.. ) Je rajoute le draw qui me permet d'afficher la variable, si jamais ça peut influencer > - Code:
-
draw_text_color(x,y,string(global.variable),color_random,color_random,color_random,color_random,1) Que la lisibilité du nombre soit améliorer Est-ce possible ? Merci d'avance !
Dernière édition par Mamie Wawa le Mar 27 Aoû 2013 - 21:23, édité 1 fois |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 8:15 | |
| Tu fais une fontion addPoints(str) : a=0; for(i=string_length(str);i>0;i-=1){ a+=1; str+=string_char_at(str,i); if(a%3==0){ str+=","; } } return str; Et ensuite t'affiche ca : addPoints(string(tonNombre)). Bon j'ai pas testé mais ca devrait marcher essaie de comprendre comment ca marche, c'est pas très compliqué Indice : %, c'est un modulo, et ca te retourne le reste de la division ; donc 22%4=2. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 13:53 | |
| J't'avouerai que je suis une bille dès que ça touche aux boucle for / while / etc... Même en essyant de comprendre, j'y arrive pas Mfin bref, j'ai essayé mais quand je lance j'ai ce message > - Citation :
- ERROR in
action number 1 of Draw Event for object obj_show:
Illegal argument count calling script "addPoints". Script requires 0 arguments, 1 have been supplied. Et le code que j'ai mis dans un script ( d'ailleurs je sais même pas si c'est correct de le mettre dans un script ) > - Code:
-
a=0;
for( i=string_length(str) ; i>0 ; i-=1 ) { a += 1; str += string_char_at(str,i); if ( a mod 3 == 0) { str+=","; } }
return str; Puis après j'appelle le script et je l'affiche avec le draw_text > - Code:
-
draw_text(x,y,addPoints(string(global.variable))) Ça doit surement te paraitre tout con pour toi mais personnellement je trouve pas |
| | | GrandeLangue Bonne participation
Messages : 77 Localisation : Lille Projet Actuel : Faire des maths
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 14:23 | |
|
Dernière édition par GrandeLangue le Mar 27 Aoû 2013 - 16:11, édité 1 fois |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 14:31 | |
| Le deuxième lien est un 404 et en cherchant sur le site j'ai pas trouvé vers quelle page sa mène, tu peux le renvoyer ? Merci EDIT: J'ai rien dis fallait enlever le point je pensais que y avait quelque chose derrière RE-EDIT: Donc j'appelle le script, avec l'argument str puis j'affiche la variable ? - Code:
-
addPoints(str) draw_text(x,y,addPoints(string(global.variable))) Après ça me dit unknow variale str ça m'énerve de pas comprendre, c'est pire encore |
| | | GrandeLangue Bonne participation
Messages : 77 Localisation : Lille Projet Actuel : Faire des maths
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 16:24 | |
| Non, ton code dans le draw event est bon, c'est dans ton script qu'il y a un problème. - Citation :
- Script requires 0 arguments, 1 have been supplied.
signifie que tu as appelé ton script de cette façon : script(argument0) alors qu'à l'intérieur de ton script, il n'utilise pas la variable argument0. En effet, ton script ne connait pas la variable str, il ne sait pas que toi tu veux mettre ton argument dans str. Un script ne connait que les variables qu'on lui envoit et qui sont nommées à l'intérieur du script : argument0, argument1, etc jusqu'à argument15. Donc il te suffit simplement en haut de ton script d'ajouter la ligne : - Code:
-
var str; str = argument0; Maintenant quand tu vas appeler addPoints(string(global.variable)), il va mettre string(global.variable) dans argument0 et comme tu déclares une variable str égale à argument0, ton code pourra marcher. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 17:15 | |
| Eh beh put**n Ouais voilà, jme disais bien tout con, mais je trouvai quand même pas Sinon, j'ai plus d'erreur mais le script réagi très bizarrement, que ce soit avec une variable ou un nombre rentré à la main Donc le code du script > - Code:
-
var str; str = argument0;
a=0;
for( i=string_length(str) ; i>0 ; i-=1 ) { a += 1; str += string_char_at(str,i); if ( a * 3 == 0) { str += ","; } }
return str; Le seul truc que j'ai changé c'est le % que j'ai changé par mod ( pour modulo ) car game maker considère pas le % comme modulo Le draw > - Code:
-
draw_text_color(x,y,addPoints(string((123456789))),color_random,color_random,color_random,color_random,1) Et ça m'affiche - Citation :
- 123456789987,654,321,
Donc si je comprend bien le str du script reprend donc le "123456789" que je veux afficher puis le "return", donc ça limite je comprend que je l'ai après afficher 2 fois, mais pourquoi à l'envers ? Et comment régler ça ? Pour éviter que le nombre se retrouve 2 fois, faudrait retourner str, le changer en argument1, supprimer argument0puis afficher agument1 ? Enfin je sais pas comment expliquer ça c'est brouillon et je m'emmêle J'ai essayé de changer des + par des - et des - par des + voir si ça changeait l'ordre d'apparition des chiffres mais non Pareil j'essaye différents code voir si ça pourrait changer mais soit ça bug soit ça fait rien |
| | | marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 17:54 | |
| salut,je me suis plongé sur ton problème et ce fut un casse tête! crée un script qui s'appelle score_aff place ce code: - Code:
-
a=0 b=0 entre_scor=(argument0) sortie_scor=(argument1)
for(a=string_length(argument0);a>=0;a-=1;){ b+=1 if(b mod 3==0){ argument0=string_insert(" ",argument0,a)} } argument1=argument0 return argument1 dans l'event create de ton objet invente une variable kill,gold,..tout sauf score car game maker l'utilise déjà. je l'appelle win dans le draw de ton objet: place un execute code et met dedans: - Code:
-
aff=score_aff(win) draw_text(10,10,aff) l'objet t'affiche la variable aff qui est le resultat du script score_aff en espèrant que cela te mette sur la voix |
| | | GrandeLangue Bonne participation
Messages : 77 Localisation : Lille Projet Actuel : Faire des maths
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 18:09 | |
| Attends, en fait je n'avais pas regarder ce que faisait le code de Térence, donc j'avais pas trop fait attention à ce qu'il voulait faire. Donc il y a une erreur qui vient de ma part, c'est que str = argument0 implique de mettre "123456789" dans str. Or le code de Térence ajoute "987,654,321" à str, d'où ton résultat étrange. En fait, il faut mettre au début de ton script : var str; str = argument0 ""; Et dans le code de Térence, changer for( i=string_length(str argument0) ; i>0 ; i-=1 ) str+=string_char_at(str argument0,i); Ainsi tu n'auras plus le "123456789" devant.
Une autre erreur vient de Térence cette fois-ci, c'est que la chaîne de caractère est inversée. Le code renvoie en réalité "" + dernier char de argument0 + avt-dernier + ... + 2eme + 1er. Plutôt que de te donner la réponse, je te propose de trouver toi-même comment modifier sa boucle for pour obtenir "" + 1er char de argument0 + 2eme + ... + dernier. Tu peux même te passer de la variable a si tu te débrouilles bien (en utilisant i à la place...).
Ah aussi, je te conseille de toujours rajouter var nom_de_ta_variable; en haut de ton script pour chaque variable que tu utilises pour retenir des résultats "intermédiaires". En effet, cette commande déclare une variable locale au script uniquement, et qui sera donc détruite à la fin du script. Si tu ne le fait pas, tu vas rajouter une variable inutile dans l'instance qui appelle ton script. Par exemple ici il vaut mieux rajouter var a; en haut du script pour que ton instance ne se balade pas avec une variable a pendant tout ton jeu.
Ou sinon tu peux utiliser le code de marty, mais il est beaucoup moins optimisé (enfin, si la fonction string_insert fait ce que je crois qu'elle fait). |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 18:40 | |
| Ok, merci GrandeLangue et Marty, je vais essayé de trouver par moi-même comme tu as dis même si j'essaye depuis 20 mins et que je rageote de plus en plus de pas comprendre Et merci aussi pour le conseil Si tu as un indice de comment faire je suis preneur, même un petit xD |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 19:24 | |
| Arf, j'ai plus l'habitude de GM moi Ouais, c'est ma faute, str c'est argument0, et il faut une deuxième variable pour le return... Pour l'ordre des lettres inversé, c'est encore de ma faute, mais un petit calcul de rien du tout suffit à le régler ; essaie de trouver toi meme : i, c'est l'"étape" à laquelle on est, sachant qu'on débute à l'étape string_length(argument0) et qu'on diminue chaque fois qu'on rajoute un nombre (et éventuellement une virgule) jusqu'à atteindre 0. Bon, comme à mon avis je suis pas clair, vlà le code, mais essaie d'abord par toi meme - Spoiler:
- Code:
-
var a, strStart, strEnd, length; a=0; strStart=argument0; strEnd=""; length=string_length(strStart); for(i=length;i>0;i-=1){ a+=1; strEnd+=string_char_at(strStart,length-i); if(a mod 3==0){ strEnd+=","; } } return strEnd;
Cette fois ci si ca marche pas je bouffe un balais |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 20:17 | |
| Merci de t'être repenché sur le sujet mais ton code agi aussi bizarrement sur le nombre ( je passe de 123456789 à 112,345,678, ) Sinon j'ai trouvé comment inverser l'arrivé des chiffres sur le premier code que tu avais donné avec l'aide de GrandeLangue > ( fallait changer le i en a de string_char_at ) - Code:
-
var str; str = "";
a = 0;
for( i=string_length(argument0) ; i>0 ; i-=1 ) { a += 1 str += string_char_at(argument0,a); if ( a mod 3 == 0) { str += ","; } } return str;
Je comprend un peu mieux le fonctionnement des boucle for mais il reste toujours un problème avec que je n'arrive pas à régler c'est que les , commence de gauche à droite alors que logiquement on marque de droit à gauche ( par exemple j'ai 12345678912 ça me donne > 123,456,789,12 alors que j'aimerai que ça me fasse 12,345,678,912 ) Et aussi j'ai un autre problème qui me gâche complétement tout, c'est que ma variable possède un . ( par exemple 15.45 ) et donc ça me fait un affichage complétement horrible ( 152,425,1.15 par exemple ) comment faire en sorte que les virgules se mettent en place à partir du troisième chiffre après le . ? Limite si je savais comment faire pour inverser le placement des virgules je pourrais changer le a = 2 pour commencer à partir du point ( enfin je pense ? ) mais c'est pas le cas RE-EDIT: D'ailleurs j'ai essayé de reprendre l'idée du lentgh et de le rajouter au code puis de faire un length-a dans le string_char_at mais ça fonctionne pas non plus |
| | | D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 20:42 | |
| - Code:
-
var i; var len; var m; var str;
str = ""; len = string_pos(".", argument0);
if(len == 0) len = string_length(argument0);
m = len mod 3;
for(i = 1; i < len; i += 1) { if(i > 1 && i mod 3 == m) str += ","; str += string_char_at(argument0, i); }
return str + string_delete(argument0, 1, len - 1); Je pense que ça marche, mais j'ai pas GM sous la main. |
| | | GrandeLangue Bonne participation
Messages : 77 Localisation : Lille Projet Actuel : Faire des maths
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 20:45 | |
| La fonction string_char_at(str,index) Retourne le caractère de str à la position index. C'est-à-dire que string_char_at("123456789",1) renvoie le caractère à la position 1, c'est-à-dire "1". string_char_at("123456789",2) renvoit "2", etc. (Note qu'il faut bien faire attention à ce que l'index soit compris entre 1 et string_length(str). D'ailleurs Térence, ton code comporte une erreur de ce côté-là...) Pour résoudre le problème d'inversion, plusieurs possibilités. Mais celle de Térence ne fonctionne absolument pas Ce que toi tu proposes, je ne pense pas que tu l'ai bien compris. En effet, tu remplaces i par a. Mais alors, à quoi sert ta variable i ? La boucle for deviendrait alors inutile... La solution simple à ton problème (c'est ce que voulait faire Térence je pense), et tu gardes la variable a pour compter tous les 3 chiffres quand mettre une virgule : puisque str += char; est inversé, il suffit de se rappeler que cela équivaut à str = str + char; "L'inverse" de cette commande est juste : str = char + str; Donc : - Code:
-
var str, a; str = ""; a = 0;
for( i=string_length(argument0) ; i>0 ; i-=1 ) { a += 1 str = string_char_at(argument0,a) + str; if (a mod 3 == 0) { str = "," + str; } } return str; Le seul petit défaut, c'est le caractère "," qui est ajouté parfois à la fin du nombre. Exemple : "123,456,789 ," Pour ça, modifie la condition qui rajoute "," : - Code:
-
if (a mod 3 == 0 && a != string_length(argument0)) Cependant, pour bien apprécier l'utilité de la boucle for, on peut ne pas utiliser la variable a. Voilà comment : - Code:
-
var length, str; length = string_length(argument0); str = "";
for (i = 1; i<=length; i+=1) { str += string_char_at(argument0,i) if (i != length && (length - i) mod 3 == 0) // i != length sinon il pourrait y avoir une virgule à la fin comme j'expliquais : "123,456,789,") { str += ","; } }
return str;
Dernière édition par GrandeLangue le Mar 27 Aoû 2013 - 21:08, édité 2 fois |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 20:53 | |
| Eh beh Franchement gg j'aurai pas pu le faire tout seul ( alors qui faudrait ) J'ai vraiment une toute dernière question, après je te tiens plus la jambe ( xD ) j'ai dis plus haut que ma variable possédait un . ( par exemple 15441.15 ) donc pour éviter que ça me fasse 1,854,.89 par exemple j'ai tenté de faire - Code:
-
if (a mod 3 == 0 && a != string_length(argument0) && a != (string_length(argument0) - string_length(argument0)) - 2) En essayant de m'inspirer de ce que tu as fait pour supprimer la dernière , donc je retourne la longueur de argument0 je la soustrais à... Ok je viens juste de me rendre compte de mon erreur en écrivant ce que je voulais savoir xD Enfaites le calcule fait - Code:
-
argument0 - argument0 donc 0 puis - 2 or la première virgule qui se trouve après le . se trouve à +3 Donc - Code:
-
if (a mod 3 == 0 && a != string_length(argument0) && a != (string_length(argument0) - string_length(argument0)) + 3 ) et ça résous le soucis de cette virgule inutile aussi ! Je sais que tu le savais déjà mais je l'écris si jamais quelqu'un d'autre en aurait besoin En tout cas un grand merci pour toute ton aide et à ceux qui ont participé au sujet, vraiment merci, et désolé de vous avoir dérangé
Dernière édition par Mamie Wawa le Mar 27 Aoû 2013 - 21:20, édité 1 fois |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 23:15 | |
| Si je suis absent un moment, c'est soi parce que : - je me suis pendu haut et court sur l'arbre de ma bêtise. - le balai a du mal à passer. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mar 27 Aoû 2013 - 23:35 | |
| |
| | | D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mer 28 Aoû 2013 - 11:16 | |
| - Citation :
- a != (string_length(argument0) - string_length(argument0)) + 3
Faut qu'on m'explique là ._. Sauf énorme bug, et GM étant monothread, c'est pas équivalent à (a != 3) ? Sinon, solution simple de GrandeLangue avec l'insertion en début de chaîne, cependant ça peut avoir un impact sur les performances (décalage en mémoire de tout le contenu de la chaîne). |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: [RESOLU] Séparation d'un nombre ? Mer 28 Aoû 2013 - 14:09 | |
| Oui ça marche aussi enfin bon faut pas chercher, j'aime bien faire des calculs inutile xD |
| | | Contenu sponsorisé
| Sujet: Re: [RESOLU] Séparation d'un nombre ? | |
| |
| | | | [RESOLU] Séparation d'un nombre ? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |