*-- 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