|
Posté le 02-04-2014 à 19:31 | #
|
Bonsoir !
J'utilise un sous-programme pour insérer le nom d'une attaque dans une chaîne de caractères, étant donné que j'ai 4 attaques à afficher j'utilise une boucle "for", mais passer 4 fois par ce sous-programme devrait considérablement ralentir l'affichage des dites attaques. (J'écris "devrait" car je n'ai pas encore testé cet affichage, mais en ayant une quarantaine possibles, j'imagine que ce ne sera pas de l'instantané.)
Ma question est donc, avec ce code :
""→Str 1
While Not StrLen(Str 1)
A=1⇒"..."→Str 1
A=2⇒"..."→Str 1
...
A=46⇒"..."→Str 1
WhileEnd
Admettons que A vaille 1, est-ce que la boucle va détecter que la chaîne de caractère a été remplie et va directement aller au WhileEnd dès la première ligne, ou alors il va tout de même vérifier toutes les autres valeurs de A ? J'aimerais éviter de mettre des "StrLen(Str 1)⇒Return" à la fin de chaque ligne, même en assignant StrLen à une variable ce ne serait absolument pas optimisé. x)
Voilà voilà ! |
|
|
Posté le 02-04-2014 à 19:35 | #
|
La boucle va vérifier toutes les valeurs de A, même si A=1.
Pour éviter cela, tu dois mettre :
""→Str 1
While Not StrLen(Str 1)
If A=1
Then "..."→Str 1
Break
IfEnd
If A=2
Then "..."→Str 1
Break
IfEnd
...
If A=46
Then "..."→Str 1
Break
IfEnd
WhileEnd
Ainsi, dès que la condition A=X sera vérifiée, la boucle While s'arrêtera. |
|
|
Posté le 02-04-2014 à 19:41 | #
|
Ça me paraît assez lourd, je vais essayer sans boucle et je verrai ce que ça donne en vitesse d'affichage.
Merci bien, bonne soirée. |
|
|
Posté le 02-04-2014 à 19:43 | #
|
De rien, d'ailleurs je ne vois pas pourquoi tu veux mettre une boucle While alors qu'une simple condition aurai suffit...
Si tu arrives au WhileEnd c'est qu'aucune valeur de A ne correspond, donc il n'y a aucun intérêt à revérifier si une valeur correspond .
Et ça éviterai aussi de mettre les Break. |
|
|
Posté le 02-04-2014 à 20:02 | #
|
Je voulais mettre une boucle While car je pensais que si la condition était brisée, le programme allait directement à la fin de la boucle, et cela aurait pu me faire gagner du temps, mais pour le coup il est vrai qu'elle est inutile ! (Cependant les "Break" seraient changés en "Return".) |
|
|
Posté le 02-04-2014 à 21:39 | #
|
C'est un peu lourd comme code, tu devrais mettre tous les noms d'attaque en une seule Str et extraire celui que tu veux en fonction de A, et ce à l'aide des fonctions StrMid ou Strsrc |
|
|
Posté le 02-04-2014 à 21:42 | #
|
Quand tu as une grande suite de condition, pour améliorer les performances tu peux... rajouter des conditions
Mais intelligemment évidement ! Comme ça :
if A<=5
ThenA=1⇒"..."→Str 1
A=2⇒"..."→Str 1
A=3⇒"..."→Str 1
A=4⇒"..."→Str 1
A=5⇒"..."→Str 1
IfEnd
if A > 5
Then A=6⇒"..."→Str 1
A=7⇒"..."→Str 1
A=8⇒"..."→Str 1
A=9⇒"..."→Str 1
A=10⇒"..."→Str 1
...
En fait tu sépares tes conditions en plusieurs gros blocs, ainsi la calculette ne va pas tester toutes les conditions. |
|
|
Posté le 03-04-2014 à 00:47 | #
|
A l'origine je voulais en effet mettre tous les noms d'attaques dans une seule chaîne de caractères, mais la liste dépasse 255 caractères. Je comptais mettre le numéro correspondant à l'attaque devant le nom, ça donnerait "1Charge2Rugissement.." et ça faciliterait grandement la recherche. Je vais essayer de creuser de ce côté-là car il est vrai que le code tel que je l'ai rédigé précédemment fait 812 octets !
Par contre on ne peut pas faire "Str S" c'est-à-dire utiliser une chaîne de caractères S en faisant varier la variable. Du moins je n'ai pas trouvé comment faire vu que la calculatrice me sort une erreur argument. x)
-------------------------
Cette idée est très bonne, je la garde ! Merci. |
|
|
Posté le 03-04-2014 à 06:27 | #
|
Malheureusement, ce n'est pas possible: l'argument que tu passes à "Str" ne peut être qu'un constante entière.
Et puis, les fonctions sur les chaînes de caractères sont très lentes.
|
|
|
Posté le 03-04-2014 à 14:32 | #
|
@Therakou : C'est une bonne idée de séparer les attaques par des chiffres mais si tu dépasses 9 (si tu atteins des nombres à deux chiffres), tu risques de te compliquer la vie. Ce que je veux dire, c'est que tu auras de bons résultats si tu utilises des caractères plutôt que des nombres pour séparer les attaques.
@Lephenixnoir : très juste, on ne peut malheureusement pas mettre une variable comme argument d'une chaîne de caractère. Par contre je ne vois pas ce qui te fais dire que les fonctions qui leur sont associées sont lentes... Tout dépend à quoi tu les compare. |
|