Forums Casio - Vos tutoriels et astuces

Index du Forum > Vos tutoriels et astuces > [Tutoriel] Le Multi DrawStat
Ninestars
Hors ligne
Membre
Points: 2129
Défis: 22
Message
Posté le 10/01/2016 19:23

[Tutoriel] Le Multi DrawStat :

Attention, ce tutoriel est complexe et se destine à ceux maîtrisant déjà le Super DrawStat.

Le Multi DrawStat n'est pas un remplacant du Super DrawStat, mais un nouvel outil de dessin ultra rapide en Basic.
Il n'est pas forcement plus rapide, mais offre une approche différente pour dessiner.
Il se base sur une nouvelle logique de dessin offrant d'autres possibilités.

Quelle est la différence avec le Super DrawStat ?
Au lieu d'avoir deux List qui enregistrent le sprite, on a maintenant deux expressions qui enregistrent la façon de dessiner le sprite.
La nuance peut paraitre floue, mais voyons cela tout de suite.


Initialisation :
On commence par initialiser le ViewWindow en rajoutant MIN, MAX, PAS.
ViewWindow 1,127,0,1,63,0,0,1,1
Cette fois, le paramètrage est fixe, c'est toujours le même.


Définition d'un sprite :
Pour définir un sprite, nous allons définir la "façon" dont la calculatrice va le dessiner.
Partons de cette exemple :

On le décompose naturellement comme celà :

On voudrait tracer un trait bleu, puis un trait orange, puis un point vert et un autre point jaune.
Commencons par le trait bleu d'origine (0;0). Il se prolonge de 4 vers la droite et 0 vers le haut.
Nous allons traduire cela par :
{0+4T}
{0+0T}

Le trait orange d'origine (3;2). Il se prolonge de 0 vers la droite et 2 vers le haut.
Nous allons traduire cela par :
{3+0T}
{2+2T}
Voilà, je pense que vous avez pigé le principe.

Pour les points c'est même chose mais avec une prolongation nulle
D'où pour le point vert
{0}
{3}

Et le point jaune
{5}
{3}



Utilisation :
Nous allons toujours utiliser la commande
Graph(X,Y)=(

Graph(X,Y) est une commande trouvable à l'adresse : SHIFT F4 F5 F3
En reprennant l'exemple du dessus nous allons écrire :
Graph(X,Y)=({0+4T, 3+0T, 0, 5}, {0+0T, 2+2T, 3, 3})

En simplifiant un peu
Graph(X,Y)=({4T,3,0,5}, {0,2+2T,3,3})

Entre les premières accolades {...} nous avons les coordonnées sur x de nos éléments à dessiner. Et entre les deuxièmes accolades, les coordonnées sur y.


Comment ça marche ? :
En fait Graph(X,Y) va lire la première valeur de chaque accolade pour T=0 puis pour T=1 (voilà la raison du paramètrage de ViewWindow) pour obtenir les coordonnées de deux points qui définissent le segment puis trace le trait entre les deux.
Ensuite Graph(X,Y) va lire la deuxième valeur de chaque accolade, et ainsi de suite.


Pour aller plus loin :
En réalité, on remarque que l'on utilise des structures entre accolade {...}, ce sont donc par nature des List.
Ainsi pour décaler notre sprite de (I;J) on peut faire des additions
64->I
32->J
Graph(X,Y)=( I+{4T,3,0,5}, J+{0,2+2T,3,3} )


Mais ? Tu viens de dire que ce sont des List, alors pourquoi on ferait pas
{4T,3,0,5}->List 1
{0,2+2T,3,3}->List 2
Graph(X,Y)=(List 1, List 2)

Le problème si on écrit {4T,3,0,5}->List 1 c'est que l'expression 4T va être calculée puis enregistrée dans List 1. Donc on perd l'expression dont a besoin Graph(X,Y) pour déterminer les deux points qui formeront le segment à tracer...
Par contre si nous avons que des points à tracer, et pas de traits (donc pas de T) , alors c'est possible.
{4,3,0,5}->List 1
{0,2,3,3}->List 2
Graph(X,Y)=(List 1, List 2)
Cette commande va simplement dessiner les points. On peut d'ailleurs optimiser en mettant MAX à 0 puisque T na pas besoin de changer.


Voyons un autre exemple : nous allons remplir l'écran en noir en 1,10s
ViewWindow 1,127,0,1,63,0,0,1,1
Seq(X,X,0,63,1)->List 1    // on fabrique la liste {0,1,2,...63}
                          // chaque ligne horizontale de l'écran
Graph(X,Y)=(127T,List 1)
Ici c'est un peu différent, on a pas d'accolades. Si on utilise des acolades, alors la fonction va aller lire terme par terme dans les acolades. Si il y n'y a pas d'acolade, elle va lire plusieurs fois la même expression.
Donc sur x, elle va lire plusieurs fois l'expression 127T et sur y chaque terme de l'acolade.
En gros Graph(X,Y) va commencer comme ça :
T=0 premier point (0,0) (127T = 0, et premier élément de List 1 = 0)
T=1 second point (127,0) (127T = 127, et premier élément de List 1 = 0)
trace un trait horizontal en 0
T=0 premier point (0,1) (127T = 0, et deuxième élément de List 1 = 1)
T=1 second point (127,1) (127T = 127, et deuxième élément de List 1 = 1)
trace un trait horizontal en 1
Et ainsi de suite sur tout l'écran.



Matt36230
Hors ligne
Membre
Points: 1868
Défis: 0
Message
Dernier message de la page précédente :Posté le 13/01/2016 20:56 |
Mais avec tes découverts, on se rapproche de plus en plus de quelque chose d'accessible !
----------------------------------



Pages: Précédente | 1, 2

Eltoredo
Hors ligne
Modérateur
Points: 4291
Défis: 35
Message
Citer : Posté le 14/01/2016 09:31 | #
"En faisant un peu n'importe quoi" Il faut un peu s'y connaître alors En plus, tu as nommé ta propre technique et ça rend plutôt bien !
----------------------------------
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
-florian66-
Hors ligne
Ancien rédacteur
Points: 2296
Défis: 19
Message
Citer : Posté le 27/01/2016 18:28 | #
Il faudra ajouter ce tutoriel avec ceux présents dans la liste : Divers Tutoriels, trucs et astuces !
Ça serait très bien
----------------------------------
In Arch, I trust ! And you ?
Dark storm
Hors ligne
Membre d'honneur
Points: 10694
Défis: 174
Message
Citer : Posté le 31/01/2016 11:51 | #
Fait (tutoriel n°63)
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Ninestars
Hors ligne
Membre
Points: 2129
Défis: 22
Message
Citer : Posté le 01/02/2016 18:47 | #
Super dark Storm !
Si je modifie le topic ici, le lien que tu viens de donner le sera aussi ?
----------------------------------
Dark storm
Hors ligne
Membre d'honneur
Points: 10694
Défis: 174
Message
Citer : Posté le 01/02/2016 18:48 | #
Oui, c'est linké sur ce topic.
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Ninestars
Hors ligne
Membre
Points: 2129
Défis: 22
Message
Citer : Posté le 01/02/2016 18:50 | #
Ok parfait.
----------------------------------
Lephenixnoir
Hors ligne
Administrateur
Points: 13181
Défis: 136
Message
Citer : Posté le 17/02/2016 14:19 | #
J'ai passé le topic en post-it
----------------------------------
Rise.
Programateur
Hors ligne
Membre
Points: 222
Défis: 10
Message
Citer : Posté le 19/02/2016 22:54 | #
Je n'ai pas encore essayé, mais ça a l'air génial !
C'est beaucoup plus rapide que le super drawstat ?
----------------------------------
J'ai besoin de votre participation ici :
94%
Cliquer pour enrouler
Ninestars
Hors ligne
Membre
Points: 2129
Défis: 22
Message
Citer : Posté le 19/02/2016 23:15 | #
Ce n'est pas plus rapide, c'est équivalent en vitesse

Ajouté le 23/03/2016 à 11:14 :
Quelques petites corrections ici aussi.
----------------------------------
Zezombye
En ligne
Rédacteur
Points: 1534
Défis: 12
Message
Citer : Posté le 04/05/2016 06:21 | # | Fichier joint
V'la un générateur de multi drawstat pour ceux qui veulent (en PJ)
Entrez les coordonnées des points composant chaque ligne (le logiciel considère que chaque paire de points forme une ligne, donc si vous voulez mettre un point il faudra le mettre 2 fois) et ça vous génère le texte à taper.

Pratique quand on a pas envie de passer 4 h à débugger les sprites
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Ninestars
Hors ligne
Membre
Points: 2129
Défis: 22
Message
Citer : Posté le 04/05/2016 15:40 | #
Salut Zezombye, merci pour le partage
----------------------------------
Fekihs
Hors ligne
Membre
Points: 30
Défis: 0
Message
Citer : Posté le 24/04/2017 23:08 | #
j'ai besoin d'aide

Ajouté le 24/04/2017 à 23:09 :
sans faire des commentaires

Ajouté le 24/04/2017 à 23:09 :
commentairess*
Cakeisalie5
Hors ligne
Membre de CreativeCalc
Points: 1666
Défis: 10
Message
Citer : Posté le 24/04/2017 23:13 | #
N'hésites pas à te présenter dans le topic dédié, dans ce cas.
----------------------------------
Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
Darkteam24
Hors ligne
Membre
Points: 10
Défis: 0
Message
Citer : Posté le 09/02/2018 22:58 | #
J'ai essayé cette technique mais et me renvoit une erreur dimension :/ (curseur sur la ligne et juste avant le G)
Voici le code :

V-Win 1,127,0,63,1,0,0,10
Cls
Graph(X,Y)=({4T, 3, 0, 5},{0.2+2T,3.3})


Sachant que j'ai une casio graph 35 + e avec l'os de la 75 mais ça marchait pas avant non plus...
Merci d'avance

Lephenixnoir
Hors ligne
Administrateur
Points: 13181
Défis: 136
Message
Citer : Posté le 10/02/2018 08:19 | #
Pour mettre du code, utilise le bouton dans la barre d'outils, c'est plus lisible :

Du reste, quand tu utilises des listes explicites (avec des accolades), Graph(X,Y)=() va lire terme-à-terme les éléments des deux listes et les mettre en correspondance (le premier avec le premier, le deuxième avec le deuxième, et ainsi de suite). Du coup, AFAIK, ça ne peut pas marcher si tes deux listes ne sont pas de la même longueur.
----------------------------------
Rise.

Pages: Précédente | 1, 2

Index du Forum > Vos tutoriels et astuces > [Tutoriel] Le Multi DrawStat

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

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd