Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Astuce] Défilement sur Casio
Laghal Hors ligne Banni Points: 24 Défis: 0 Message

[Astuce] Défilement sur Casio

Posté le 27/02/2016 17:40

Bonjour ! Je suis parti pour vous présenter l'astuce la plus bête de l'histoire des astuces Casio

Sérieusement, cette astuce est tellement simple que ne la voir mentionnée nulle part sur ce forum m'a plutôt choqué. Peut-être que tout le monde est au courant, et donc je ne vais rien vous apprendre ; ou alors nous avons tous été bornés et pas fichu de voir ce qui était devant nos yeux depuis tout ce temps.

Je m'explique...

Ça vous dit un peu de storytelling ?
Voilà l'histoire du *eureka* de cette astuce. Je la met en spoiler parce que c'est du HS complet
L'histoire de cette astuce remonte aux cours de maths de ma classe de première. Comme d'habitude je glandouillais au fond de la salle sur ma calculatrice : j'essayais de programmer un jeu de course avec des Locate. Je voulais un truc simple et qui défile vite. A côté de moi un autre pote, très peu expérimenté, en faisait de même.
A un moment il relève la tête vers moi :
"Hey, mec, mon affichage avec les Locate ça marche pas je comprends pas ! Ça défile tout seul"
"Fais voir"
Et là je vois qu'il a mélangé l'affichage sans les Locate (les simples guillemets) avec celui avec les Locate, le tout dans un boucle infinie...
Je me souviens avoir regardé son programme pendant 30 bonnes secondes en me disant : "mais bordel oui, MAIS OUI C'EST GENIAL"
J'ai directement pensé à utiliser cette astuce pour le programme de course qui sera donné en fin de tuto.
Un sacré souvenir.


Bon, concrètement, l'astuce tient en une phrase :

Faire un boucle et mettre
""

dedans.

A quoi ça sert ? Et bien au bout de 7 affichages vides comme ça, l'écran se met à défiler à la verticale !

Un exemple ? Très bien :
Avec ce programme, on fait défiler n'importe quel message vers le haut !

[red]While[/red] [maroon]1[/maroon]
[b][blue]For[/blue][/b] [maroon]1[/maroon][b]→[/b]A [b][blue]to[/blue][/b] [maroon]7[/maroon]
[gray]""[/gray]
[b][blue]Next[/blue][/b]
[b][brown]Locate[/brown][/b] [maroon]1[/maroon],[maroon]7[/maroon],[gray]"Mon Message Lol"[/gray]
[red]WhileEnd[/red]


UNE SECONDE
La calculatrice n'affiche rien du tout
Vous en êtes sûr ?
Faites [AC] : le message est bien là. Il défile simplement tellement rapidement qu'il est quasiment impossible de le voir ! 8)

Pas convaincus ?
Ok, modifions le programme pour voir quelque chose !

[maroon]1[/maroon][b]→[/b]A
[red]While [/red] [maroon]1[/maroon]
[b][blue]Isz[/blue][/b] A
A=[maroon]19[/maroon]⇒[maroon]1[/maroon][b]→[/b]A
[gray]""[/gray]
[b][brown]Locate[/brown][/b] A,[maroon]7[/maroon],[gray]"SWAG"[/gray]
[red]WhileEnd[/red]


Vous devriez commencer à voir un balayage de l'écran, mais encore une fois c'est très, très rapide.

Et ?
...
Et c'est tout ! L'astuce comme je l'ai dit est très simple.

Mais l'utilité ?
Faites marcher votre imagination : tous les programmes avec un affichage en "Locate" et qui demandent un défilement vertical sont optimisables de cette manière.

Et pour connaître le position Y d'un caractère, ça ne devient pas trop compliqué ?
On peut simplement compter le nombre de fois que celui-ci est remonté en partant de sa position originelle. Ça reste léger en général !

L'exemple d'application concrète : voilà un simple programme de course (type "suivez le chemin"), très court, très rapide :

[b][blue]For[/blue][/b] [maroon]1[/maroon]→B [b][blue]To[/blue][/b] [maroon]7[/maroon]
[gray]""[/gray]
8→List [maroon]1[/maroon][B
[b][blue]Next[/blue][/b]
8→A~C
[b][blue]Isz[/blue][/b] C
[b][blue]While[/blue][/b] [maroon]3[/maroon]>Abs (C-3-List [maroon]1[/maroon][B-5
[gray]""[/gray]
A→List [maroon]1[/maroon][B
A+RanInt#(-1,[maroon]1[/maroon]
Ans+Not Ans-(Ans=[maroon]16[/maroon]→A
Getkey
C+(Ans=[maroon]27[/maroon])-(Ans=[maroon]38[/maroon]→C
[b][brown]Locate[/brown][/b] C,[maroon]1[/maroon],[gray]"▼[/gray]
[b][brown]Locate[/brown][/b] A,[maroon]7[/maroon],"◼     ◼
[b][blue]Isz[/blue][/b] B
[b][blue]WhileEnd[/blue][/b]
B-9


172 octets chez moi !

Et voilà à quoi ça ressemble en vidéo



Voilà, j'espère que vous aurez appris quelque chose !
N'hésitez pas à me dire si vous connaissiez déjà l'astuce ou non !


Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 27/02/2016 18:14 | #


1→A
Lbl 1
Isz A
A=19⇒1→A
""
Locate A,7,"SWAG"
Goto 1


Les Goto et les Lbl sont très affreux

Mieux vaut faire:
1→A
While 1
Isz A
A=19⇒1→A
""
Locate A,7,"SWAG"
WhileEnd
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Laghal Hors ligne Banni Points: 24 Défis: 0 Message

Citer : Posté le 27/02/2016 18:31 | #


Les Goto et les Lbl sont très affreux


J'en était entre sûr et totalement certain que cette remarque allait arriver.
Je vais peut-être être tout seul à me dresser contre la tendance du forum (que je regarde de loin depuis un petit moment, je connais vos habitudes de programmation), mais je n'ai jamais vu de problème à utiliser des Lbl et des Goto. Ça m'a même souvent permis d'optimiser grandement des programmes (oui oui, je suis sur un snake avec des Locate actuellement, et il va bientôt passer sous la barre des 300 octets, et je met quiconque au défi d'en faire autant sans Goto...)
Et puis je connais vos arguments :

Moins rapide qu'un while
Bon en l'occurence ici le programme est déjà tellement rapide qu'on s'en fiche totalement (vraiment)

Ça cause des problèmes une fois sur deux
Bof, il suffit de faire attention où on les met. Je dirais que c'est pas plus compliqué que de gérer les fonctions Isz et les Dsz qui font sauter l'instruction d'après si elles reçoivent 0 en valeur.

C'est moche
Les gens.
Vous préconisez de ne pas fermez les parenthèses. Soyez sérieux 5 secondes...

Trêve de plaisanterie.

Un retour sur l'astuce en elle-même serait la bienvenue en revanche
Sur un terrain clos, l'ingéniosité est requise.
Je suis allé acheter du pouvoir au Super-U mais il ne restait que du Cajoline.
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 27/02/2016 18:36 | #


tous les programmes avec un affichage en "Locate" et qui demandent un défilement sont optimisables de cette manière.

Alors là, ça reste à prouver
Plus sérieusement, je dis ça parce que le scrolling est souvent horizontal.
Tweaks : ||||| ||||
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 27/02/2016 18:38 | #


Bon en l'occurence ici le programme est déjà tellement rapide qu'on s'en fiche totalement (vraiment)


C'est vrai que là, ça ne se voit presque pas, mais si quelqu'un va utiliser ton astuce, il va croire que c'est la bonne solution pour les boucles infini et donc va potentiellement ralentir le programme

Bof, il suffit de faire attention où on les met.


Le mieux, c'est de pas faire attention et que ça buggue pas

Vous préconisez de ne pas fermez les parenthèses.


C'est pour optimiser la taille d'un programme. J'ajoute que la solution avec le while fait gagner un octet
Laghal Hors ligne Banni Points: 24 Défis: 0 Message

Citer : Posté le 27/02/2016 18:40 | #


Bon allez, je me soumets aux habitudes du forum, mais on ne m'enlèvera pas de la tête que les Lbl / Goto sont utilisables sur calculatrice
Sur un terrain clos, l'ingéniosité est requise.
Je suis allé acheter du pouvoir au Super-U mais il ne restait que du Cajoline.
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 27/02/2016 18:42 | #


Bien évidemment, tu oublie l'argument principal :
Les Goto et Lbl, ça passe pour un petit programme, comme un snake.
Mais dès que tes projets vont gagner en complexité, tout géré avec des Goto est impossible. Tu vas te perdre toi-même dans ton propre code. Si la communauté le déconseille, c'est bien pour une bonne raison.

Enfin, concernant la non-fermeture des parenthèses, c'est pour gagner de précieux octets (les ~64 Ko de la calculatrice se remplissent vite). Aucun but esthétique, mais pratique.
Lephenixnoir Hors ligne Administrateur Points: 24234 Défis: 170 Message

Citer : Posté le 27/02/2016 18:46 | #


Laghal a écrit :
Je vais peut-être être tout seul à me dresser contre la tendance du forum (que je regarde de loin depuis un petit moment, je connais vos habitudes de programmation), mais je n'ai jamais vu de problème à utiliser des Lbl et des Goto.

Ok, alors voici un argument que tu n'as pas l'air d'avoir entendu :
→ Ça casse la structure algorithmique.

Et on a beau dire, l'interpréteur Basic est séquentiel, et si tu sautes à l'intérieur d'une boucle sans être passé par l'instruction For ou While qui ouvre la boucle tu crées une vraie erreur qui se manifeste sous la forme d'une erreur syntaxe quand on tombe sur le Next ou le WhileEnd, facile à voir bien sûr.

Alors oui en Basic ça a peu d'influence, il suffit de faire attention où on les met et où ils tombent, à ne pas essayer de sauter en-dehors des limites de l'interpréteur. Ça optimise en place et parfois en vitesse. Certes ! Mais ça fout aussi en l'air la lisibilité.

Maintenant parlons un peu de langages plus complexes. En C, avec un goto, tu peux sauter d'une fonction à l'autre et remonter fallacieusement la pile des appels, tout ça pour foutre en l'air la pile et t'assurer une erreur à tous les coups. Sans compter que tu peux aussi exécuter des rts sur potentiellement n'importe quelle adresse et te mettre à exécuter de la mémoire aléatoire. Et ça se joue à pas grand-chose.

Bref, les seuls cas où les goto sont acceptables formellement est là où ils sont essentiels, par exemple pour créer des sortes de fonctions en Basic... ou en assembleur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Laghal Hors ligne Banni Points: 24 Défis: 0 Message

Citer : Posté le 27/02/2016 18:46 | #


Mais dès que tes projets vont gagner en complexité, tout géré avec des Goto est impossible. Tu vas te perdre toi-même dans ton propre code. Si la communauté le déconseille, c'est bien pour une bonne raison.


Ca reste pratique pour gagner des précieux octets. Aucun but de lisibilité, juste de l'opti.

Enfin, concernant la non-fermeture des parenthèses, c'est pour gagner de précieux octets (les ~64 Ko de la calculatrice se remplissent vite). Aucun but esthétique, mais pratique.


Dès que les conditions deviennent longues, c'est illisible et on s'y perd.


Je troll méchamment d'accord, et c'est HS.
Je suis d'accord dans l'idée, c'est juste que le refus systématique de la communauté à la vue du moindre Goto est un peu.. Excessif


Ajouté le 27/02/2016 à 18:50 :
Maintenant parlons un peu de langages plus complexes. En C, avec un goto, tu peux sauter d'une fonction à l'autre et remonter fallacieusement la pile des appels, tout ça pour foutre en l'air la pile et t'assurer une erreur à tous les coups. Sans compter que tu peux aussi exécuter des rts sur potentiellement n'importe quelle adresse et te mettre à exécuter de la mémoire aléatoire. Et ça se joue à pas grand-chose.


Je fais du C, je te remercie, et je sais très bien que les Goto en C sont sales, et pas adaptés... Mais parce que le terrain est différent.
De même que je n'irais pas tenter de me passer du slicing en Python, je m'adapte au langage. Sur calculatrice, utiliser des Goto dans certains cas spécifiques me parait encore convenable. Limite, mais convenable dans certains cas.

Cherchez pas vous ne me convaincrez pas. Au mieux vous me convaincrez qu'il y a une meilleure méthode dans un contexte spécifique, mais cherchez pas, ça fait plus de trois ans que traîner un peu (mine de rien) ici ne m'a pas convaincu, alors...
Sur un terrain clos, l'ingéniosité est requise.
Je suis allé acheter du pouvoir au Super-U mais il ne restait que du Cajoline.
Lephenixnoir Hors ligne Administrateur Points: 24234 Défis: 170 Message

Citer : Posté le 27/02/2016 18:53 | #


Laghal a écrit :
De même que je n'irais pas tenter de me passer du slicing en Python, je m'adapte au langage. Sur calculatrice, ça me parait encore convenable. Limite, mais convenable dans certains cas.

Je suis bien d'accord, mais pour une boucle de 10 lignes, franchement... si encore il s'agissait d'une grande astuce qui permettait d'optimiser la structure en profitant de pouvoir sauter sans exécuter des paquets de code pour revenir en arrière, je comprendrais, mais là le gain est faible par rapport à un While conventionnel.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 27/02/2016 18:53 | #


Laghal, depuis combien de programmes-tu ? Tu ne vas pas apprendre à un vieux comment optimiser ces programmes
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 27/02/2016 18:55 | #


Totoyo a écrit :
Laghal, depuis combien de programmes-tu ? Tu ne vas pas apprendre à un vieux comment optimiser ces programmes


Je dirais même plus: à un vieillard
Laghal Hors ligne Banni Points: 24 Défis: 0 Message

Citer : Posté le 27/02/2016 18:56 | #


Lephenixnoir a écrit :
Je suis bien d'accord, mais pour une boucle de 10 lignes, franchement... si encore il s'agissait d'une grande astuce qui permettait d'optimiser la structure en profitant de pouvoir sauter sans exécuter des paquets de code pour revenir en arrière, je comprendrais, mais là le gain est faible par rapport à un While conventionnel.


Contexte spécifique que j'ai modifié, et je ne cache que c'était fait exprès, pour vous piquer là où ça gratte.
Dans ce contexte, bien-sûr qu'un while vaut mieux qu'un Goto
Je n'ai pas raté mon coup.

Fin du HS svp ?

Sur un terrain clos, l'ingéniosité est requise.
Je suis allé acheter du pouvoir au Super-U mais il ne restait que du Cajoline.
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 27/02/2016 20:52 | #


Je sors du HS pour dire que cette astuce (que j'ai remarqué il y a peu) est génial 0_0. Je n'avais jamais pensé à l'utiliser comme ça (juste pour du scrolling de texte). En tout cas merci à toi
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 28/02/2016 10:50 | #


J'aime bien l'astuce, ça pourrait permettre d'accélérer Canyon sur Prism.

Sinon je ne sais pas comment vous faites pour trouver le courage de discuter avec un esprit si supérieur au notre, qui nous connait dans nos moindres détails, et dont la principale préoccupation est de provoquer notre réactance. Je me suis senti vaincu et impuissant dès les premiers messages ! Le 1e post sentait déjà la m*rde étant donnée sa taille, pour un astuce aussi simple.
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 28/02/2016 14:39 | #


J'avoue être assez étonné du fait que si peu de gens connaissent cette astuce

Je l'utilisais déjà en 2011 et à l'époque, il existait déjà sur le site plusieurs jeux l'utilisant...
Après je suppose que ça ne fait pas de mal de la mettre en évidence.
Un excellent tuto video qui vous explique comment transférer des fichiers de l'ordinateur vers la calculatrice et vice versa ma chaine youtube
mes jeux
mes jeux

Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games

Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 28/02/2016 14:41 | #


Btl a écrit :
J'avoue être assez étonné du fait que si peu de gens connaissent cette astuce

Moi de même, c'est pas transcendant comme astuce. Mais elle est adaptée à très peu de jeux je pense, beaucoup ont un scrolling horizontal et non vertical, ou maintiennent le décor et modifient seulement certains éléments.

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 167 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