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
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : ON RAWMODERE : ON RAWMODE par WorldDMT
Cliquez pour lire la suite par WorldDMT AVERTISSMENT ET KIKKAVERTISSMENT ET KIKK par mouhcine951990
Cliquez pour lire la suite par mouhcine951990
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|