forked from robhagemans/basicode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path14_Car_race.bc2
253 lines (252 loc) · 7.57 KB
/
14_Car_race.bc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
1000 A=100:GOTO20:REM CAR RACE
1010 HS=0
1020 REM *** CAR RACE ***
1030 REM
1040 GOSUB100:PRINT
1050 PRINT"Do you want instructions (Y/N)?";:GOSUB210
1060 IF(IN$="Y") OR(IN$="y") THENGOSUB2590
1070 DIMSD(5),CT(4,2),FE(39,23)
1080 DIMJ(39,23),AS(256),WI(4,4)
1090 REM
1100 REM *** INIT ARRAYS ***
1110 REM
1120 FORI=1 TO5:READSD(I):NEXTI
1130 FORI=1 TO4:FORJ=1 TO4:READWI(I,J):NEXTJ:NEXTI
1140 FORI=0 TO2:FORJ=0 TO4:READCT(J,I):NEXTJ,I
1150 REM
1160 AS(ASC(" "))=0:AS(ASC("."))=0
1170 AS(ASC("O"))=1:AS(ASC("!"))=-1:AS(ASC("-"))=-1
1180 REM
1190 REM *** SHOW RACE FIELD & INIT ARRAYS ***
1200 REM
1210 GOSUB100:PRINT
1220 FORI=1 TO22
1230 READFE$:PRINTFE$;
1240 FORJ=0 TO39
1250 FE(J,I)=AS(ASC(MID$(FE$,J+1,1)))
1260 NEXTJ
1270 NEXTI
1280 HO=17:VE=10:GOSUB110:PRINT"SCORE:";
1290 HO=8:VE=8:GOSUB110:PRINT"High score: ";HS;
1300 FORI=2 TO6:J(19,I)=2:J(20,I)=1:NEXTI
1310 FORI=17 TO21:J(19,I)=1:J(20,I)=2:NEXTI
1320 FORI=1 TO5:J(I,11)=1:J(I,12)=2:NEXTI
1330 FORI=34 TO38:J(I,12)=1:J(I,11)=2:NEXTI
1340 DH=0:DV=0:TH=0:TV=0:IN=0
1350 FC=0:F=0:CS=0:PU=0:P1=0:BO=0
1360 REM
1370 REM *** FIRST SET ***
1380 REM
1390 VE=21:CV=21:SV=21:HO=1:CH=1:GOSUB110
1400 PRINT"%";:HO=38:SH=38:GOSUB110:PRINT"&";
1410 HO=12:VE=13:GOSUB110
1420 GOSUB250:GOSUB250
1430 PRINT"press any key ";:GOSUB210
1440 HO=12:VE=13:GOSUB110
1450 PRINT"..............";
1460 CT=1:DT=1:GT=1:TT=1
1470 CR=1:SR=1
1480 IFBO=0 THENPU=0:P1=0
1490 REM
1500 REM *** CONTROL THE CARS ***
1510 REM
1520 REM *** COMPUTER'S CAR ***
1530 REM
1540 CS=CS+1:IFCS=3 THENCS=0:GOTO1610
1550 DH=CH:DV=CV
1560 ONCR+1 GOTO1610,1570,1580,1590,1600
1570 CV=CV-1:GOTO1610
1580 CH=CH+1:GOTO1610
1590 CV=CV+1:GOTO1610
1600 CH=CH-1
1610 IF(CV=SV) AND(CH=SH) THEN1950:REM CRASH?
1620 REM
1630 REM *** PLAYER'S CAR ***
1640 REM
1650 TH=SH:TV=SV
1660 IFFE(CH,CV)=-1 THENGOSUB1890:GOTO1560
1670 IF(J(CH,CV)=2) OR(FC=1) THENCS=0:GOSUB2430
1680 ONSR+1 GOTO1730,1690,1700,1710,1720
1690 SV=SV-1:GOTO1730
1700 SH=SH+1:GOTO1730
1710 SV=SV+1:GOTO1730
1720 SH=SH-1:GOTO1730
1730 IF(CV=SV) AND(CH=SH) THEN1950:REM CRASH?
1740 IFFE(SH,SV)=-1 THENGOSUB1920:GOTO1680
1750 IF(J(SH,SV)=1) OR(F=1) THENGOSUB2190
1760 REM
1770 REM *** OUTPUT ***
1780 REM
1790 IFFE(DH,DV)=1 THENAU$="O":GOTO1810
1800 AU$=" "
1810 HO=CH:VE=CV:GOSUB110:PRINT"%";
1820 HO=DH:VE=DV:GOSUB110:PRINTAU$;
1830 HO=SH:VE=SV:GOSUB110:PRINT"&";
1840 HO=TH:VE=TV:GOSUB110:PRINT" ";
1850 IFFE(TH,TV)=1 THENPU=PU+1:FE(TH,TV)=0
1860 VE=11:HO=19:GOSUB110:PRINTPU;
1870 IFPU-P1=264 THEN2080
1880 GOTO1490
1890 CH=DH:CV=DV
1900 CR=CR+1:IFCR>4 THENCR=1
1910 RETURN
1920 SH=TH:SV=TV
1930 SR=SR-1:IFSR<1 THENSR=4
1940 RETURN
1950 REM
1960 REM *** CRASH ***
1970 REM
1980 HO=CH:VE=CV:GOSUB110:PRINT"*";
1990 HO=14:VE=13:GOSUB110:PRINT"EXPLOSION !";
2000 FORI=1 TO5:GOSUB250:NEXTI
2010 VE=14:GOSUB110:PRINT"AGAIN (Y/N)?";
2020 IFPU>HS THENHS=PU
2030 PU=0:P1=0:BO=0
2040 GOSUB210
2050 IF(IN$="N") OR(IN$="n") THEN2880
2060 IF(IN$="Y") OR(IN$="y") THENRESTORE:GOTO1090
2070 GOTO2040
2080 REM
2090 REM *** BONUS ***
2100 REM
2110 HO=17:VE=13:GOSUB110:BO=BO+1
2120 PRINT"BONUS-GAME !";
2130 FORI=1 TO8:GOSUB250:NEXTI
2140 VE=14:GOSUB110:PRINT"press 'S':";
2150 GOSUB210
2160 IF(IN$<>"S") AND(IN$<>"s") THEN2150
2170 P1=PU:IFPU>HS THENHS=PU
2180 RESTORE:GOTO1090
2190 REM
2200 REM *** CHANGE PLAYERS TRACK ***
2210 REM
2220 IFF=1 THENF=0:GOTO2420
2230 GOSUB200
2240 IFIN$="" THEN2390
2250 IF(IN$<"I") OR(IN$>"M") THEN2390
2260 PH=0:PV=0
2270 ONASC(IN$)-ASC("H") GOTO2280,2360,2320,2390,2340
2280 PH=0:IFWI(SR,1)=1 THENPV=-1
2290 ONSR+1 GOTO2400,2400,2300,2400,2310
2300 GT=GT+1:GOTO2400
2310 GT=GT-1:GOTO2400
2320 IFWI(SR,2)=1 THENPH=1
2330 ONSR+1 GOTO2400,2310,2400,2300,2400
2340 IFWI(SR,3)=1 THENPV=1
2350 ONSR+1 GOTO2400,2400,2310,2400,2300
2360 IFWI(SR,4)=1 THENPH=-1
2370 ONSR+1 GOTO2400,2300,2400,2310,2400
2380 GOTO2400
2390 RETURN
2400 F=1
2410 SH=SH+PH:SV=SV+PV:RETURN
2420 SH=SH+PH:SV=SV+PV:RETURN
2430 REM
2440 REM *** CHANGE COMPUTERS TRACK ***
2450 REM
2460 IFFC=1 THENFC=0:GOTO2580
2470 DT=0:IFGT<CT THENDT=-1:GOTO2490
2480 IFGT>CT THENDT=1
2490 IN=CT(CR,DT+1):CT=CT+DT
2500 ONIN+1 GOTO2550,2510,2520,2530,2540
2510 QH=0:QV=-1:GOTO2560
2520 QH=1:QV=0:GOTO2560
2530 QH=0:QV=1:GOTO2560
2540 QH=-1:QV=0:GOTO2560
2550 RETURN
2560 FC=1
2570 CH=CH+QH:CV=CV+QV:RETURN
2580 CH=CH+QH:CV=CV+QV:RETURN
2590 REM
2600 REM *** INSTRUCTIES ***
2610 REM
2620 GOSUB100:PRINTTAB(16);"CAR RACE"
2630 PRINTTAB(16);"========"
2640 PRINT
2650 PRINT"The aim of the game is to drive with"
2660 PRINT"your car '&' over all 'O's and to"
2670 PRINT"escape the '%' (computer)."
2680 PRINT
2690 PRINT"But be careful!"
2700 PRINT"Your computer is watching you !!"
2710 PRINT
2720 PRINT"You can change the track by pressing "
2730 PRINT"following keys:"
2740 PRINT" 'I': change to upper track"
2750 PRINT" 'K': change to right track"
2760 PRINT" 'M': change to lower track"
2770 PRINT" 'J': change to left track"
2780 PRINT
2790 PRINT"You start at the low right corner."
2800 PRINT"Computer starts at the low left corner."
2810 PRINT
2820 PRINT"Notice that only CAPITAL LETTERS will"
2830 PRINT"be accepted !"
2840 PRINT
2850 PRINT"Any key starts the game !";
2860 GOSUB210
2870 RETURN
2880 REM
2890 REM *** END ***
2900 REM
2910 GOSUB100
2920 PRINT"written on BASIS 108 by:"
2930 PRINT
2940 PRINT"Dirk Bolte";TAB(20);"write me your"
2950 PRINT"Doerdelstr.46a";TAB(20);"experiences !"
2960 PRINT"4630 Bochum 7"
2970 PRINT"-------------"
2980 PRINT" Germany ":PRINT
2990 PRINT"----------------------------------------";
3000 PRINT"P.S.:"
3010 PRINT
3020 PRINT"You may change the difficulty "
3030 PRINT"by altering"
3040 PRINT" 'IF CS = 3 THEN...'"
3050 PRINT"to 'IF CS = ? THEN...' in line 1540"
3060 PRINT" ^ enter here any digit"
3070 PRINT"If possible: ":PRINT
3080 PRINTTAB(10);"compile this program !"
3090 PRINT"You'll be surprised about the speed !!";
3100 END
25000 DATA 1,4,2,0,3
25010 DATA 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0
25020 DATA 0,4,1,2,3,0,0,0,0,0,0,2,3,4,1
25030 REM
25040 REM *** RACE FIELD ***
25050 REM
25060 DATA "----------------------------------------"
25070 DATA "!OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO!"
25080 DATA "!O----------------- -----------------O!"
25090 DATA "!O!OOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOO!O!"
25100 DATA "!O!O--------------- ---------------O!O!"
25110 DATA "!O!O!OOOOOOOOOOOOOO OOOOOOOOOOOOOO!O!O!"
25120 DATA "!O!O!O----------------------------O!O!O!"
25130 DATA "!O!O!O!..........................!O!O!O!"
25140 DATA "!O!O!O!..........................!O!O!O!"
25150 DATA "!O!O!O!..........................!O!O!O!"
25160 DATA "! !..........................! !"
25170 DATA "! !..........................! !"
25180 DATA "!O!O!O!..........................!O!O!O!"
25190 DATA "!O!O!O!..........................!O!O!O!"
25200 DATA "!O!O!O!..........................!O!O!O!"
25210 DATA "!O!O!O----------------------------O!O!O!"
25220 DATA "!O!O!OOOOOOOOOOOOOO OOOOOOOOOOOOOO!O!O!"
25230 DATA "!O!O--------------- ---------------O!O!"
25240 DATA "!O!OOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOO!O!"
25250 DATA "!O----------------- -----------------O!"
25260 DATA "!OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO!"
25270 DATA "----------------------------------------"
30000 REM
30010 REM
30020 REM
30030 REM written on BASIS 108 by
30040 REM
30050 REM DIRK BOLTE
30060 REM DOERDELSTRASSE 46 A
30070 REM 4630 BOCHUM 7
30080 REM =============
30090 REM WEST-GERMANY
30100 REM
30110 REM IN JUNE 1983
30120 REM