mirror of
https://github.com/antoinevignau/source.git
synced 2025-02-01 17:31:43 +00:00
502 lines
11 KiB
QBasic
502 lines
11 KiB
QBasic
0 REM [HEX:\
|
||
85,89,89,89,89,89,89,89,\
|
||
89,89,89,89,89,89,89,89,\
|
||
89,89,89,89,89,89,05,00,\
|
||
82,00,00,00,00,00,00,00,\
|
||
88,05,88,88,88,88,00,31,\
|
||
26,00,32,26,2E,38,34,33,\
|
||
00,88,88,88,88,85,88,00,\
|
||
80,82,00,00,00,00,00,00,\
|
||
88,05,88,88,00,29,3A,00,\
|
||
35,37,34,2B,2A,38,38,2A,\
|
||
3A,37,00,88,88,85,88,00,\
|
||
80,80,82,00,00,00,00,00,\
|
||
88,05,88,88,88,88,88,00,\
|
||
2B,34,31,2E,27,3A,38,00,\
|
||
88,88,88,88,88,85,88,00,\
|
||
80,80,80,05,00,00,00,00,\
|
||
85,8A,8A,8A,8A,8A,8A,8A,\
|
||
8A,8A,8A,8A,8A,8A,8A,8A,\
|
||
8A,8A,8A,8A,8A,8A,05,00,\
|
||
80,80,07,00,00,00,00,00,\
|
||
00,00,35,37,34,2C,37,26,\
|
||
32,32,2A,00,2A,28,37,2E,\
|
||
39,00,35,26,37,00,00,00,\
|
||
80,07,00,00,00,00,00,00,\
|
||
00,00,00,00,00,26,31,26,\
|
||
2E,33,00,27,37,2A,2C,2A,\
|
||
34,33,00,00,00,00,00,00,\
|
||
07,00,00,00,00,00,00,00,\
|
||
00,00,35,34,3A,37,00,32,\
|
||
2E,28,37,34,16,38,3E,38,\
|
||
39,2A,32,2A,38,1B,00,76,\
|
||
76,2A,16,40,ED,4B,7B,40,\
|
||
23,7E,FE,76,CA,5B,00,CB,\
|
||
7F,28,F5,0B,78,B1,20,F0,\
|
||
23,7E,CB,7F,20,0D,FE,0C,\
|
||
28,0F,FE,01,20,02,3E,0B,\
|
||
D7,18,ED,CB,BF,D7,C3,5B,\
|
||
00,ED,5B,0E,40,1A,FE,76,\
|
||
28,DE,3E,00,D7,13,18,F5,\
|
||
11,82,40,01,04,06,ED,43,\
|
||
7B,40,D5,CD,F5,08,D1,62,\
|
||
6B,01,17,00,D5,CD,6B,0B,\
|
||
D1,EB,01,20,00,09,EB,ED,\
|
||
4B,7B,40,04,ED,43,7B,40,\
|
||
78,FE,0E,28,02,18,DB,01,\
|
||
07,06,ED,43,7B,40,C9 ]
|
||
|
||
1 REM LES LIGNES 10 A 6040 \
|
||
ET 9000 A 9999 ONT \
|
||
ETE REPRODUITES DE L"OUVRAGE\
|
||
"LE PETIT LIVRE DU ZX81" \
|
||
(D"APRES ÀTHE ZX81 POCKET BOOK"\
|
||
DE PHIPPS ASSOCIATES) AVEC L"\
|
||
AUTORISATION D"EDITIONS DU PSI
|
||
3 GOSUB 8699
|
||
4 SAVE"FOLIBUS2"
|
||
5 RAND USR 16826
|
||
6 FOR Z=0 TO 1000
|
||
7 NEXT Z
|
||
8 POKE 16508,0
|
||
9 CLS
|
||
10 DIM S(10)
|
||
15 DIM C(5)
|
||
20 LET O=20
|
||
30 LET SALLE=1
|
||
40 DIM P$(2,2)
|
||
50 DIM O(O)
|
||
60 FOR X=1 TO O
|
||
70 LET O(X)=Q(X)
|
||
80 NEXT X
|
||
90 RAND
|
||
100 IF NOT S(2) THEN GOTO 200
|
||
110 IF C(2) THEN LET C(2)=C(2)-1
|
||
120 IF S(3) THEN GOTO 200
|
||
130 PRINT "ON NÀY VOIT RIEN,MIEUX VAUDRAIT","ALLUMER POUR EVITER LES ENNUIS."
|
||
140 IF C(3) THEN LET C(3)=C(3)-1
|
||
150 GOTO 1000
|
||
200 REM DESCRIPTION DE LA SALLE
|
||
210 PRINT,,
|
||
220 POKE 16507,SALLE
|
||
230 PRINT USR 16763;"«\
|
||
VOUS ETES DEVANT UNE MAISON£\
|
||
LA PORTE EST OUVERTE–\
|
||
VOUS ETES DANS UN COULOIR,IL Y A\
|
||
UNE PORTE A L¶EST ET UNE PORTE£\
|
||
A L¶OUEST–\
|
||
VOUS ETES DANS UN SALON,IL Y A£\
|
||
UNE PORTE A L¶OUEST–\
|
||
IL Y A UNE DROLE D¶ODEUR–\
|
||
IL Y A UNE GROSSE MACHINE QUI£\
|
||
RESSEMBLE A 1 GENERATRICE AVEC \
|
||
UN BOUTON VERT, UN BOUTON ROUGE \
|
||
IL Y A UNE PORTE AU NORD–\
|
||
UNE MACHINERIE D¶ASCENCEUR,UNE£\
|
||
PORTE AU NORd\
|
||
IL Y A PLEIN DE MATERIEL–\
|
||
VOUS ETES DANS UN ASCENCEUR.IL Y\
|
||
A UN BOUTON HAUT,UN BOUTON BAs\
|
||
L¶ASCENCEUR VIENT DE S¶ARRETER–\
|
||
LA PIECE EST HUMIDE,IL Y A DES£\
|
||
FILS QUI TRAINENT PAR TERRE IL Y\
|
||
A UNE FENETRE ET UNE PORTE AU N–\
|
||
LA PORTE VIENT DE SE REFERMER. \
|
||
BONJOUR..£\
|
||
COMMENT ECRIVEZ VOUS CECI£\
|
||
EN 4 LETTREs\
|
||
VOUS ETES DANS UNE MACHINE A£\
|
||
REMONTER LE TEMPS 3 BOUTONS:£\
|
||
PASSE,PRESENT ET AVENIr\
|
||
VOUS VOUS RETROUVEZ DANS LE£\
|
||
LABORATOIRE DU PROFESSEUR.IL Y A\
|
||
UNE PORTE EN FER A L¶OUEST£\
|
||
PORTE AU SUD MARQUE DANGER–\
|
||
IL Y A UNE DOUCHE,UN TROU DANS£\
|
||
LE SOl\
|
||
IL Y A UN CUBE NOIR D¶AU MOINS£\
|
||
UNE TONNE,UNE ECHELLE MONTE.UNE \
|
||
PORTE A L¶ESt\
|
||
VOUS ETES DANS UNE BIBLIOTHEQUe\
|
||
VOUS ETES DANS UNE SOUCOUPE SUR \
|
||
UNE TERRASSe"
|
||
240 PRINT
|
||
300 LET F=0
|
||
310 FOR X=1 TO O
|
||
320 IF O(X)<>SALLE THEN GOTO 500
|
||
330 IF F THEN GOTO 400
|
||
340 PRINT
|
||
345 PRINT ,,"IL Y A AUSSI:"
|
||
350 LET F=1
|
||
400 PRINT " ";O$(X)
|
||
500 NEXT X
|
||
#
|
||
1000 REM ACCEPTATION DE LA COMMANDE
|
||
1010 LET T=1
|
||
1020 GOTO 2000
|
||
1100 IF C(1) THEN LET C(1)=C(1)-1
|
||
1110 IF C(4) THEN LET C(4)=C(4)-1
|
||
1120 PRINT
|
||
1125 PRINT ,,"QUE FAITES-VOUS? >"
|
||
1130 INPUT Y$
|
||
1140 CLS
|
||
1150 LET Y=0
|
||
1160 PRINT ">";Y$
|
||
1170 LET P$(2)="00"
|
||
1200 FOR W=1 TO 2
|
||
1210 GOSUB 6000
|
||
1220 IF Y>=LEN Y$ THEN GOTO 1300
|
||
1230 IF P$(W)="00" THEN GOTO 1210
|
||
1240 NEXT W
|
||
1300 IF P$(1)<>"00" THEN GOTO 1600
|
||
1310 PRINT "PARDON?"
|
||
1320 GOTO 100
|
||
1600 REM CONTROLE DU MOUVEMENT
|
||
1610 LET Z=1
|
||
1620 LET T$=M$(SALLE)(Z TO Z+1)
|
||
1630 IF T$="00" THEN GOTO 1900
|
||
1640 IF T$<>P$(1) THEN GOTO 1700
|
||
1650 LET SALLE=VAL(M$(SALLE)(Z+2 TO Z+3))
|
||
1660 GOTO 100
|
||
1700 LET Z=Z+4
|
||
1710 GOTO 1620
|
||
1900 LET T=0
|
||
1910 LET CORRESP=0
|
||
2000 REM COTROLE DES CONDITIONS
|
||
2010 LET CP=0
|
||
2100 LET CP=CP+1
|
||
2110 IF NOT T THEN GOTO 2300
|
||
2120 LET E$=C$(CP)
|
||
2130 GOTO 2600
|
||
2300 IF CP<=A THEN GOTO 2400
|
||
2310 IF CORRESP THEN GOTO 1000
|
||
2320 PRINT"IMPOSSIBLE";
|
||
2330 IF VAL(P$(1))<13 THEN PRINT" DE PRENDRE CETTE","DIRECTION";
|
||
2340 PRINT "."
|
||
2350 GOTO 100
|
||
2400 IF A$(CP)(1 TO 2)<>P$(1) THEN GOTO 2100
|
||
2410 LET Y$=A$(CP)(3 TO 4)
|
||
2420 IF Y$<>"00" AND Y$<>P$(2) THEN GOTO 2100
|
||
2430 LET E$=A$(CP)(5 TO)
|
||
2600 REM CONDITIONS
|
||
2610 LET E=1
|
||
2700 IF E$(E)="." THEN GOTO 3000
|
||
2710 LET TYPE=CODE(E$(E))-38
|
||
2720 LET N=VAL(E$(E+1 TO E+2))
|
||
#
|
||
2800 GOSUB 2900+TYPE*10
|
||
#
|
||
2810 IF NOT OK THEN GOTO 2100
|
||
2820 LET E=E+3
|
||
2830 GOTO 2700
|
||
|
||
# A NN: SI NOUS SOMMES DANS LA SALLE NN
|
||
|
||
2900 LET OK=(N=SALLE)
|
||
2905 RETURN
|
||
|
||
# B NN: SI L OBJET NN EST PRESENT OU TRANSPORTE
|
||
|
||
2910 LET OK=(O(N)=SALLE OR O(N)<0)
|
||
2915 RETURN
|
||
|
||
# C NN: SI L OBJET NN EST NON PRESENT OU NON TRANSPORTE
|
||
|
||
2920 LET OK=(O(N)<>SALLE AND O(N)>=0)
|
||
2925 RETURN
|
||
|
||
# D NN: SI L OBJET NN EST TRANSPORTE
|
||
|
||
2930 LET OK=(O(N)<0)
|
||
2935 RETURN
|
||
|
||
# E NN: SI LE POINTEUR NN EST ACTIVE
|
||
|
||
2940 LET OK=S(N)
|
||
2945 RETURN
|
||
|
||
# F NN: SI LE POINTEUR NN N EST PAS ACTIVE
|
||
|
||
2950 LET OK=(NOT S(N))
|
||
2955 RETURN
|
||
|
||
# G NN: SI LE COMPTEUR NN A ATTEINT LA VALEUR 1
|
||
|
||
2960 LET OK=(C(N)=1)
|
||
2965 RETURN
|
||
|
||
# H NN: SI LE NOMBRE ALEATOIRE (1-99) EST INFERIEUR A NN
|
||
|
||
2970 LET OK=((INT(RND*100)+1)<=N)
|
||
2975 RETURN
|
||
|
||
3000 REM ACTIONS
|
||
3010 LET CORRESP=1
|
||
3020 LET E=E+1
|
||
3100 IF E$(E)="." THEN GOTO 2100
|
||
3110 LET TYPE=CODE(E$(E))-38
|
||
3120 IF E$(E+1)<>"." THEN LET N=VAL(E$(E+1 TO E+2))
|
||
3200 LET BREAK=0
|
||
###
|
||
3210 GOSUB 4000+TYPE*100
|
||
###
|
||
3220 IF BREAK THEN GOTO BREAK
|
||
3230 LET E=E+3
|
||
3240 GOTO 3100
|
||
|
||
# A NN: SI NOUS SOMMES DANS LA SALLE NN
|
||
## 4000 GOSUB 2910
|
||
## 4010 RETURN
|
||
|
||
### B NN : TRANSPORTES OBJETS NN
|
||
|
||
### OBJET DANS L'INVENTAIRE
|
||
## 4100 IF O(N)=-1 THEN GOTO 4110
|
||
## 4102 IF Q(SALLE)=0 THEN GOTO 4110
|
||
## 4103 LET OK=1
|
||
## 4105 RETURN
|
||
## 4110 PRINT "UN QUOI?"
|
||
## 4120 LET BREAK=100
|
||
## 4130 RETURN
|
||
4100 IF S(1)<5 THEN GOTO 4140
|
||
4110 PRINT "VOUS NE POUVEZ PORTER PLUS"
|
||
4120 LET BREAK=100
|
||
4130 RETURN
|
||
4140 IF O(N)=-1 THEN GOTO 4180
|
||
4150 LET O(N)=-1
|
||
4160 LET S(1)=S(1)+1
|
||
4170 RETURN
|
||
4180 PRINT "VOUS LÀAVEZ DEJA"
|
||
4190 GOTO 4120
|
||
|
||
### C NN : POSE OBJETS NN
|
||
|
||
4200 IF O(N)=-1 THEN GOTO 4240
|
||
4210 PRINT "VOUS NÀAVEZ PAS ";O$(N)
|
||
4220 LET BREAK=100
|
||
4230 RETURN
|
||
4240 LET O(N)=SALLE
|
||
4250 LET S(1)=S(1)-1
|
||
4260 RETURN
|
||
|
||
### D NN : AFFICHE LE MESSAGE EN 7000+(NN*10)
|
||
|
||
4300 POKE 16507,N
|
||
4310 PRINT USR 16763;"«\
|
||
LA GENERATRICE VIENT D¶EXPLOSER \
|
||
LA MAISON N¶EXISTE PLUS,VOUS NON\
|
||
PLUS–\
|
||
L¶ASCENSSEUR NE BOUGE PAS.£\
|
||
IL FAUT PEUT ETRE DU COURANTŠ\
|
||
LA PORTE VIENT DE SE FERMER£\
|
||
IMPOSSIBLE DE L¶OUVRIr\
|
||
VOUS AVEZ RAISON.LA CURIOSITE£\
|
||
EST UN VILAIN DEFAUT..–\
|
||
L¶ODEUR QUE VOUS SENTIEZ ETAIT£\
|
||
CELLE D¶UN GAZ EXPLOSIF.VOUS£\
|
||
ETES MORT–\
|
||
IL FAUDRAIT PEUT ETRE DU FEU..–\
|
||
AH,AH...VOUS ETES PRISONNIEr\
|
||
VOUS AVEZ DIT PAPIER?QUEL PAPIEr\
|
||
BRAVEZ LES INTERDITS–\
|
||
ELLE A L¶AIR DE S¶EMBALLER..–\
|
||
LA GENERATRICE SE MET EN MARCHe\
|
||
IMPOSSIBLE,ELLE NE VEUT RIEN£\
|
||
SAVOIR–\
|
||
BRAVO,JE NE SAVAIS PAS QUE VOUS£\
|
||
AVIEZ DES DONS D¶ELECTRICIEN–\
|
||
VOTRE MACHINE EST REPAREE.MAIS£\
|
||
ELLE SENT LE CHAUD–\
|
||
LA MACHINE EST REPAREE.DOMMAGE£\
|
||
QU¶IL N¶Y AIT PAS DE COURANT–\
|
||
IL FAUDRAIT PEUT-ETRE DES OUTILs\
|
||
L¶ASCENSEUR SEMBLE MONTER..–\
|
||
L¶ASCENSEUR NE BOUGE PAs\
|
||
LE CABLE VIENT DE CASSER.VOUS£\
|
||
VOUS ECRASEZ EN BAS:MORt\
|
||
IL FAIT NOIR.IL FAUT ALLUMEr\
|
||
VOUS VOUS ECRASEZ AU SOl\
|
||
IL Y A UNE CLEF–\
|
||
LA PORTE EST FERMEE A CLEf\
|
||
TIENS,LA PORTE DU PLACARD SE£\
|
||
REFERME–\
|
||
LA GENERATRICE VIENT D¶EXPLOSER,\
|
||
L¶ASCENSSEUR EST DETRUIT.£\
|
||
VOUS EN ECHAPPEZ DE JUSTESSe\
|
||
VOUS ETES MORT ELECTROCUTe\
|
||
VOUS AVEZ RAISON,RIEN NE SERT DE\
|
||
COURRIR–\
|
||
DEHORS IL FAIT NOIR,ON NE VOIT \
|
||
PAS LE SOL–\
|
||
C¶EST DEJA FAIT–\
|
||
VOUS ETES AU BOUT DE LA CORDE–\
|
||
VRAIMENT PAS AU POINT CETTE£\
|
||
MACHINE.£\
|
||
VOUS ETES MORt\
|
||
IL FAUDRAIT PEUT ETRE OUVRIR LA \
|
||
FENETRE–\
|
||
TANT PIS.ON A ESSAYE–\
|
||
BRAVO,QUEL TRAIT DE GENIE–\
|
||
UNE TRAPPE S¶OUVRE SOUS VOS£\
|
||
PIEDS.VOUS ETES MORT–\
|
||
SAGE PRECAUTION–\
|
||
C¶EST DU POISON.VOUS ETES MORT–\
|
||
VOUS APPRENEZ A PILOTER UNE£\
|
||
SOUCOUPE EN 1 LECOn\
|
||
CA NE SE PILOTE PAS COMME Ca\
|
||
C¶EST DE L¶ACIDE.£VOUS ETES MORT–\
|
||
IL Y A DE L¶EAU.VOUS VOUS NOYEz\
|
||
OUF,VOUS VOUS RETROUVEZ DEHORS.–\
|
||
SAIN ET SAUF..–\
|
||
CA MARCHE...MAIS IL N¶Y AVAIT£\
|
||
PAS ASSEZ DE CARBURANT–\
|
||
MAIS,VOUS ETES TOUT BLEU£\
|
||
CE DOIT ETRE LES PILLULEs\
|
||
ET IRRADIE.VOUS MOUREZ AU BOUT£\
|
||
DE QUELQUES JOURs"
|
||
4315 PRINT
|
||
4320 RETURN
|
||
|
||
### E NN : ACTIVE LE POINTEUR NN
|
||
|
||
4400 LET S(N)=1
|
||
4410 RETURN
|
||
|
||
### F NN : DESACTIVE LE POINTEUR NN
|
||
|
||
4500 LET S(N)=0
|
||
4510 RETURN
|
||
|
||
### G NNMM : FIXE LE COMPTEUR (-) NN A MM
|
||
|
||
4600 LET C(N)=VAL (E$(E+3 TO E+4))
|
||
4610 LET E=E+2
|
||
4620 RETURN
|
||
|
||
### H NN : INVERSE LES LIGNES NN ET NN+1 DANS LE TABEAU OBJET
|
||
|
||
4700 LET X=O(N)
|
||
4710 LET O(N)=O(N+1)
|
||
4720 LET O(N+1)=X
|
||
4730 RETURN
|
||
|
||
### I NN : POSE OBJET NN DANS LA SALLE EN COURS
|
||
|
||
4800 LET O(N)=SALLE
|
||
4810 RETURN
|
||
|
||
### J NN : MET LE NO DE SALLE CONTENANT L OBJET NN A 0
|
||
|
||
4900 IF O(N)<0 THEN LET S(1)=S(1)-1
|
||
4910 LET O(N)=0
|
||
4920 RETURN
|
||
|
||
### K NN : FIXE LE NO DE SALLE EN COURS A LA VALEUR NN
|
||
|
||
5000 LET SALLE=N
|
||
5010 RETURN
|
||
|
||
### L : AFFICHE D ACCORD ET ATTEND
|
||
|
||
5100 PRINT "DÀACCORD."
|
||
|
||
### M : ATTEND UNE NOUVELLE COMMANDE MAIS RESANNE LE TABLEAU DES ACTIONS
|
||
|
||
5200 LET BREAK=1000
|
||
5210 RETURN
|
||
|
||
### N : ATTEND UNE NOUVELLE COMMANDE
|
||
|
||
5300 LET BREAK=1100
|
||
5310 RETURN
|
||
|
||
### O : AFFICHE LA DESCRIPTION DE LA SALLE EN COURS
|
||
|
||
5400 LET BREAK=100
|
||
5410 RETURN
|
||
|
||
### P : ETES VOUS SURE ? >>> STOP
|
||
|
||
5500 PRINT "ETES VOUS SUR ?";
|
||
5510 INPUT W$
|
||
5520 PRINT W$
|
||
5530 IF CHR$ CODE W$<>"O" THEN RETURN
|
||
|
||
### Q : STOP
|
||
|
||
5600 GOTO 9999
|
||
|
||
### R : INVENTAIRE
|
||
### AFFICHE LA LISTE DES OBJETS TRANSPORTES
|
||
###
|
||
5700 PRINT
|
||
5710 PRINT "VOUS TENEZ:"
|
||
5720 LET F=1
|
||
5730 FOR X=1 TO O
|
||
5740 IF O(X)>=0 THEN GOTO 5770
|
||
5750 PRINT " ";O$(X)
|
||
5760 LET F=0
|
||
5770 NEXT X
|
||
5780 IF F THEN PRINT ,"RIEN."
|
||
5790 LET BREAK=100
|
||
5795 RETURN
|
||
|
||
### S PRENDRE UN OBJET
|
||
5800 IF S(1)<5 THEN GOTO 4140
|
||
5810 PRINT "VOUS NE POUVEZ PORTER PLUS"
|
||
5820 LET BREAK=100
|
||
5830 RETURN
|
||
5840 IF O(N)=-1 THEN GOTO 4180
|
||
5850 LET O(N)=-1
|
||
5860 LET S(1)=S(1)+1
|
||
5870 RETURN
|
||
5880 PRINT "VOUS LÀAVEZ DEJA"
|
||
5890 GOTO 4120
|
||
|
||
6000 REM ANALYSE LE MOT
|
||
6010 DIM W$(4)
|
||
6015 LET P$(W)="00"
|
||
6020 GOSUB 6600
|
||
6025 IF FIN THEN RETURN
|
||
6030 FOR Q=1 TO 4
|
||
6040 LET W$(Q)=Y$(Y)
|
||
6050 GOSUB 6500
|
||
6060 IF FIN THEN GOTO 6100
|
||
6070 NEXT Q
|
||
6080 GOSUB 6500
|
||
6090 IF NOT FIN THEN GOTO 6080
|
||
6100 IF W$=" " THEN RETURN
|
||
6110 FOR Q=1 TO V
|
||
6120 IF W$=V$(Q)(3 TO) THEN GOTO 6200
|
||
6130 NEXT Q
|
||
6140 RETURN
|
||
6200 LET P$(W)=V$(Q)(TO 2)
|
||
6210 RETURN
|
||
6500 LET Y=Y+1
|
||
6510 LET FIN=(Y>LEN Y$)
|
||
6520 IF FIN THEN RETURN
|
||
6530 LET FIN=(Y$(Y)=" ")
|
||
6540 RETURN
|
||
6600 LET Y=Y+1
|
||
6610 LET FIN=(Y>LEN Y$)
|
||
6620 IF FIN THEN RETURN
|
||
6630 IF Y$(Y)=" " THEN GOTO 6600
|
||
6640 RETURN
|
||
8699 LET V=73
|
||
8700 DIM V$(73,6)
|
||
8799 LET R=18
|
||
8800 DIM M$(18,14)
|
||
8819 LET O=20
|
||
8899 DIM Q(20)
|
||
8900 DIM O$(21,16)
|
||
8950 DIM Q(20)
|
||
8980 LET C=13
|
||
8981 LET CP=0
|
||
9000 DIM C$(13,21)
|
||
9014 LET A=92
|
||
9100 DIM A$(92,31)
|
||
9193 RETURN
|
||
9997 REM
|
||
9998 REM TAPEZ GOTO 10 POUR REJOUER.
|
||
9999 LIST 9997
|