-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathOthelloColour.b3c
More file actions
393 lines (393 loc) · 11.4 KB
/
OthelloColour.b3c
File metadata and controls
393 lines (393 loc) · 11.4 KB
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
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
1000 A=200:GOTO 20:REM OTHELLO
1010 HO=INT (HO/4):VE=INT (VE/3):GOSUB 110
1020 NM=0:WU=0:CO=0:C2=0:DIM CC(2)
1030 SR$="O T H E L L O"
1040 CC(0)=4:GOSUB 150:CC(0)=7
1050 VE=VE+4:HO=HO+1:GOSUB 110
1060 PRINT "J. Simons 1988"
1070 VE=VE+8:GOSUB 110
1080 PRINT "Wil je de handleiding? (J/N)"
1090 GOSUB 210
1100 IF (IN<> 74) AND (IN<> 78) THEN GOTO 1090
1110 IF IN=74 THEN GOSUB 9010
1120 GOSUB 600:CN=0
1130 HO=0.34:VE=0.015:CC(0)=2:SR$="O T H E L L O":GOSUB 650
1140 HO=0.01:VE=0.001:CC(0)=7:GOSUB 620
1150 HO=0.99:GOSUB 630:VE=0.055:GOSUB 630
1160 HO=0.01:GOSUB 630:VE=0.001:GOSUB 630
1170 HO=0.01:VE=0.88
1180 SR$="SPATIE zoeken":GOSUB 650
1190 HO=0.52
1200 SR$="ENTER selecteren":GOSUB 650
1210 HO=0.01::VE=0.7:CC(0)=4:SR$="Ik":GOSUB 650
1220 HO=0.9:CC(0)=2:SR$="Jij":GOSUB 650
1230 HO=0.01:VE=0.78:CC(0)=7:GOSUB 620
1240 HO=0.11:GOSUB 630:VE=0.85:GOSUB 630
1250 HO=0.01:GOSUB 630:VE=0.78:GOSUB 630
1260 HO=0.9:VE=0.78:GOSUB 620
1270 HO=0.99:GOSUB 630:VE=0.85:GOSUB 630
1280 HO=0.9:GOSUB 630:VE=0.78:GOSUB 630
1290 SD=0:DL=0
1300 DIM A(8,8),B(8,8),C(8,8),D(8,8),E(8,8),F(8,8),G(8,8)
1310 DIM P1(60),P2(60),T1(60),T2(60),RG(60),HM(60)
1320 A(4,4)=1:A(5,4)=-1:A(4,5)=-1:A(5,5)=1
1330 PN=0
1340 FOR J1=1 TO 8
1350 FOR J2=1 TO 8
1360 READ C(J1,J2)
1370 NEXT J2
1380 NEXT J1
1390 FOR J1=1 TO 8
1400 FOR J2=1 TO 8
1410 D(J1,J2)=1
1420 NEXT J2
1430 NEXT J1
1440 D(3,3)=0:D(3,4)=0:D(3,5)=0:D(3,6)=0
1450 D(4,3)=0:D(4,6)=0:D(5,3)=0:D(5,6)=0
1460 D(6,3)=0:D(6,4)=0:D(6,5)=0:D(6,6)=0
1470 GOSUB 3000
1480 HO=0.27:VE=0.07:SR$="Nivo (1) of (2) ?":GOSUB 650
1490 GOSUB 210
1500 IF (IN$<> "1") AND (IN$<> "2") THEN GOTO 1490
1510 CN=1:GOSUB 650:CN=0
1520 HE=IN-49
1530 GOSUB 260:PL=RV*10
1540 IF PL<5 THEN PL=-1:GOTO 2000
1550 PL=1
2000 PL=-PL
2010 GOSUB 250
2020 HO=0.01:VE=0.07
2030 CN=1:SR$="Mijn beurt":GOSUB 650
2040 SR$="Jouw beurt":GOSUB 650:CN=0
2050 SR$="Momentje...":GOSUB 650
2060 GOSUB 3300
2070 IF PM=0 THEN GA=GA+1:IF GA=2 THEN GOSUB 6600
2080 IF PM=0 THEN GOTO 2000
2090 GA=0
2100 CN=1:GOSUB 650:CN=0
2110 IF PL<> 1 THEN GOTO 2130
2120 SR$="Jouw beurt":CC(0)=2:GOSUB 650:CC(0)=7:GOTO 2150
2130 GOSUB 250
2140 SR$="Mijn beurt":CC(0)=4:GOSUB 650:CC(0)=7
2150 IF PL=-1 THEN GOSUB 5800:GOSUB 6000:GOTO 2170
2160 GOSUB 4100
2170 NM=NM+1
2180 IF NM=60 THEN GOSUB 6600:GOTO 3000
2190 GOTO 2000
3000 FOR HO=0.23 TO 0.77 STEP 0.067
3010 VE=0.13:CN=0:GOSUB 620
3020 VE=0.85:GOSUB 630
3030 NEXT HO
3040 FOR VE=0.13 TO 0.86 STEP 0.09
3050 HO=0.23:GOSUB 620
3060 HO=0.76:GOSUB 630
3070 NEXT VE
3080 FOR J=1 TO 8
3090 FOR K=1 TO 8
3100 HO=(50+J*18)/270:VE=(14+(9-K)*18)/200
3110 CN=1:SR$=".":GOSUB 650:SR$="X":GOSUB 650
3120 SR$="O":GOSUB 650:CN=0
3130 IF A(J,K)+4=3 THEN SR$="X":CC(0)=4
3140 IF A(J,K)+4=4 THEN SR$=""
3150 IF A(J,K)+4=5 THEN SR$="O":CC(0)=2
3160 GOSUB 650
3170 NEXT K
3180 NEXT J
3190 HO=0.03:VE=0.8:CN=1:SR=CO:GOSUB 300:GOSUB 650
3200 HO=0.92:SR=C2:GOSUB 300:GOSUB 650:CN=0
3210 GOSUB 6500
3220 HO=0.03:VE=0.8
3230 SR=CO:GOSUB 300:CC(0)=4:GOSUB 650
3240 HO=0.92
3250 SR=C2:GOSUB 300:CC(0)=2:GOSUB 650:CC(0)=7:RETURN
3300 PM=0
3310 FOR X=1 TO 8
3320 FOR Y=1 TO 8
3330 IF (A(X,Y)<> 0) OR (D(X,Y)=1) THEN GOTO 3350
3340 GOSUB 3400
3350 NEXT Y
3360 NEXT X
3370 IF (PM=0) AND (DL=0) THEN GOSUB 5600
3380 RETURN
3400 KO=0:X1=X:Y1=Y:C=0
3410 C=C+1:GOSUB 4000:J=0
3420 J=J+1
3430 SE=X1+XD:SI=Y1+YD
3440 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
3450 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 3520
3460 X1=X1+XD:Y1=Y1+YD
3470 IF A(X1,Y1)<> -PL THEN J=8:GOTO 3520
3480 SE=X1+XD:SI=Y1+YD
3490 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
3500 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 3520
3510 IF A(X1+XD,Y1+YD)=PL THEN J=8:C=8:KO=1
3520 IF J<8 THEN GOTO 3420
3530 X1=X:Y1=Y:IF C<8 THEN GOTO 3410
3540 IF KO=1 THEN PM=PM+1:P1(PM)=X:P2(PM)=Y
3550 RETURN
4000 ON C GOTO 4010,4020,4030,4040,4050,4060,4070,4080
4010 XD=0:YD=-1:RETURN
4020 XD=1:YD=-1:RETURN
4030 XD=1:YD=0:RETURN
4040 XD=1:YD=1:RETURN
4050 XD=0:YD=1:RETURN
4060 XD=-1:YD=1:RETURN
4070 XD=-1:YD=0:RETURN
4080 XD=-1:YD=-1:RETURN
4100 ZZ=0
4110 N=0
4120 N=N+1
4130 GOSUB 4300
4140 GOSUB 5500
4150 GOSUB 4400:IF AD=2 THEN GOSUB 250:GOTO 4170
4160 IF AD=0 THEN GOTO 4130
4170 IF AD=2 THEN GOSUB 4300:ZZ=N:N=PM
4180 IF N<> PM THEN GOTO 4120
4190 IF ZZ=0 THEN GOTO 4110
4200 A(P1(ZZ),P2(ZZ))=PL
4210 GOSUB 6100
4220 X=P1(ZZ):Y=P2(ZZ)
4230 GOSUB 5660:GOSUB 4500:GOSUB 3000
4240 AD=0:PN=0:RETURN
4300 GOSUB 250
4310 HO=(50+P1(N)*18)/270
4320 VE=(14+(9-P2(N))*18)/200
4330 SR$=".":GOSUB 650:RETURN
4400 CN=1:GOSUB 650:CN=0:RETURN
4500 GOSUB 4700:KO=0:X1=X:Y1=Y:C=0
4510 C=C+1:GOSUB 4000:J=0
4520 J=J+1
4530 SE=X1+XD:SI=Y1+YD
4540 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
4550 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 4630
4560 X1=X1+XD:Y1=Y1+YD
4570 IF B(X1,Y1)<> -PL THEN J=8:GOTO 4630
4580 B(X1,Y1)=PL
4590 SE=X1+XD:SI=Y1+YD
4600 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN J=8
4610 IF (SE<1) OR (SE>8) OR (SI<1) OR (SI>8) THEN GOTO 4630
4620 IF B(X1+XD,Y1+YD)=PL THEN J=8:KO=1
4630 IF J<8 THEN GOTO 4520
4640 IF KO=1 THEN GOSUB 4800:KO=0
4650 IF KO<> 1 THEN GOSUB 4700
4660 X1=X:Y1=Y
4670 IF C<8 THEN GOTO 4510
4680 RETURN
4700 FOR J=1 TO 8
4710 FOR K=1 TO 8
4720 B(J,K)=A(J,K)
4730 NEXT K
4740 NEXT J
4750 RETURN
4800 FOR J=1 TO 8
4810 FOR K=1 TO 8
4820 A(J,K)=B(J,K)
4830 NEXT K
4840 NEXT J
4900 RETURN
4910 FOR J=1 TO 8
4920 FOR K=1 TO 8
4930 E(J,K)=A(J,K)
4940 NEXT K
4950 NEXT J
4960 RETURN
5000 FOR J=1 TO 8
5010 FOR K=1 TO 8
5020 A(J,K)=E(J,K)
5030 NEXT K
5040 NEXT J
5050 RETURN
5100 FOR J=1 TO 8
5110 FOR K=1 TO 8
5120 F(J,K)=D(J,K)
5130 NEXT K
5140 NEXT J
5150 RETURN
5200 FOR J=1 TO 8
5210 FOR K=1 TO 8
5220 D(J,K)=F(J,K)
5230 NEXT K
5240 NEXT J
5250 RETURN
5300 FOR J=1 TO 8
5310 FOR K=1 TO 8
5320 G(J,K)=C(J,K)
5330 NEXT K
5340 NEXT J
5350 RETURN
5400 FOR J=1 TO 8
5410 FOR K=1 TO 8
5420 C(J,K)=G(J,K)
5430 NEXT K
5440 NEXT J
5450 RETURN
5500 GOSUB 210
5510 IF IN$=" " THEN AD=1:RETURN
5520 IF IN$=CHR$ (13) THEN AD=2:RETURN
5530 GOTO 5500
5600 GOSUB 250
5610 HO=0.01:VE=0.07:CN=1:GOSUB 650:CN=0
5620 IF PL=-1 THEN SR$="Ik kan niet zetten":GOTO 5640
5630 SR$="Jij kunt niet zetten"
5640 GOSUB 650
5650 SD=40:GOSUB 450
5655 CN=1:GOSUB 650:CN=0
5660 XX=X:YY=Y
5670 FOR C=1 TO 8
5680 GOSUB 4000:NX=XX+XD:NY=YY+YD
5690 IF (NX<1) OR (NX>8) OR (NY<1) OR (NY>8) THEN GOTO 5710
5700 D(NX,NY)=0
5710 NEXT C:RETURN
5800 IF (NM>11) AND (HE=1) THEN GOSUB 6200
5810 BM=-3000
5820 FOR N=1 TO PM
5830 TC=C(P1(N),P2(N)):IF TC>BM THEN BM=TC
5840 NEXT N
5850 FOR N=1 TO PM
5860 RG(N)=N
5870 NEXT N
5880 FOR N=1 TO PM
5890 GOSUB 260
5900 FF=RV*PM:GG=RV*PM:HH=RG(FF):RG(FF)=RG(GG):RG(GG)=HH
5910 NEXT N
5920 N=0
5930 N=N+1
5940 IF C(P1(RG(N)),P2(RG(N)))<> BM THEN GOTO 5930
5950 A(P1(RG(N)),P2(RG(N)))=PL
5960 X=P1(RG(N)):Y=P2(RG(N))
5970 IF (NM>11) AND (HE=1) THEN GOSUB 5400
5980 X=P1(RG(N)):Y=P2(RG(N)):GOSUB 6100:RETURN
6000 N=0
6010 N=N+1:GOSUB 4300:GOSUB 250
6020 FOR WT=1 TO 800
6030 NEXT WT
6040 GOSUB 4400
6050 IF A(P1(N),P2(N))<> PL THEN GOTO 6010
6060 GOSUB 4300:GOSUB 250
6070 GOSUB 5660:GOSUB 4500:GOSUB 3000:RETURN
6100 IF PL=-1 THEN FH=800:TH=500
6110 IF PL<> -1 THEN FH=500:TH=300
6120 IF (X=1) AND (Y=1) THEN C(2,1)=FH:C(1,2)=FH:C(2,2)=TH
6130 IF (X=1) AND (Y=8) THEN C(1,7)=FH:C(2,8)=FH:C(2,7)=TH
6140 IF (X=8) AND (Y=1) THEN C(7,1)=FH:C(8,2)=FH:C(7,2)=TH
6150 IF (X=8) AND (Y=8) THEN C(8,7)=FH:C(7,8)=FH:C(7,7)=TH
6160 RETURN
6200 DL=1:TP=PM
6210 FOR JJ=1 TO PM
6220 T1(JJ)=P1(JJ):T2(JJ)=P2(JJ)
6230 NEXT JJ
6240 FOR ZZ=1 TO PM
6250 PL=-1:GOSUB 4910:GOSUB 5100:GOSUB 6500
6260 C1=C2:A(T1(ZZ),T2(ZZ))=PL:X=P1(ZZ)
6270 Y=P2(ZZ):GOSUB 5660:GOSUB 4500:GOSUB 6500
6280 CO=C1-C2*NM/50:PL=1
6290 GOSUB 3300
6300 HM(ZZ)=CO
6310 FOR HM=1 TO PM
6320 HM(ZZ)=HM(ZZ)+C(P1(HM),P2(HM))
6330 NEXT HM
6340 HM(ZZ)=HM(ZZ)/(PM+1)
6350 GOSUB 5000:GOSUB 5200
6360 NEXT ZZ
6370 PM=TP
6380 FOR JJ=1 TO PM
6390 P1(JJ)=T1(JJ):P2(JJ)=T2(JJ)
6400 NEXT JJ
6410 GOSUB 5300
6420 FOR Z=1 TO PM
6430 C(P1(Z),P2(Z))=C(P1(Z),P2(Z))-HM(Z)
6440 NEXT Z
6450 DL=0:PL=-1:RETURN
6500 CO=0:C2=0
6510 FOR CC=1 TO 8
6520 FOR CD=1 TO 8
6530 IF A(CC,CD)=1 THEN C2=C2+1
6540 IF A(CC,CD)=-1 THEN CO=CO+1
6550 NEXT CD
6560 NEXT CC
6570 IF (DL=0) AND (CO=0) OR (DL=0) AND (C2=0) THEN WU=1
6580 IF WU=1 THEN GOTO 6600
6590 RETURN
6600 IF (DL=0) AND (CO=0) OR (DL=0) AND (C2=0) THEN GOTO 6620
6610 GOSUB 6500
6620 GOSUB 250:HO=0.01:VE=0.07
6630 CN=1:SR$="Mijn beurt":GOSUB 650
6640 SR$="Jouw beurt":GOSUB 650:CN=0
6650 IF C2>CO THEN SR$="Goed zo !! Je hebt gewonnen."
6660 IF C2<CO THEN SR$="Helaas!! Je hebt verloren."
6670 IF C2=CO THEN SR$="Gelijk spel!"
6680 GOSUB 650
6690 SD=20:GOSUB 450
6695 CN=1:GOSUB 650:CN=0
6700 HO=0.01:VE=0.07:CN=1:GOSUB 650:CN=0
6710 SR$="Wil je nog een keer?":GOSUB 650
6720 GOSUB 210:IF IN=74 THEN GOTO 1000
6730 IF IN=78 THEN GOTO 950
6740 GOTO 6720
9000 REM *** uitleg ***
9010 GOSUB 100
9020 SR$="S p e l r e g e l s":CC(0)=2:GOSUB 150:CC(0)=7
9030 PRINT :PRINT
9040 PRINT "Dit programma is een BASICODE versie"
9050 PRINT "van het bekende spel Othello."
9060 PRINT "Op een bord van 8 x 8 vakjes"
9070 PRINT "zetten jij en de computer om de"
9080 PRINT "beurt een speelstuk."
9090 PRINT :PRINT "Jouw stukken worden aangegeven met O,"
9100 PRINT "de stukken van de computer met X."
9110 PRINT "Je mag alleen een stuk zetten op een"
9120 PRINT "veld als je met die zet een of meer"
9130 PRINT "stukken van de computer kunt"
9140 PRINT "insluiten."
9150 PRINT "Dit insluiten kan in horizontale,"
9160 PRINT "verticale en diagonale richting."
9170 PRINT "De velden, die je insluit worden dan"
9180 PRINT "met je eigen stukken bezet."
9190 PRINT "Het doel van het spel is zoveel"
9200 PRINT "mogelijk velden te bezetten."
9210 GOSUB 9390
9220 PRINT :PRINT "Het spel eindigt, wanneer alle velden"
9230 PRINT "met een stuk bezet zijn. Wie dan de"
9240 PRINT "meeste velden bezet heeft, heeft het"
9250 PRINT "spel gewonnen."
9260 PRINT "Je kunt niet zetten op velden, waar je"
9270 PRINT "geen stukken van de computer kunt"
9280 PRINT "insluiten. De computer geeft d.m.v."
9290 PRINT "een punt aan op welke velden je mag"
9300 PRINT "zetten. Door op de spatiebalk te"
9310 PRINT "drukken kun je achtereenvolgens zien"
9320 PRINT "op welke velden je mag zetten."
9330 PRINT "Je kunt dan een veld kiezen met"
9340 PRINT "de ENTER of RETURN toets op het"
9350 PRINT "moment, dat de punt op het veld"
9360 PRINT "van je keuze staat."
9370 PRINT :PRINT "Veel plezier ermee..."
9380 GOSUB 9390:RETURN
9390 PRINT :PRINT "Druk op een toets ..."
9400 GOSUB 210
9410 GOSUB 100:RETURN
25000 DATA 1499,-504,118,98,102,121
25010 DATA -499,1504,-510,-999,21,11
25020 DATA 12,19,-1000,-500,119,19
25030 DATA 49,29,31,49,19,119,99
25040 DATA 10,30,0,0,31,11,99,99
25050 DATA 9,31,0,0,29,11,99,119
25060 DATA 21,49,31,29,51,21,121
25070 DATA -501,-999,21,11,9,21
25080 DATA -999,-501,1501,-501
25090 DATA 121,101,99,121,-501,1499
32000 REM
32010 REM ************************
32020 REM * *
32030 REM * OTHELLO *
32040 REM * *
32050 REM * J.P.M. SIMONS *
32060 REM * STATIONSSTRAAT 11 *
32070 REM * 4872 TA ETTEN-LEUR *
32080 REM * *
32090 REM * JULI 1991 *
32100 REM * *
32110 REM ************************
32120 REM
32130 REM TROS-RADIO dd 911225
32140 REM -spezial