Simulation d'une roulette qui tourne

Soyez le premier à donner votre avis sur cette source.

Vue 8 327 fois - Téléchargée 409 fois

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 / Exemple :


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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
ok courrage :)

@+
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Lol, oui je vois très bien ce que tu veux dire.

Même si je ne vais pas faire un cas pour chaque numéro, oui je dessinerai un truc qui identifie sur le tapis le numéro gagnant, mais comme je te l'ai dis, je ne vais pas faire ça pour les autres trucs, parce que c'est pas comme ça que l'on fait normalement :) (normalement, le croupier annonce ce genre de chose et place un truc sur le numéro).C'est pour ça que je compte l'afficher en complément en titre de la fenetre.Sinon, un petit /Drawfill qui colorirait (coloriserai?) le fond de la case en question, je vais voir, mais bon, ya du taff avec tout ça, j'ai normalement un autre projet de jeu a réalisé...
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
dsl pour la note j'ai pas mis j'ai dus tapé une touche par erreur :/
Messages postés
882
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
je vois ce que tu dis mais tu a dejà fais le grand travail WIMS c'est pas un petit truc que tu va laissé tombé gar
je ne connais pas trop en picwin mais je pense qu'il y a position dans un @win alors si tu met une condition quelque chose comme ça par exemple

if (rollconv == 32) {
drawrect -r @roulette [couleur] "epaisseur" " sur le tapis"
drawrect -r @roulette [couleur] "epaisseur" " sur le tapis"
drawrect -r @roulette [couleur] "epaisseur" " sur le tapis"
drawtext -r @roulette [couleur] " sur le tapis"
numero gagnant 32 ROUGE PAIR
}
elseif (rollconv == 13) {
drawrect -r @roulette [couleur] "epaisseur" " sur le tapis"
drawrect -r @roulette [couleur] "epaisseur" " sur le tapis"
drawrect -r @roulette [couleur] "epaisseur" " sur le tapis"
drawtext -r @roulette [couleur] " sur le tapis"
numero gagnant 13 NOIR IMPAIR
}
ect..
}

ça va etre plus beau d'avoir sur le tapis des ptit rectangles qui affichent le resultat aussi que d'avoir le resultat rien qu'en titre de fenetre
tu vois un peu ce que je voulais dire?

c'est juste un avis a toi de voir c'est ton code :)
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Oui, sauf que "l'effet" quel qu'il soit indiquera sur le tapis vert le numéro qui est sortis, les "chances" (sa s'apelle comme ça je crois, genre rouge/noir, pair/impair) seront donnée mais pas sur le tapis, surement en titre de fenetre :)
Afficher les 41 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.