*-- Jeu de domino
*-------------------------------------------------------------------
*-- Version PRIAM : 1ère 25/04/97, (c) R. Suinot
*-- Dernière mise à jour: 18/10/98
*-------------------------------------------------------------------
titre=" Domino, v° 6.0 "
*-------------------------------------------------------------------
equ ESC to char(27)
equ CSI to ESC:"["
equ IACT.CU to CSI:"?25l" ; ** inactivation curseur
equ ACT.CU to CSI:"?25h" ; ** activation curseur
equ NUM.PIECE to 28
*-- Equivalences pour le fichier des scores:
equ PARTIE to score
equ GAGNE to score
equ POINT to score
*-- Caractères graphiques pour le dé
equ chg to ESC:"Ol" , chd to ESC:"Ok" , cbg to ESC:"Om" , cbd to ESC:"Oj"
equ tv to ESC:"Ox" , th to ESC:"Oq" , ts to ESC:"Ow" , ti to ESC:"Ov"
equ td to ESC:"Ou" , tg to ESC:"Ot" , ig to ESC:"On"
equ VI to @(-13) , VN to @(-18) , VB to @(-17)
*-------------------------------------------------------------------
*-- ouvertures des divers fichiers
open "COMMUNIC" to VAR.COM else stop 201, "COMMUNIC"
open "SCORES" to VAR.SCORE else stop 201, "SCORES"
*-------------------------------------------------------------------
*-- Recherche du nom du joueur
call U50BB(lig, cpt)
read DEFAUT from VAR.COM, lig else stop
nom=DEFAUT<1> ; *- nom de l'utilisateur
print @(-1):IACT.CU:
*-------------------------------------------------------------------
*-- initialisation des compteurs pour les scores
compteur=0 ; *-- compte le nombre de partie(s) jouée(s)
partie=0 ; *-- nombre de partie(s) gagnée(s) par l'humain
point.o=0 ; *-- nombre de points de l'ord
point.j=0 ; *-- nombre de points de l'humain
n.p.o=0 ; *-- = nombre de pièce de l'ord
n.p.j=0 ; *-- = nombre de pièce du joueur
gagneur=0
*-------------------------------------------------------------------
*-- Affichage de la table de jeu
in="" ; texte=""
is=0
call INFO.BAL(1,1,78,11,VI:titre:VN,texte,4,is,0,in)
*-------------------------------------------------------------------
*-- écran d'info
*print @(10,2):VI:" ":VN:
*print @(10,3):VI:" Petite amélioration: ":VN:
*print @(10,4):VI:" la touche 'F7' vous permet de supprimer les 'bip' ":VN:
*-------------------------------------------------------------------
10 *-- Début du jeu
*-------------------------------------------------------------------
*-- Def des tableaux
tab=0 ; joueur=0 ; ord=0 ; ext=0
ext<1,1>=0 ; *-- index de la pièce dans tab<> pour la première extrémitée
ext<1,2>=0 ; *-- colonne pièce
ext<1,3>=0 ; *-- ligne pièce
ext<1,4>=0 ; *-- type horiz/verti
ext<1,5>=0 ; *-- taille des lignes, si >33 -> vers le bas
ext<1,6>=-1 ; *-- sens pour le calcul des coordonnées
ext<1,7>=0 ; *-- chiffre de l'extrémité du domino
ext<2,1>=0 ; *-- index de la pièce dans tab<> pour la seconde extrémitée
ext<2,2>=0 ; *-- colonne pièce
ext<2,3>=0 ; *-- ligne pièce
ext<2,4>=0 ; *-- type horiz/verti
ext<2,5>=0 ; *-- taille des lignes, si >33 -> vers le bas
ext<2,6>=+1 ; *-- sens pour le calcul des coordonnées
ext<2,7>=0 ; *-- chiffre de l'extrémité du domino
*-------------------------------------------------------------------
*-- Def des variables alphanum
c$="" ; attente=""
*-------------------------------------------------------------------
*-- Def des variables numériques
i=0 ; j=0 ; b=0 ; is=0 ; co=0 ; li=0 ; suivante=1 ; flag=0
x=0 ; y=0 ; son=1
type=1 ; *-- 1=horiz. , 2=vertic.
coup=0 ; cu=1
*-------------------------------------------------------------------
*-- Mise à zéro du tableau principal et des tableaux joueur/ord
for i=0 to NUM.PIECE
tab=0 ; *-- valeur d'un des coté du domino
tab=0 ; *-- valeur du second coté du domino
tab=0 ; *-- 0 pièce non mélangée, 1=mélangé, 2=tiré par joueur ou ord
joueur=0
ord=0
next i
*-------------------------------------------------------------------
*-- On mélange les pièces
i=time()
var=mod(i,1700)+NUM.PIECE
for i=1 to 7
for j=i to 7
loop
b=rnd(var)+1 ; *-- on choisi l'index du tableau
until tab=0 and b <= NUM.PIECE do repeat
tab=i-1
tab=j-1
tab=1
next j
next i
*-------------------------------------------------------------------
*-- mise à 0 des lignes du bas de l'écran
texte=""
gosub 900
gosub 910
*-------------------------------------------------------------------
gosub 100 ; *- tirage des pièces du joueur
gosub 110 ; *- tirage des pièces de l'ord
suivante=13
*-------------------------------------------------------------------
*-- animation
if gagneur=0 then
gosub 990
end else if gagneur=1 then
gosub 400 ; *-- l'ord joue
texte="J'ai gagné, j'ai rejoué en premier."
gosub 900
end else
texte="Vous avez gagné, à vous de recommencer."
gosub 900
end
*-------------------------------------------------------------------
*-- Début du jeu
*-------------------------------------------------------------------
compteur=compteur+1
gosub 90
co=1 ; li=15
print @(co,li):VI:
print "[":tab,1>:"|":tab,2>:"]":VN:
texte=""
loop
call US1114(c$,0,0)
if coup=0 then
texte=""
gosub 900
end
if n.p.j#0 and n.p.o#0 then
*-- partie en cours
gosub 300
end
if c$="F9" and coup<2 then c$=""
until c$="F4" or c$="Aband" or c$="F9" do repeat
if c$="F9" then
if n.p.o#0 and n.p.j#0 then compteur=compteur-1
gosub 9980
goto 10
end else
*-- On met le score en fichier et on affiche le tout
call INFO.BAL(1,1,78,11,"","",4,is,0,in)
if compteur>2 then
if point.o > point.j then
gosub 950
end else
c$=VB:"Vous avez tout perdu!":VN
c$=c$:" ":compteur:" parties, ":partie:" gagnée(s), ":point.j:" pts."
gosub 970
end
end else
b=0
c$=VB:"Pas assez de parties jouées pour le calcul des scores!":VN
gosub 970
end
end
goto 9999
*-------------------------------------------------------------------
90 *-- Affichage d'une fenêtre d'information
if compteur>1 then
texte=compteur:"ème partie. Pour jouer:ý"
end else
texte="Bienvenue ":nom:". Pour jouer:ý"
end
texte=texte:"'Entrée' choix de la pièce à poser, 'F1' piocher une pièce, "
texte=texte:"'F2' passer son tour, 'F5' inversion de chiffre,"
texte=texte:" 'F4' quitter, 'F9' pour recommencer."
attente=texte
call INFO.BAL(41,15,37,4,VI:" Info du jour: ":VN,texte,1,is,0,in)
99 return
*-------------------------------------------------------------------
100 *-- tirage des pièces joueur (6 au total)
for i=1 to 6
joueur=i
tab=2
next i
n.p.j=6
*-- affichage des pièces du joueur
texte=""
for i=1 to 6
if tab,1>=tab,2> then
texte=texte:VB:"[":tab,1>:"|":tab,2>:"]":VN:" "
end else
texte=texte:"[":tab,1>:"|":tab,2>:"]":" "
end
next i
texte=texte:"ý"
for i=1 to 2
for j=1 to 6
texte=texte:"[ | ] "
next j
texte=texte:" "
texte=texte:"ý"
next i
if point.j < point.o then
texte=texte:"Vous: ":point.j:" pts, ":partie:" parties;ý"
texte=texte:"Moi: ":point.o:" pts, ":compteur-partie:" parties."
end else if point.j > point.o then
texte=texte:"Vous: ":point.j:" pts, ":partie:" parties;ý"
texte=texte:"Moi: ":point.o:" pts, ":compteur-partie:" parties."
end else
texte=texte:"Vous: ":point.j:" pts, ":partie:" parties;ý"
texte=texte:"Moi: ":point.o:" pts, ":compteur-partie:" parties."
end
call INFO.BAL(1,15,37,4,VI:" Voici vos pièces ":VN,texte,1,is,0,in)
109 return
*-------------------------------------------------------------------
110 *-- tirage des pièces ordinateur (6 au total)
for i=1 to 6
ord=i+6
tab=2
next i
n.p.o=6
119 return
*-------------------------------------------------------------------
300 *-- étude des touches (recherche pièce)
*-- on commence par effacer le curseur
print @(co,li):
if cu#0 then
if tab,1>=tab,2> then
print VB:"[":tab,1>:"|":tab,2>:"]":VN:
end else
print "[":tab,1>:"|":tab,2>:"]":
end
end else
print "[ | ]":
end
begin case
case c$="haut"
** Touche vers le haut
if li=15 then
li=17
end else
li=li-1
end
gosub 310
case c$="bas"
** Touche vers le bas
if li=17 then
li=15
end else
li=li+1
end
gosub 310
case c$="droite"
** Touche vers la droite
if co>30 then
co=1
end else
co=co+6
end
gosub 310
case c$="gauche"
** Touche vers la gauche
if co=1 then
co=31
end else
co=co-6
end
gosub 310
case c$="Enter"
*-- on à choisie la pièce, donc on demande à l'ord de calculer
*-- la possibilité du coup
flag=0
gosub 310 ; *-- on recherche la pièce au niveau du curseur
if cu # 0 then
gosub 600 ; *-- on peut poser la pièce?
if flag=0 then
*-- et on passe la main...
print @(co,li):VI:"[ | ]":VN:
if n.p.j#0 then
gosub 400 ; *-- l'ord joue
end
end
end else
texte="??? Je ne vous comprend pas, recommencez!"
gosub 910
end
case c$="F1"
** On pioche une pièce
i=1
gosub 320
if i=1 then
gosub 310 ; *-- on recherche la pièce pour affichage plus tard
end
*-- et on passe la main...
gosub 400 ; *-- l'ord joue
case c$="F2"
** On passe notre tour, sauf si l'on peu piocher!
if suivante#0 then
x=tab,1>
tab,1>=tab,2>
tab,2>=x
end else
if son then print char(7):
end
case c$="F7"
if son=0 then son=1 else son=0
end case
*-- on fini en affichant le curseur
print @(co,li):VI:
if cu#0 then
print "[":tab,1>:"|":tab,2>:"]":VN:
end else
print "[ | ]":VN:
end
309 return
*-------------------------------------------------------------------
310 *-- Recherche de la piece et création du curseur
*-- on a la position du curseur, on cherche l'élément qui leur correspond
cu=((co-1)/6)+(((li-15)*6)+1)
if joueur=0 then
cu=0
end
319 return
*-------------------------------------------------------------------
320 *-- on pioche une pièce dans le tas
if suivante < NUM.PIECE then
*-- s'il reste des pièces à piocher...
if i=1 then
*-- le joueur demande une pièce
*-- on cherche le dernier élément dans le tableau du joueur
j=0
loop
j=j+1
until joueur=0 do repeat
*-- on met la pièce suivante du tableau principal
joueur=suivante
suivante=suivante+1
n.p.j=n.p.j+1
gosub 330 ; *-- On affiche la pièce
end else
*-- c'est l'ord qui demande une pièce
*-- on cherche le dernier élément dans le tableau du joueur
j=0
loop
j=j+1
until ord=0 do repeat
*-- on met la pièce suivante du tableau principal
ord=suivante
suivante=suivante+1
n.p.o=n.p.o+1
end
j=NUM.PIECE-suivante
if j=0 then
texte="Plus de pièce dans la pioche!"
end else if j<10 then
texte="Il reste ":j:" pièce dans la pioche."
end else
texte="Il reste ":j:" pièces dans la pioche."
end
gosub 900
end else
*-- erreur, il n'y a plus de pièce
texte="Plus de pièce. Ca va être dur de finir! "
gosub 900
i=-1
end
329 return
*-------------------------------------------------------------------
330 *-- on affiche la pièce piochée du joueur
*-- on a le n° dans le tableau du joueur, on cherche 'co' et 'li'
*-- j=n° de l'élément du tableau du joueur
b=j ; *-- on sauve la valeur de j car on en a besoin!
y=15
loop
if j>=7 then
j=j-6
y=y+1
end
until j<7 do repeat
x=abs((7*(j-1))-abs(j-2))
print @(x,y):"[":tab,1>:"|":tab,2>:"]":
co=x
li=y
339 return
*-------------------------------------------------------------------
400 *-- l'ordinateur joue
flag=0
if coup=0 then
*-- premier coup, un double uniquement
j=1
loop
if tab,1> = tab,2> then
*-- on peut poser cette pièce, mais ou et comment?
x=ord
b=1
flag=3 ; *-- on force la sortie de la boucle
gosub 610
n.p.o=n.p.o-1
texte="Il me reste ":n.p.o:" pièces. A vous à présent...!"
gosub 910
coup=1
ord=0
end else
j=j+1
end
until flag=3 or j>6 do repeat
if flag=0 then flag=2
end else
*-- ce n'est pas le premier coup
b=rnd(2)+1 ; *-- founi '1' ou '2' pour savoir ou regarder en premier
loop
i=ext
for j=1 to NUM.PIECE
if ord # 0 then
*-- il y a une pièce dans cette case du tableau
if i=tab,1> or i=tab,2> then
*-- on peut poser cette pièce, mais ou et comment?
x=ord
flag=3 ; *-- on force la sortie de la boucle
type=1
gosub 610
ord=0
n.p.o=n.p.o-1
if n.p.o=0 then
*-- l'ord à gagné !!!
gosub 8000
j=NUM.PIECE+1 ; *-- pour sortir de la boucle
end else
texte="Il me reste ":n.p.o:" pièces. A vous à présent...!"
gosub 910
end
j=NUM.PIECE+1 ; *-- pour sortir de la boucle
end
end
next j
if b=1 then b=2 else b=1
flag=flag+1
until flag>=2 do repeat
end
*-- si flag=2 alors on n'a rien trouvé, l'ord tire donc une pièce
*-- sinon, flag=3 et l'ord à joué quelque chose
if flag=2 then
i=2
if suivante < NUM.PIECE then
gosub 320
texte="Je ne peux pas jouer, j'ai tiré un domino (":n.p.o
texte=texte:" pièces à ma main). A vous."
end else
texte="Je passe mon tour (":n.p.o:" pièces à ma main). A vous."
end
gosub 910
end
409 return
*-------------------------------------------------------------------
*-- l'humain à joué!
600 *-- recherche si l'on peut poser la pièce
x=joueur
if coup=0 then
b=1
*-- C'est le premier coup, un double uniquement
if tab = tab then
*-- c'est bien un double
flag=0
gosub 610
coup=1
n.p.j=n.p.j-1
if n.p.j=0 then
gosub 9000
end
*-- et pour finir, on met le tableau à 0
joueur=0
cu=0
end else
*-- ce n'est pas un double, donc on informe le joueur
texte="Il faut un double pour commencer! merci."
if son then print char(7):
gosub 910
flag=1
end
end else
*-- C'est pas le premier, donc n'importe quelle pièce
b=1
flag=0
loop
b=-1*b+3
if tab=tab then
*-- c'est un double que l'on veux poser!
if ext = tab then
*-- ok, il y a correspondance
flag=3
end
end else
*-- ce n'est pas un double
if ext=tab or ext=tab then
*-- ok, il y a correspondance
flag=3
end
end
flag=flag+1
until flag>=2 do repeat
if flag=2 then
*-- pas de correspondance de pièce
texte="Vous ètes bète, ou vous y faite exprès? Impossible de faire "
texte=texte:"ça. Recommencez."
if son then print char(7):
gosub 910
flag=1
end else
*-- on peut la poser, mais ou et comment?
*-- avant, on vérifie si c'est correcte des 2 cotés, dans ce cas, on
*-- demande ou mettre la pièce!
x=joueur
if ext<1,7>=tab or ext<1,7>=tab then
if ext<2,7>=tab or ext<2,7>=tab then
*-- il y a aussi correspondance,
*-- on demande si à droite ou à gauche
gosub 710
if c$="F4" then c$="" ; flag=1 ; goto 609
end
end
type=1
flag=0
gosub 610
coup=coup+1
n.p.j=n.p.j-1
if n.p.j=0 then
gosub 9000
end
*-- et pour finir, on met le tableau à 0
joueur=0
cu=0
end
end
609 return
*-------------------------------------------------------------------
610 *-- on recherche la position pour la pièce
*-- si flag=0 -> c'est l'humain, sinon, c'est l'ord
*-- index x=tab> ou x=tab>
*-- index de ext<> = b (ext)
if ext<33 then
*-- on est au milieu, on met comme on veut
if tab=tab then
*-- c'est un double à poser
if flag=0 then
*-- joueur
gosub 700 ; *-- h ou v?
end else
*-- ord -> vert. d'office
type=2
end
end else
*-- ce n'est pas un double
*-- on recherche correspondance des cotés des domino
a=ext+b ; *-- quel sens?
if a=0 or a=3 then
*-- sens normal, vers l'extérieur
a=(-1*b)+3
end else
*-- sens inverse, on retourne vers l'intérieur
a=b
end
if tab # ext then gosub 620 ; *-- on swap
end
end else
*-- on tourne le coin du jeu
if ext<2 then
*-- c'est la première pièce à mettre pour tourner
if ext=1 then
*-- ancienne pièce horiz.
if type=1 then
*-- prochaine pièce horiz.
type=2 ; *-- on force en verticale
if ext # tab then gosub 620 ; *-- swap
ext=2
end else
*-- prochaine pièce vert., c'est un double donc
ext=2
if ext # tab then gosub 620 ; *-- swap
end
end else
*-- ancienne pièce vert.
*-- on pose horiz la suivante
if ext # tab then gosub 620 ; *-- swap
type=1
end
end else if ext=2 or ext=3 then
*-- c'est la deuxième pièce à poser, en dessous donc
if ext # tab then gosub 620 ; *-- swap
if type=1 then
type=2
ext=3
end else
*-- c'est un double, si type=2!
type=1
end
end else
*-- on a placé 2 pièces verticales, on pose horiz.
i=b
if ext # tab then gosub 620 ; *-- swap
if type=2 then
*-- c'est un double, on force à l'horiz.
type=1
end
end
end
gosub 630 ; *-- on sauve dans ext<>
619 return
*-------------------------------------------------------------------
620 *-- on swap les chiffres dans le domino
a=tab
tab=tab
tab=a
629 return
*-------------------------------------------------------------------
630 *-- on sauve les données
*-- x représente l'index du tableau tab<> selon
*-- que c'est l'ord ou l'humain qui a joué (ex: x=joueur)
if coup=0 then
ext<1,1>=x
ext<1,2>=78/2
ext<1,3>=4
ext<1,4>=type
ext<2,1>=x
ext<2,2>=78/2
ext<2,3>=4
ext<2,4>=type
if type=1 then
ext<1,5>=3
ext<2,5>=3
ext<1,7>=tab
ext<2,7>=tab
end else
ext<1,5>=1
ext<2,5>=1
ext<1,7>=tab
ext<2,7>=tab
end
end else
if ext=1 then
*-- anciène pièce horizontal
if type=1 then
*-- prochaine pièce horizontale
ext=ext+(ext*5)
if ext<10 then
ext=ext+5
end
gosub 650 ; *-- on cherche le dernier chiffre
end else
*-- prochaine pièce verticale
if ext<2 then
ext=ext+(ext*3)
if ext<10 then
ext=ext+1
end
ext=tab
end else if ext=2 or ext=3 then
*-- c'est la première ou deuxième pour tourner
ext=ext+((6*b)-9)
ext=ext+1
ext=ext+1
gosub 650 ; *-- on cherche le dernier chiffre
end else
*-- ?
print @(70,0):"Erreur 1":
end
end
end else
*-- anciène pièce verticale
if type=1 then
*-- prochaine pièce horizontale
if ext<2 then
*-- si on va à droite ou à gauche
ext=ext+(ext*3)
if ext<10 then
ext=ext+5
end
gosub 650 ; *-- on cherche le dernier chiffre
end else if ext=2 then
*-- ?
print @(70,0):"Erreur 2":
end else if ext=3 then
*-- ?
print @(70,0):"Erreur 3":
end else
*-- c'est la première pièce en horiz pour retour
ext=(-2*b)+3 ; *-- on change de sens
ext=ext+(ext*3)
ext=ext+1
ext=1
ext=tab
end
end else
*-- prochaine pièce verticale
if ext<2 then
*-- impossible de venir ici
print @(70,0):"Erreur 4":
end else if ext=2 then
*-- c'est la première pour tourner
ext=ext+((6*b)-9)
ext=ext+1
ext=ext+1
gosub 650 ; *-- on cherche le dernier chiffre
end else if ext=3 then
*-- on tourne la pièce suivante
ext=ext+4
ext=ext+1
ext=tab
end else
*-- ?
print @(70,0):"Erreur 5":
end
end
end
end
ext=x
ext=type
gosub 640 ; *-- et on affiche la pièce
639 return
*-------------------------------------------------------------------
640 *-- on affiche la pièce jouée, mise dans ext<>
*-- b=le n° de ext (pour pièce à droite ou à gauche)
a=ext
ext=ext
if ext=1 then
print @(ext-2,ext):"[":tab:"|":
print tab:"]":
end else
if ext=4 then
print @(ext,ext-2):"=":
end else
print @(ext,ext-2):"-":
end
print @(ext,ext-1):tab:
print @(ext,ext):"-":
print @(ext,ext+1):tab:
print @(ext,ext+2):"-":
end
649 return
*-------------------------------------------------------------------
650 *-- on recherche le chiffre en bout de domino
if b=1 then
if ext<1,6>=-1 then
ext<1,7>=tab
end else if ext<1,6>=+1 then
ext<1,7>=tab
end else if ext<1,6>=2 then
ext<1,7>=tab
end else if ext<1,6>=3 then
ext<1,7>=tab
end
end else
if ext<2,6>=-1 then
ext<2,7>=tab
end else if ext<2,6>=+1 then
ext<2,7>=tab
end else if ext<2,6>=2 then
ext<2,7>=tab
end else if ext<2,6>=3 then
ext<2,7>=tab
end
end
659 return
*-------------------------------------------------------------------
700 *-- on demande si horiz ou vertical
texte="poser la pièce horizontalement ou vertivalement? (h/v)"
loop
gosub 910
call US1114(c$,0,0)
if c$="h" or c$="H" then
type=1
c$="-"
end else if c$="v" or c$="V" then
type=2
c$="-"
end else
texte="'h' ou 'v', on vous le demande!"
c$=""
end
until c$="-" do repeat
709 return
*-------------------------------------------------------------------
710 *-- on demande à poser la pièce à droite ou à gauche
texte="Vous voulez la mettre à droite ou à gauche? (d/g)"
loop
gosub 910
call US1114(c$,0,0)
if c$="d" or c$="D" then
b=2
c$="-"
end else if c$="g" or c$="G" then
b=1
c$="-"
end else if c$#"F4" then
texte="'d' ou 'g', on vous le demande!"
c$=""
end
until c$="-" or c$="F4" do repeat
texte=""
gosub 910
719 return
*-------------------------------------------------------------------
900 *-- On affiche un ligne d'info sur l'état de la pioche
*-- texte=le texte à afficher
a=len(texte)
print @(0,21):VB:texte:VN:str(".",80-a):
909 return
*-------------------------------------------------------------------
910 *-- On affiche un ligne d'info en bas de l'écran
*-- texte=le texte à afficher
a=len(texte)
print @(0,22):VB:texte:VN:str(".",80-a):
919 return
*-------------------------------------------------------------------
950 *-- on sauve les 10 meilleurs scores
*-- en fonction du nombre de parties jouées et gagnées
read score from VAR.SCORE, "SCORE.DOM" else score=""
if score="" then
c$=VI:"Bravo, vous ètes premier, mais vous ètes le seul!":VN
score<1,1>="*-- fichier de sauvegarde des scores du jeu de domino"
texte="*-- Dernière mise à jour: ":oconv(date(),"D"):" à "
call TEMPS(1,1,time(),in)
texte=texte:in
score<2,1>=texte
score<3,1>=nom
score<3,2>=compteur
score<3,3>=partie
score<3,4>=point.j
score<3,5>=point.o
score<3,6>=date()
score<3,7>=time()
for i=1 to 9
score<3+i>="ýýýýýý"
next i
b=1
end else
c$=VI:"Vous n'ètes même pas dans les scores!":VN
a=3
b=0
loop
if score = "" then
*-- position vide, donc on écrit là
score=replace(score,a,1;nom)
score=replace(score,a,2;compteur)
score=replace(score,a,3;partie)
score=replace(score,a,4;point.j)
score=replace(score,a,5;point.o)
score=replace(score,a,6;date())
score=replace(score,a,7;time())
b=a
a=13
c$=VI:"Vous ètes ":b-2:"ème.":VN
end else
*-- on insert le score actuel en fonction de (1), (2) ou (3)
if PARTIE < compteur then
*-- (1) nombre de parties jouées
gosub 960
end else if PARTIE = compteur then
*-- (1) nombre de parties jouées
if GAGNE < partie then
*-- (2) nombre de parties gagnées
gosub 960
end else if GAGNE = partie then
*-- (3)
*-- compteur et partie sont = aux valeurs dans score
*-- on teste le nombre de points, et on recherche
*-- la meilleur position (sans quitter
*-- les valeurs compteur et partie)
i=0
loop
if POINT >= point.j then
gosub 960
end else
a=a+1
end
until a>12 or PARTIE#compteur or GAGNE#partie do repeat
if i=0 then gosub 960
end
end
end
a=a+1
until a > 12 do repeat
end
texte="*-- Dernière ouverture: ":oconv(date(),"D"):" à "
call TEMPS(1,1,time(),in)
texte=texte:in
score=replace(score,2,1;texte)
write score on VAR.SCORE, "SCORE.DOM"
gosub 970 ; *-- et on affiche le tout!
959 return
*-------------------------------------------------------------------
960 *-- poussons tous les scores vers le bas
for b=12 to a+1 step -1
score=replace(score,b,1;score)
score=replace(score,b,2;score)
score=replace(score,b,3;score)
score=replace(score,b,4;score)
score=replace(score,b,5;score)
score=replace(score,b,6;score)
score=replace(score,b,7;score)
next b
score=replace(score,a,1;nom)
score=replace(score,a,2;compteur)
score=replace(score,a,3;partie)
score=replace(score,a,4;point.j)
score=replace(score,a,5;point.o)
score=replace(score,a,6;date())
score=replace(score,a,7;time())
b=a
a=13
i=1
c$=VI:"Vous ètes ":b-2:"ème.":VN
969 return
*-------------------------------------------------------------------
970 *-- on affiche les scores dans la fenetre principale
read score from VAR.SCORE, "SCORE.DOM" else score=""
if score#"" then
texte="|---------|------ Parties -----|-"
texte=texte:"---- Points ---|---------------------------|ý"
texte=texte:"|-- Nom --|-- jouées / gagnées | "
texte=texte:"joueur / ord --|-- Date -----|-- Heure-----|"
call INFO.BAL(1,1,78,11,c$,texte,1,is,0,in)
texte="Appuyez sur une touche pour quitter. Merci."
call INFO.BAL(41,15,37,4,VI:" Info du jour: ":VN,texte,1,is,0,in)
a=3
for i=3 to 12
if score#"" then
if i-2>9 then
texte=i-2:" "
end else
texte=" ":i-2:" "
end
if i=b then
texte=texte:VI:score
end else
texte=texte:score
end
print @(01,a):" ":texte: ; *-- nom
print @(16,a):" ":score:" ": ; *-- partie jouées
print @(24,a):" ":score:" ": ; *-- partie gagnées
print @(34,a):" ":score:" ": ; *-- nombre de points
print @(41,a):" ":score:" ": ; *-- nombre de points
print @(50,a):oconv(score,"D"): ; *-- date
call TEMPS(1,0,score,in)
print @(65,a):in:VN:" ": ; *-- heure
a=a+1
end
next i
end
call US1114(c$,0,0)
979 return
*-------------------------------------------------------------------
990 *-- on met en place l'animation des dés,
*-- pour trouver le premier joueur
in=""
is=0
texte=VI:char(7):"Lançons les dés!":VN
texte=texte:"ýPaire, c'est à vous de commencer,ý"
texte=texte:"impaire, c'est à moi!"
call INFO.BAL(41,15,37,4,VI:" Info du jour: ":VN,texte,1,is,0,in)
co=1
li=5
gosub 1010
if son then print char(7):
if ((x/2)-int(x/2)) # 0 then
*-- c'est un nombre impaire, l'ordinateur commence!
texte="Impaire: à moi de commencer! "
gosub 900
end else
texte="Paire: à vous de commencer, un double en premier!"
gosub 900
end
*-- une pause
for j=1 to 100000
next j
*-- et on efface le dé
print @(co,li+0):" ":
print @(co,li+1):" ":
print @(co,li+2):" ":
print @(co,li+3):" ":
print @(co,li+4):" ":
*-- on supprime les 3 lignes d'info
print @(10,2):str(" ",54):
print @(10,3):str(" ",54):
print @(10,4):str(" ",54):
if ((x/2)-int(x/2)) # 0 then
gosub 400 ; *-- l'ord joue
end
999 return
*-------------------------------------------------------------------
1000 *-- tracé d'un dé
print @(co,li+0):" ":
print @(co,li+1):" ":
print @(co,li+2):" ":
print @(co,li+3):" ":
print @(co,li+4):" ":
co=co+2
print @(co,li):chg:th:th:th:chd:
print @(co,li+1):tv:" ":tv:
print @(co,li+2):tv:" ":tv:
print @(co,li+3):tv:" ":tv:
print @(co,li+4):cbg:th:th:th:cbd:
1009 return
*-------------------------------------------------------------------
1010 *-- On établie un tableau de nombre au hasard pour le dé
loop
y=rnd(30)+1
until y>15 do repeat
x=rnd(5)+1
for i=1 to y
loop
b=rnd(5)+1
until x#b do repeat
x=b
gosub 1000
print @(co+2,li+2):b:
*-- une pause
for j=1 to (7000*i)^(1/2)
next j
next i
1019 return
*-------------------------------------------------------------------
8000 *-- l'ord a gagné ( ggggrrrrr!!!)
if son then print char(7):
texte=""
gosub 910
*-- on calcul le reste de point du joueur
i=1
j=1
loop
if joueur#0 then
point.j=point.j+tab,1>+tab,2>
j=j+1
end
i=i+1
until j>n.p.j do repeat
if compteur=1 then
texte="Vous avez perdu cette ":compteur:"ère partie."
end else
texte="Vous avez perdu cette ":compteur:"ème partie."
end
if point.o#0 then
point.o=point.o+tab,1>+tab,2>
j=j+1
end
i=i+1
until j>n.p.o do repeat
if compteur=1 then
texte="Bravo, vous avez gagné cette ":compteur:"ère partie."
end else
texte="Bravo, vous avez gagné cette ":compteur:"ème partie."
end
texte=texte:" Vous avez beaucoup de chance au jeu!"
print @(1,18):"Vous: ":point.j:" pts, ":partie:" parties;":
print @(1,19):"Moi: ":point.o:" pts, ":compteur-partie:" parties.":
call INFO.BAL(41,15,37,4,VI:" Info du jour: ":VN,texte,1,is,0,in)
gagneur=2
c$="F9"
9009 return
*-------------------------------------------------------------------
9970 *-- débugage: on affiche les pièces de l'ordinateur
*-- ainsi que ext<>
for i=1 to 5
print @(41,14+i):str(" ",37)
next i
texte=""
b=1
a=1
i=1
loop
texte=""
j=1
loop
if ord#0 then
texte=texte:"[":tab,1>:"|":tab,2>:"]":" "
j=j+1
b=b+1
end
i=i+1
until j>6 or b>n.p.o do repeat
print @(41,14+a):texte:
a=a+1
until b>n.p.o do repeat
print @(41,17):ext<1,1>:" / ":ext<1,2>:" / ":ext<1,3>:" / ":ext<1,4>:" / ":
print ext<1,5>:" / ":ext<1,6>:" / ":ext<1,7>:" ":
print @(41,18):ext<2,1>:" / ":ext<2,2>:" / ":ext<2,3>:" / ":ext<2,4>:" / ":
print ext<2,5>:" / ":ext<2,6>:" / ":ext<2,7>:" ":
print @(41,19):"Appuyez sur une touche. Merci.":
call US1114(c$,0,0)
*-- Affichage de la fenêtre d'information
texte=attente
call INFO.BAL(41,15,37,4,VI:" Info du jour: ":VN,texte,1,is,0,in)
9979 return
*-------------------------------------------------------------------
9980 *-- redraw du jeu pour remise à 0
call INFO.BAL(1,1,78,11,"","",3,is,0,in)
print @(0,22):str(".",80):
9989 return
*-------------------------------------------------------------------
9999
print ACT.CU:
return
*- EOF