Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Erreur lors d'une boucle for ?
BulitoEn ligneMembrePoints: 106 Défis: 3 Message

Erreur lors d'une boucle for ?

Posté le 22/10/2019 20:18

Bonjour, j'essaie de créer un jeu snake, mais pour l'instant, je veux juste créer une barre qu avance (sans aucune intervention de l'utilisateur) et qui s'efface au fur et à mesure pour qu'elle soir d'une taille de 20px.
Voici le code en texte :
'ProgramMode:RUN
ViewWindow 1,127,0,1,63,0
20->L
1->A
Do
For A->X To 20 Step 1
Text 50,60,A
PxlOn 20,X◢
Next
X-19->A◢
Text 50,1,X◢
Text 50,30,A◢
PxlOff 20,A
LpWhile 1

Il y a des Text un peu partout, c'est pour le débugage. Visiblement, la variable descend et monte de 10 en 10, sans raison...

Sinon, pour ceux qui veulent tester, j'ai joint le fichier.

PS: J'ai une casio graph 35+EII

Fichier joint


LephenixnoirHors ligneAdministrateurPoints: 16384 Défis: 140 Message

Citer : Posté le 22/10/2019 20:33 | #


Certaines fonctions de dessin, notamment PxlOn, modifient les variables X et Y.

Solution : utilise une autre variable pour ta boucle
BulitoEn ligneMembrePoints: 106 Défis: 3 Message

Citer : Posté le 22/10/2019 21:16 | #


Ah, c'est donc ceci les changements non voulus de variables...
Merci !


Edit : Je viens d'essayer mais ce n'est pas ça, j'ai utilisé les variables B, ou S à la place de la variable X, mais ça me fait le même bug, avec un changement de variable inattendu...

Ajouté le 22/10/2019 à 21:36 :
En fait, je me demande si ça se voit un edit...
J'ai essayé avec 4 variables différentes, mais ça ne change rien, d'autres idées ?
Commence à faire des jeux
LephenixnoirHors ligneAdministrateurPoints: 16384 Défis: 140 Message

Citer : Posté le 22/10/2019 21:45 | #


Je pense que la boucle marche, mais le programme a d'autres problèmes. D'abord dans "For A→X To 20 Step 1" ta position est limitée à 20. Si tu veux que le serpent avance ce serait plutôt quelque chose comme "To A+19".

Ensuite, au moment où ta boucle redémarre, tu exécutes PxlOff 20,A et dès le début du tour suivant tu exécutes A→X (au début de la boucle) puis PxlOn 20,X. Tu ré-affiches donc le pixel que tu as effacé.

Enfin, puisque la boucle For s'arrête à 20, à la fin du premier tour de la boucle While, A est ramené à 1 par l'instruction "X-19→A", mais c'était sa valeur initiale. Ta boucle fait bien 20 tours mais comme les bornes sont incluses il faut soustraire 18 sinon A n'augmente pas.
BulitoEn ligneMembrePoints: 106 Défis: 3 Message

Citer : Posté le 23/10/2019 08:06 | #


Merci, le trait avance, mais malheureusement très lentement, je pense que c'est à cause de la vitesse de la calculatrice et que je ne peux pas résoudre le problème, si ?
Commence à faire des jeux
LephenixnoirHors ligneAdministrateurPoints: 16384 Défis: 140 Message

Citer : Posté le 23/10/2019 08:51 | #


Le programme tel qu'il est écrit ne peut pas aller plus vite, mais tu peux écrire un programme plus court qui fait la même chose.

Par exemple, actuellement tu redessines tout le serpent à chaque fois, alors qu'il suffit de dessiner le nouveau pixel noir et d'effacer le plus ancien.
BulitoEn ligneMembrePoints: 106 Défis: 3 Message

Citer : Posté le 24/10/2019 09:59 | #


Oui, en effet, nouveau script, donc qui va beaucoup plus vite, merci !
Commence à faire des jeux
Legagoux
Statut : Invité

Citer : Posté le 24/10/2019 10:45 | #


Je ne sais pas si c'est ca mais je crois que lorsque tu effectue la boucle for ta variable X n'est modifie que dans cette boucle et que dans ton calcul x est donc egale a 0 et par consequent A est egale a -19. Cela n est qu une hypothese mais je pense que tu devrais verifier
BulitoEn ligneMembrePoints: 106 Défis: 3 Message

Citer : Posté le 24/10/2019 10:47 | #


Avec un nouveau script, c'est modifié, mais non, la variable passait par des valeurs comme 31,41,51... (de 10 en 10, je ne lui ai jamais demandé du 10 en 10 !!)
Commence à faire des jeux

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 56 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd