Hebdogiciel n°60

100 !----------------------------------
110 !              BARMAN
120 !----------------------------------
130 CALL COLOR("0RY")
140 DIM T$(20)
150 DIM SER(3,42)
160 DIM COM(3,7)
170 DIM TOT(3,7)
180 DIM PLA(20,20)
190 DIM INX(20,20)
200 FOR I=1 TO 20
210 READ A$
220 T$(I)=A$
230 NEXT I
240 DATA KIR,PORTO,MUSCAT,BIERE,"JUS DE FRUIT",CAFE,LIMONADE,PERRIER,CIDRE
250 DATA THE,DIABOLO,"LAIT FRAISE",PANACHE,MARTINI,CHOCOLAT,WHISKY
260 DATA "MENTHE A L'EAU",CHAMPAGNE,"EAU MINERALE",PASTIS
270 GOSUB 2310
280 CLS "bYG"
290 FOR I=1 TO 3
300 NB(I)=INT(7*RND+0)
310 NB(I)=NB(I)+1
320 LOCATE (5+((I-1)*5),1)
330 PRINT NB(I);" CLIENTS ARRIVENT A LA TABLE ";I
340 NEXT I
350 LOCATE (22,1):PRINT "BARRE ESPACEMENT POUR PRENDRE COMMANDE"
360 A$=KEY$
370 RANDOMIZE
380 IF A$="" THEN GOTO 360
390 A=ASC(A$)
400 FOR I=1 TO 3
410 CLS "bYG"
420 LA=NB(I):CO$="0WB"
430 CALL BOX(1,15,10,LA,CO$)
440 LOCATE (5,1):PRINT "table ";I:LOCATE (10,1)
450 FOR J=1 TO NB(I)
460 RANDOMIZE
470 C=RND
480 B=RND
490 D=(INT(B*100)+INT(C*100)+A)
500 BOI=INT(D-(INT(D/20)*20))
510 BOI=BOI+1
520 PRINT T$(BOI)
530 COM(I,J)=BOI
540 NEXT J
550 LOCATE (22,1):PRINT "Vous vous souviendrez ?(entree)"
560 A$=KEY$
570 RANDOMIZE
580 IF A$="" THEN B=RND:GOTO 560
590 NEXT I
600 CLS "bYR":CALL COLOR("0bY")
610 AIG=0
620 LOCATE (1,1):PRINT "Chargez le plateau.Entree pour servir."
630 CALL COLOR("0Wb")
640 LOCATE (3,22):PRINT "Indiquez un nombre"
650 LOCATE (4,22):PRINT "   par boisson    "
660 LOCATE (5,22):PRINT "    commandee.    "
670 CO$="0RG"
680 CALL BOX(1,15,3,22,CO$)
690 LOCATE (3,1)
700 FOR I=1 TO 20
710 PRINT T$(I)
720 NEXT I
730 FOR I=1 TO 20
740 PLA(I,1)=0:PLA(I,2)=0
750 INX(I,1)=0:INX(I,2)=0
760 NEXT I
770 CO$="0MW"
780 CALL BOX(16,19,3,22,CO$)
790 GOSUB 800:GOTO 1040
800 C=17:L=3:MAX=22
810 LOCATE (L,C)
820 A$=KEY$
830 IF A$="" THEN GOTO 820
840 IF ASC(A$)=13 THEN RETURN
850 AS=ASC(A$)
860 IF AS=128 THEN IF L<>3 THEN L=L-1 ELSE GOTO 930
870 IF AS=130 THEN IF L<>MAX THEN L=L+1 ELSE GOTO 930
880 IF AS<48 OR AS>57 THEN GOTO 920
890 LOCATE (L,C):PRINT CHR$(AS)
900 GOSUB 980
910 IF L<>MAX THEN L=L+1 ELSE GOTO 930
920 IF AS=32 THEN LOCATE (L,C):PRINT CHR$(AS):AS=48:GOSUB 910
930 LOCATE (L,C+1):PRINT "."
940 PAUSE .75
950 LOCATE (L,C+1):PRINT " "
960 LOCATE (L,C)
970 GOTO 820
980 IF AIG=1 THEN GOTO 1020
990 PLA(L-2,1)=AS-48
1000 PLA(L-2,2)=L-2
1010 RETURN
1020 INX(L-2,1)=AS-48
1030 RETURN
1040 CLS "RYM":PL=0
1050 CALL COLOR("0RY")
1060 LOCATE (1,1):PRINT "Votre plateau est ainsi charge : "
1070 LOCATE (22,1):PRINT "(Entree) lorsque la table est servie"
1080 CO$="0WB"
1090 FOR I=1 TO 20
1100 IF PLA(I,1)=0 THEN GOTO 1140
1110 LOCATE (PL+3,1):PRINT T$(PLA(I,2)):LOCATE (PL+3,16):PRINT PLA(I,1)
1120 PL=PL+1
1130 INX(PL,2)=PLA(I,2)
1140 NEXT I
1150 CO$="0MW"
1160 CALL BOX(26,39,3,8,CO$)
1170 LOCATE (3,26):PRINT "Entrez en face"
1180 LOCATE (4,26):PRINT "  de chaque   "
1190 LOCATE (5,26):PRINT " consommation "
1200 LOCATE (6,26):PRINT " le nombre a  "
1210 LOCATE (7,26):PRINT " deposer sur  "
1220 FOR I=1 TO 3
1230 CALL COLOR("0Wb")
1240 LOCATE (8,26):PRINT " la table  ";I
1250 CO$="0bG"
1260 LA=PL+2
1270 CALL BOX(21,24,3,LA,CO$)
1280 C=22:L=3:MAX=LA
1290 CALL COLOR("0bG")
1300 AIG=1
1310 GOSUB 810
1320 NBS(I)=0:NS=1
1330 CALL COLOR("0RY")
1340 FOR Z=1 TO PL
1350 B=INX(Z,1):A=PLA(INX(Z,2),1)
1360 IF B=0 OR A<1 THEN GOTO 1460
1370 IF A>=B THEN GOTO 1420
1380 LOCATE (12,20):PRINT "AND ligne ";Z
1390 LOCATE (14,20):PRINT "Redonnez":PAUSE 2
1400 LOCATE (14,20):PRINT "           ":
1410 LOCATE (12,20):PRINT "           ":GOTO 1280
1420 LOCATE (Z+2,17):A=A-B:PRINT STR$(A)
1430 PLA(INX(Z,2),1)=PLA(INX(Z,2),1)-B
1440 SER(I,NS)=PLA(INX(Z,2),2):SER(I,NS+1)=B:NBS(I)=NBS(I)+1:NS=NS+2
1450 INX(S,1)=0
1460 NEXT Z
1470 NEXT I
1480 CLS
1490 LOCATE (1,1):PRINT "RESULTAT"
1500 LOCATE (1,18)
1510 PRINT "1"
1520 LOCATE (1,25)
1530 PRINT "2"
1540 LOCATE (1,32)
1550 PRINT "3"
1560 LOCATE (2,17):PRINT "C--S  C--S  C--S"
1570 CO$="0bC"
1580 CALL BOX(1,15,3,22,CO$)
1590 FOR I=1 TO 20
1600 LOCATE (I+2,1):PRINT T$(I)
1610 NEXT I
1620 !
1630 ! *** EDIT DES COMMANDES  ****
1640 !
1650 CO$="0Yb"
1660 CD=16:CA=22
1670 CALL BOX(CD,CA,3,22,CO$)
1680 CO$="0MG"
1690 CD=23:CA=29
1700 CALL BOX(CD,CA,3,22,CO$)
1710 CO$="0bR"
1720 CD=30:CA=36
1730 CALL BOX(CD,CA,3,22,CO$)
1740 FOR I=1 TO 3
1750 IF I=1 THEN CALL COLOR("0Yb"):C=17:GOTO 1770
1760 IF I=2 THEN CALL COLOR("0MG"):C=24 ELSE CALL COLOR("0bR"):C=31
1770 FOR J=1 TO NB(I)
1780 IF COM(I,J)=0 THEN GOTO 1860
1790 TOT(I,J)=1
1800 FOR Z=1 TO NB(I)
1810 IF COM(I,J)<>COM(I,Z)OR Z=J THEN GOTO 1830
1820 TOT(I,J)=TOT(I,J)+1:COM(I,Z)=0
1830 NEXT Z
1840 LOCATE ((COM(I,J))+2,C)
1850 PRINT STR$(TOT(I,J))
1860 NEXT J
1870 NEXT I
1880 !
1890 ! *** EDIT CONSOMMATIONS SERVIES ****
1900 !
1910 FOR I=1 TO 3
1920 IF I=1 THEN C=19:CALL COLOR("0Yb"):GOTO 1940
1930 IF I=2 THEN CALL COLOR("0MG"):C=26 ELSE CALL COLOR("0bR"):C=33
1940 NS=-1
1950 FOR J=1 TO NBS(I)
1960 NS=NS+2
1970 LOCATE (SER(I,NS)+2,C)
1980 PRINT SER(I,NS+1)
1990 NEXT J:GOSUB 2140
2000 CALL COLOR("0BW")
2010 NEXT I:LOCATE (1,9):PRINT SCOR
2020 A$=KEY$
2030 IF A$="" THEN B=RND:GOTO 2020
2040 CLS:LOCATE (10,5):PRINT "Voulez vous effectuer"
2050 LOCATE (13,5):PRINT "un nouveau service ? (0/N)"
2060 A$=KEY$
2070 IF A$="" THEN B=RND:GOTO 2060
2080 IF SEG$(A$,1,1)="0" THEN GOTO 280
2090 CLS:LOCATE (10,10):PRINT "Au revoir et ...."
2100 LOCATE (12,10):PRINT "a votre sante !!!"
2110 PAUSE 2:CLS "BCC"
2120 END
2130 !
2140 ! *** DECOMPTE DU SCORE ****
2150 !
2160 IF I=1 THEN SCOR=0:C1=17:C2=20:GOTO 2180
2170 IF I=2 THEN C1=24:C2=27 ELSE C1=31:C2=34
2180 FOR X=1 TO NB(I)
2190 NS=-1
2200 FOR Y=1 TO NBS(I)
2210 NS=NS+2
2220 IF COM(I,X)<>SER(I,NS)THEN GOTO 2240
2230 AA=TOT(I,X):BB=SER(I,NS+1)
2240 NEXT Y
2250 IF AA=BB THEN SCOR=SCOR+AA:GOTO 2280
2260 IF AA>BB THEN SCOR=SCOR+BB:GOTO 2280
2270 SCOR=SCOR+AA
2280 AA=0:BB=0
2290 NEXT X
2300 RETURN
2310 CLS "RYM"
2320 LOCATE (12,2):PRINT "Voulez les regles du jeu (O/N)"
2330 A$=KEY$
2340 RANDOMIZE
2350 IF A$="" THEN B=RND:GOTO 2330
2360 IF A$="O" THEN GOTO 2370 ELSE RETURN
2370 CLS:A$=""
2380 RANDOMIZE
2390 PRINT "Sur la terrasse de votre etablissement"
2400 PRINT "trois tables vont etre occupees par un"
2410 PRINT "nombre variable de clients."
2420 PRINT "Vous allez devoir prendre successivement commandes des tables 1a3."
2430 PRINT "Vous vous rendez ensuite au bar ou vous"
2440 PRINT "chargerez votre plateau des commandes des trois tables."
2450 PRINT "La troisieme etape consiste a repartir"
2460 PRINT "sur les trois tables les consommations effectivement commandees."
2470 PRINT "Un tableau recapitulatif vous rapelle"
2480 PRINT "en fin de service pour chacune des"
2490 PRINT "tables les commandes (C), ce que vous"
2500 PRINT "avez servi (S) et indique votre score."
2510 PRINT:PRINT:PRINT "Bon courage et ... soyez attentif ..."
2520 LOCATE (22,1):PRINT "Appuyez sur une touche pour commencer"
2530 A$=KEY$
2540 RANDOMIZE
2550 IF A$="" THEN GOTO 2530
2560 RANDOMIZE
2570 RETURN
2580 SUB BOX(CD,CA,LD,LA,CO$)
2590 CALL COLOR(CO$)
2600 FOR Y=LD TO LA:FOR X=CD TO CA:LOCATE (Y,X):PRINT " ";
2610 NEXT X:NEXT Y
2620 SUBEND


Ce listing est uniquement proposé pour un usage privé.
Sans accord écrit préalable, vous n'êtes pas autorisé à le distribuer, le transmettre ou le rediffuser.