|
Créer
par : Jean-Baptiste
Rouquier // jb.rouquier@excite.com
Une fois les temps par joueur entrés, on utilise deux touches : enter et <- (drop). enter sert à passer d'un joueur au suivant, drop permet de quitter le programme. Le programme termine après drop, ou lorsqu'un joueur a épuisé son temps (un bip est alors émis, si le flag -56 est à 0). Il laisse sur la pile les temps restants à chaque joueur, en secondes.
Le compte à rebours commence dès que le temps par joueur (ou celui du dernier joueur) est entré.
La phrase "0 pour préciser des temps différents" est prévue pour reprendre une partie interrompue (en ayant enregistré les temps de chaque joueur), ou pour accorder un handicap.
Du fait du langage RPL, un temps minimum est compté à chaque coup : environ 0,6 seconde.
Ce programme crée et détruit un répertoire nommé TCCDIR (qui ne doit donc pas exister avant) et remet le flag 1 à 0.
checksum : # 10288 d
octets : 1151,5 (1159 avec le nom 'TCC')
On peut ainsi choisir de supprimer un paragraphe qui affiche les temps de chaque joueur dès le début, mais qui ralentit le démarrage (il impose au premier joueur, pour son premier coup uniquement, de réfléchir au moins 2 secondes. Ceci est peu courant pour une ouverture). Les variables sont en minuscules pour plus de
lisibilité.
Les commentaires sont précédés de //.
%%HP: T(3)A(R)F(.);
\<< 'tccdir' CRDIR tccdir
PICT PURGE
1 CF
"Nombre de joueurs ?" "3"
//vous pouvez modifier cette valeur par défaut,
//ainsi que le 5 deux lignes plus loin
INPUT OBJ\->
"Minutes par joueur ?
(0 pour pr\233ciser des
temps diff\233rents)" "5"
INPUT TICKS 'clck' STO OBJ\-> 60 *
//TICKS démarre le compte à rebours
\-> nb tps
\<< 1 'j' STO
//c'est le numéro du joueur courant
//initialisation des temps dans j1, j2, ...
IF tps
THEN 1 nb
FOR i
tps "j" i + OBJ\-> STO
NEXT
ELSE 1 nb
FOR i
"minutes joueur " i + "5" INPUT
OBJ\-> 60 * "j" i + OBJ\-> STO
NEXT
TICKS 'clck' STO
END
//préparation de l'affichage...
//(vous pouvez demander à la HP d'écrire
//plus petit pour accepter plus de joueurs.)
{ # 0d # 0d } PVIEW
1 nb
FOR i
PICT
# 0d i 1 - 13 * R\->B 2 \->LIST
"Joueur " i + " :" + 1 \->GROB
REPL
NEXT
//affichage du temps de chaque joueur,
//paragraphe à supprimer éventuellement
1 nb
FOR i
PICT
# 43d i 1 - 13 * R\->B 2 \->LIST
"j" i + OBJ\->
DUP 60 / FLOOR \->STR
SWAP 60 MOD 1 RND \->STR
" min " SWAP + + " " + 3 \->GROB
REPL
NEXT
//boucle générale...
DO
DO
//temps écoulé...
TICKS clck OVER 'clck' STO
- B\->R 8192 / "'j" j + "'" + OBJ\-> SWAP STO-
//affichage...
PICT
# 43d j 1 - 13 * R\->B 2 \->LIST
"j" j + OBJ\->
DUP 60 / FLOOR \->STR
SWAP 60 MOD 1 RND \->STR
" min " SWAP + + " " + 3 \->GROB
REPL
//clause de sortie : temps épuisé...
IF "j" j + OBJ\-> 0 \<=
THEN 440 .2 BEEP 1 SF
END
UNTIL 1 KEY 1 FS? OR
END
//test de la touche...
CASE DUP 51 ==
THEN DROP j nb MOD 1 + 'j' STO END
55 ==
THEN 1 SF END
END CLEAR
UNTIL 1 FS?
END
//affichage final
1 nb
FOR i "j" i + OBJ\-> 0 RND
NEXT
\>>
UPDIR 'tccdir' PGDIR
1 CF
\>> |