Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Le Multi DrawStat
Ninestars En ligne Membre Points: 2413 Défis: 22 Message

[Tutoriel] Le Multi DrawStat

Posté le 10/01/2016 19:23

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: 1888 Défis: 0 Message

Citer : Posté le 13/01/2016 20:56 | #


Mais avec tes découverts, on se rapproche de plus en plus de quelque chose d'accessible !
Eltoredo Hors ligne Modérateur Points: 4299 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: 2370 Défis: 20 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 Labélisateur Points: 11542 Défis: 176 Message

Citer : Posté le 31/01/2016 11:51 | #


Fait (tutoriel n°63)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars En ligne Membre Points: 2413 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 Labélisateur Points: 11542 Défis: 176 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
Ninestars En ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 01/02/2016 18:50 | #


Ok parfait.
Lephenixnoir En ligne Administrateur Points: 21029 Défis: 143 Message

Citer : Posté le 17/02/2016 14:19 | #


J'ai passé le topic en post-it
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 En ligne Membre Points: 2413 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 Hors ligne Rédacteur Points: 1743 Défis: 13 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 En ligne Membre Points: 2413 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: 1857 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 !
Mon blogBesoin 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 En ligne Administrateur Points: 21029 Défis: 143 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.

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 113 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