Accueil > > > SIMULATION D'UNE ROULETTE QUI TOURNE
SIMULATION D'UNE ROULETTE QUI TOURNE
Information sur la source
Description
Ce tout petit code simule donc un roulette qui tourne et qui finis par s'arrêter.J'ai fait ça pour m'amuser, mais je trouve ça plutôt réussis et ça peux toujours donner des idées a quelqu'un, voir même l'inspirer.Le code a bien évoluer depuis, on pourra bientot jouer.
Source
- alias roulette {
- ;vitesse initial, qui durera un certain temps
- hadd -m roulette angle 12
- ;si l'on clique sur la fenetre, cela doit relancer le code sans fermer la fenetre
- ;et sans remettre a zero la position, de la roulette (effet réel)
- if (!$1) {
- ;tout ceci n'est que l'initialisation si la fenetre n'est pas ouverte
- window -c @roulette
- window -c @rouletteb
- window -pdof @roulette -1 -1 776 350
- window -phdf @rouletteb -1 -1 350 350
- drawpic @rouletteb 0 0 $qt($scriptdirroulette.png)
- drawpic @roulette 351 0 $qt($scriptdirtapis.gif)
- }
- ;Ce double timer est utilisé pour pouvoir crée un timer a delai aléatoire
- ;ce timer, qui se lance qu'une seul fois au bon d'un temps aléatoirement
- ;permet de commencer a décrémenter la vitesse de rotation
- ;-h permet d'executer immediatement le timer
- .timer -h 1 0 .timer -h 1 $!r(900,1500) hadd -m roulette candec 1
- .timer -h 1 0 roll
- }
-
- alias -l roll {
- ;si l'on doit décrémenter, alors on le fait : encore un double timer qui lance un seul timer aléatoire
- if ($hget(roulette,candec)) .timer -mo 1 10 .timerollb $!+ $!ticks -om 1 $!r(900,2300) hdec -m roulette angle $!gettok(0.1:0.05:0.025:0.0125,$r(1,4),58)
- ;ici, si la roulette ne tourne plus, on envoie un signal avec le résultat de $rollconv, dont le param est le dernier angle parcouru
- ;on coupe les derniers timer qui pourrait encore décrémenter la vitesse, et on stop la routine pour pas qu'elle se relance
- if ($hget(roulette,angle) <= 0) {
- .signal -n roulette $rollconv($hget(roulette,roll))
- .timerollb* off
- return
- }
- ;on incrémente l'angle de rotation total avec l'angle actuel, c'est ce qui permet de donner l'effet de rotation continu a la roulette
- hinc -m roulette roll $hget(roulette,angle)
- ;ici, on applique betement le buffer, le buffer est une fenetre caché qui contient l'image de base, on la copie dans notre fenetre
- drawcopy -n @rouletteb 0 0 350 350 @roulette 0 0
- ;et ici, on fait tourné l'image de base de l'angle total parcouru
- drawrot -nmcb @roulette 0 $hget(roulette,roll) 0 0 350 350
- ;ici on dessine le tapis de la roulette, qui sera surement utilisé plus tard
- drawpic -n @roulette 351 0 $qt($scriptdirtapis.gif)
- ;on dessine le délimiteur, celui qui indique le numéro tombé
- drawline -n @roulette 7 1 40 40 70 70
- ;on rafraichi la fenetre
- drawdot @roulette
- ;on relance l'alias le plus vite possible
- .timerollc -ho 1 0 roll
- }
-
- menu @roulette {
- ;si on clique, il ne faut pas reseté l'angle total parcouru
- sclick: unloroll 1 | roulette 1
- }
-
- alias unloroll {
- ;si $1 n'existe pas, alors on doit tout supprimé/fermé
- ;sinon, on doit gardé l'angle total parcouru
- if (!$1) { window -c @rouletteb | if ($hget(roulette)) hfree roulette }
- .timeroll* off
- if ($hget(roulette,candec)) hdel roulette candec
- }
- on *:close:@roulette:unloroll
-
- ;et la modif principale
- alias rollconv {
- ;stocker l'ordre des numéros
- var %table 0 32 15 19 4 21 2 25 17 34 6 27 13 36 11 30 8 23 10 5 24 16 33 1 20 14 31 9 22 18 29 7 28 12 35 3 26
-
- ;les calculs
- var %i = 315 - $calc($1 % 360)
- if (%i < 0) var %i = 360 + %i
- echo -a $!1 : $1
- echo -a $(%i,0) : %i
- echo -a $!replace : $replace($floor($calc( ( ( %i + 4.864865) / 9.72973) + 1) ),38,1)
- echo -a $!gettok : $gettok(%table,$replace($floor($calc( ( ( %i + 4.864865) / 9.72973) + 1) ),38,1),32)
- return $gettok(%table,$replace($floor($calc( ( ( %i + 4.864865) / 9.72973) + 1) ),38,1),32)
- }
-
- on *:signal:roulette:renwin @roulette @roulette $1 | set %aléaroll %aléaroll $1
alias roulette {
;vitesse initial, qui durera un certain temps
hadd -m roulette angle 12
;si l'on clique sur la fenetre, cela doit relancer le code sans fermer la fenetre
;et sans remettre a zero la position, de la roulette (effet réel)
if (!$1) {
;tout ceci n'est que l'initialisation si la fenetre n'est pas ouverte
window -c @roulette
window -c @rouletteb
window -pdof @roulette -1 -1 776 350
window -phdf @rouletteb -1 -1 350 350
drawpic @rouletteb 0 0 $qt($scriptdirroulette.png)
drawpic @roulette 351 0 $qt($scriptdirtapis.gif)
}
;Ce double timer est utilisé pour pouvoir crée un timer a delai aléatoire
;ce timer, qui se lance qu'une seul fois au bon d'un temps aléatoirement
;permet de commencer a décrémenter la vitesse de rotation
;-h permet d'executer immediatement le timer
.timer -h 1 0 .timer -h 1 $!r(900,1500) hadd -m roulette candec 1
.timer -h 1 0 roll
}
alias -l roll {
;si l'on doit décrémenter, alors on le fait : encore un double timer qui lance un seul timer aléatoire
if ($hget(roulette,candec)) .timer -mo 1 10 .timerollb $!+ $!ticks -om 1 $!r(900,2300) hdec -m roulette angle $!gettok(0.1:0.05:0.025:0.0125,$r(1,4),58)
;ici, si la roulette ne tourne plus, on envoie un signal avec le résultat de $rollconv, dont le param est le dernier angle parcouru
;on coupe les derniers timer qui pourrait encore décrémenter la vitesse, et on stop la routine pour pas qu'elle se relance
if ($hget(roulette,angle) <= 0) {
.signal -n roulette $rollconv($hget(roulette,roll))
.timerollb* off
return
}
;on incrémente l'angle de rotation total avec l'angle actuel, c'est ce qui permet de donner l'effet de rotation continu a la roulette
hinc -m roulette roll $hget(roulette,angle)
;ici, on applique betement le buffer, le buffer est une fenetre caché qui contient l'image de base, on la copie dans notre fenetre
drawcopy -n @rouletteb 0 0 350 350 @roulette 0 0
;et ici, on fait tourné l'image de base de l'angle total parcouru
drawrot -nmcb @roulette 0 $hget(roulette,roll) 0 0 350 350
;ici on dessine le tapis de la roulette, qui sera surement utilisé plus tard
drawpic -n @roulette 351 0 $qt($scriptdirtapis.gif)
;on dessine le délimiteur, celui qui indique le numéro tombé
drawline -n @roulette 7 1 40 40 70 70
;on rafraichi la fenetre
drawdot @roulette
;on relance l'alias le plus vite possible
.timerollc -ho 1 0 roll
}
menu @roulette {
;si on clique, il ne faut pas reseté l'angle total parcouru
sclick: unloroll 1 | roulette 1
}
alias unloroll {
;si $1 n'existe pas, alors on doit tout supprimé/fermé
;sinon, on doit gardé l'angle total parcouru
if (!$1) { window -c @rouletteb | if ($hget(roulette)) hfree roulette }
.timeroll* off
if ($hget(roulette,candec)) hdel roulette candec
}
on *:close:@roulette:unloroll
;et la modif principale
alias rollconv {
;stocker l'ordre des numéros
var %table 0 32 15 19 4 21 2 25 17 34 6 27 13 36 11 30 8 23 10 5 24 16 33 1 20 14 31 9 22 18 29 7 28 12 35 3 26
;les calculs
var %i = 315 - $calc($1 % 360)
if (%i < 0) var %i = 360 + %i
echo -a $!1 : $1
echo -a $(%i,0) : %i
echo -a $!replace : $replace($floor($calc( ( ( %i + 4.864865) / 9.72973) + 1) ),38,1)
echo -a $!gettok : $gettok(%table,$replace($floor($calc( ( ( %i + 4.864865) / 9.72973) + 1) ),38,1),32)
return $gettok(%table,$replace($floor($calc( ( ( %i + 4.864865) / 9.72973) + 1) ),38,1),32)
}
on *:signal:roulette:renwin @roulette @roulette $1 | set %aléaroll %aléaroll $1
Conclusion
Le code utilise donc /drawrot, cette command a été amélioré récement afin d'aller relativement plus vite, ayez la version 6.32 minimum afin d'avoir un résultat correct.Téléchargez le Zip pour avoir les images, mettez les fichier dans un même repertoire et loadez le .mrc. Lancer l'animation avec /roulette, vous pouvez cliquer dans la fenetre pour relancer l'animation sans remettre la position de la roulette a zero. Merci beaucoup a versus pour son aide.
Historique
- 01 août 2008 21:00:04 :
- Mauvaise version du code et j'ai aussi amélioré le code...
- 08 août 2008 03:36:08 :
- Refonte du code qui n'étais en fait pas vraiment juste, l'aléatoire a été entierement refait.un algo permettant de récupéré le nombre sortis a été fait.La qualité graphique est également meilleur.Le code est commenté pour ceux que sa interesse.
- 09 août 2008 19:38:42 :
- deux trois bricoles
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Roulette [ par Princedelavil ]
Bonjour a tous :) Voila j'ai chercher une remote pour faire une roulette (russe): on *:text:*: { if $1 == !roulette { say bla bla bla say bl
Petit soucis de drawrot [ par KiNdErMaXi ]
Déja, imaginons un petit bonhomme dessiné en /drawpicIl a subitement envie de faire un salto ! Je fais donc : /drawrot -m @l 
|
Derniers Blogs
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : COULEUR TEXTRE : COULEUR TEXT par WorldDMT
Cliquez pour lire la suite par WorldDMT
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|