-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy path30L_Reversi.bc2
285 lines (284 loc) · 9.24 KB
/
30L_Reversi.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
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
1000 A=200:GOTO20:REM REVERSI
1010 N1$="Reversi.":AH$="ABCDEFGH":AK$="abcdefgh"
1020 DIMB$(8,8),RX(8),RY(8)
1030 B=4:P=0:S1$="1":S2$="2"
1040 RX(1)=1:RX(2)=0:RX(3)=-1:RX(4)=-1
1050 RY(1)=1:RY(2)=1:RY(3)=1:RY(4)=0
1060 RX(5)=-1:RX(6)=0:RX(7)=1:RX(8)=1
1070 RY(5)=-1:RY(6)=-1:RY(7)=-1:RY(8)=0
1080 FORI=1 TO8:FORJ=1 TO8
1090 B$(I,J)="":NEXTJ:NEXTI
1100 B$(4,4)=S1$:B$(4,5)=S2$
1110 B$(5,5)=S1$:B$(5,4)=S2$
1200 REM *** HOOFD-MENU ***
1210 N2$="Hoofd-Menu":GOSUB2700:PRINT
1220 PRINT" 1=uitleg":PRINT
1230 PRINT" 2=het spel":PRINT
1240 PRINT" 3=stoppen"
1250 PRINT:PRINT
1260 GOSUB250:PRINT"Uw keuze: ";:GOSUB210:PRINTIN$
1270 W=VAL(IN$):IF(W<1) OR(W>3) THEN1200
1280 ONW GOTO9000,1300,1290
1290 END
1300 REM *** HET SPEL ***
1310 GOSUB3000:REM TEKEN BORD
1320 GOSUB8000:REM TEL+PRINT(+STAND)
1330 V=6:S$=S1$:GOSUB4000
1340 IF(F<>3) THENP=0:GOSUB8000:B=B+1
1350 IF(F=3) THENP=P+1
1360 IF(B=64) OR(P=2) OR(S1=0) OR(S2=0) THEN2000
1370 V=8:S$=S2$:GOSUB4000
1380 IF(F<>3) THENP=0:GOSUB8000:B=B+1
1390 IF(F=3) THENP=P+1
1400 IF(B=64) OR(P=2) OR(S1=0) OR(S2=0) THEN2000
1410 GOTO1330
2000 REM EINDE SPEL
2010 HO=0:VE=20:GOSUB110
2020 IF(S1>S2) THENPRINT"Speler ";S1$;" heeft gewonnen"
2030 IF(S2>S1) THENPRINT"Speler ";S2$;" heeft gewonnen"
2040 IF(S2=S1) THENPRINT"Gelijkspel beide spelers :"
2050 HO=0:VE=21:GOSUB110:PRINT"Gefeliciteerd !";
2060 END
2500 REM CENTREREN KOPPEN
2510 X=LEN(N$):HO=INT((40-X)/2)
2520 GOSUB110:PRINTN$
2530 VE=VE+1:GOSUB110
2540 REM STREEP ERONDER
2550 X$="":FORK=1 TOX:X$=X$+"-":NEXTK
2560 PRINTX$:RETURN
2600 GOSUB250:HO=0:VE=21:GOSUB110
2610 PRINT"Druk een toets in ...";
2620 GOSUB210:PRINT:RETURN
2700 GOSUB100:N$=N1$:VE=0:GOSUB2500
2710 N$=N2$:VE=2:GOSUB2500:RETURN
3000 REM *** TEKEN SPEELVELD ***
3010 GOSUB100:VE=1:HO=0
3020 PRINT" -----------------"
3030 FORI=1 TO8:GOSUB110
3040 SR=9-I:GOSUB300:PRINTSR$;
3050 PRINT"!. . . . . . . .!":VE=VE+2:NEXTI
3060 PRINT" -----------------"
3070 PRINT" a b c d e f g h "
3080 HO=1:VE=2:FORI=1 TO7:GOSUB110
3090 PRINT"! !":VE=VE+2:NEXTI
3100 HO=19:VE=0:GOSUB110:PRINT"<<< reversi >>>"
3110 HO=28:VE=2:GOSUB110:PRINT"uw zet"
3120 HO=28:VE=4:GOSUB110:PRINT"?kr stand"
3130 HO=19:VE=6:GOSUB110:PRINT"speler ";S1$
3140 HO=19:VE=8:GOSUB110:PRINT"speler ";S2$
3150 HO=19:VE=13:GOSUB110:PRINT"invoer kolom/rij"
3160 HO=21:VE=14:GOSUB110:PRINT"b.v.:''d3''"
3170 HO=19:VE=15:GOSUB110:PRINT"passen:''p''"
3180 RETURN
4000 REM VRAAG ZET
4010 F=1
4020 HO=29:VE=V:GOSUB4600:GOSUB4250:HO=29:VE=V:REM ??
4030 GOSUB4700:GOSUB4950:REM GET IN$+PRINT IN$
4040 IF((IN$="P") OR(IN$="p")) THENF=3:GOSUB4960:GOTO5000
4050 GOSUB4400:REM IF<A OR >H THEN F=2
4060 IF(F=2) THENGOSUB4800:GOSUB2600:GOSUB4300:GOTO4000
4100 REM
4110 F=1
4120 HO=30:VE=V:GOSUB4650:GOSUB4250:HO=30:VE=V:REM ?
4130 GOSUB4700:GOSUB4950:REM GET IN$+PRINT IN$
4140 GOSUB4500:REM IF<1 OR >8 THEN F=2
4150 IF(F=2) THENGOSUB4900:GOSUB2600:GOSUB4300:GOTO4100
4160 B2=VAL(IN$)
4170 IF(B$(B1,B2)<>"") THENGOSUB4360:GOSUB2600
4180 IF(B$(B1,B2)<>"") THENGOSUB4300:GOTO4000
4190 GOSUB6000:REM IS ZET LEGAAL?+ZO JA UITVOEREN
4200 IF(ZZ=0) THENGOSUB4560:GOSUB2600:GOSUB4300:GOTO4000
4210 IF(F<>3) THENB$(B1,B2)=S$
4220 GOSUB4300
4230 RETURN
4250 REM MEDEDELING SPELER
4260 HO=0:VE=20:GOSUB110
4270 PRINT"Speler ";S$;" is aan zet !":RETURN
4300 REM OPM VEGEN
4310 HO=0:VE=20:GOSUB110
4320 PRINT" "
4330 HO=0:VE=21:GOSUB110
4340 PRINT" "
4350 RETURN
4360 REM VAK BEZET
4370 HO=0:VE=20:GOSUB110
4380 PRINT"Dit vak is al bezet !!":RETURN
4400 REM TUSSEN A EN H
4410 B1=0
4420 FORI=1 TO8
4430 IF(MID$(AH$,I,1)=IN$) OR(MID$(AK$,I,1)=IN$) THENB1=I
4440 NEXTI
4450 IF(B1=0) THENF=2:RETURN
4460 F=1:RETURN
4500 REM TUSSEN 1 EN 8
4510 IF(VAL(IN$)<1) OR(VAL(IN$)>8) THENF=2:RETURN
4520 F=1:RETURN
4550 REM ONJUISTE ZET
4560 HO=0:VE=20:GOSUB110:PRINT"Onjuiste zet !! ":RETURN
4600 GOSUB110:PRINT"??":RETURN
4650 GOSUB110:PRINT"?":RETURN
4700 GOSUB110:GOSUB210:PRINTIN$:RETURN
4800 HO=0:VE=20:GOSUB110
4810 PRINT"Kolom van a tot h !!!":RETURN
4900 HO=0:VE=20:GOSUB110
4910 PRINT"Rij van 1 tot 8 !!!":RETURN
4950 REM
4960 HO=0:VE=20:GOSUB110
4970 PRINT"Ogenblikje a.u.b. ... ":RETURN
5000 REM PASCONTROLE
5010 Z=0
5020 FORK=1 TO8
5030 FORL=1 TO8
5040 IF(Z=1) THEN5080
5050 B1=K:B2=L
5060 IF(B$(B1,B2)="") THENGOSUB6000
5070 IF(Z=1) THENBX=B1:BY=B2
5080 NEXTL
5090 NEXTK
5100 IF(Z=1) THEN5200
5110 IF(Z=0) THEN5300
5130 GOTO4210
5200 HO=0:VE=20:GOSUB110:F=1
5210 PRINT"Onterecht gepast ! ":GOSUB5500
5220 GOSUB2600:GOSUB4300:GOTO4000
5300 HO=0:VE=20:GOSUB110:F=3
5310 PRINT"Terecht gepast !"
5320 GOSUB2600:GOSUB4300:GOTO5130
5500 REM AANDUIDING MOGELIJKE ZET
5510 HO=19:VE=20:GOSUB110
5520 PRINT"goede zet b.v.: ";MID$(AK$,BX,1);
5530 SR=BY:GOSUB300:PRINTSR$
5540 RETURN
6000 REM ZETCONTROLE
6010 Z=0:ZZ=0:FORI=1 TO8
6020 T=0:IF(F=3) AND(Z=1) THEN6190
6030 X=B1+RX(I):Y=B2+RY(I)
6040 T=T+1
6050 IF(X<1) OR(X>8) OR(Y<1) OR(Y>8) THEN6180
6060 IF(B$(X,Y)="") OR(B$(X,Y)=S$) THEN6180
6070 X=X+RX(I):Y=Y+RY(I)
6080 T=T+1
6090 IF(X<1) OR(X>8) OR(Y<1) OR(Y>8) THEN6180
6100 IF(B$(X,Y)<>"") AND(B$(X,Y)<>S$) THEN6070
6110 IF(B$(X,Y)="") THEN6180
6120 Z=1
6130 IF(F=3) THEN6190
6140 FORJ=1 TO(T-1)
6150 X=X-RX(I):Y=Y-RY(I)
6160 B$(X,Y)=S$
6170 NEXTJ:ZZ=1:GOTO6190
6180 Z=0
6190 NEXTI
6200 RETURN
8000 REM ZETTEN+STAND PRINTEN OP SCHERM
8010 S1=0:S2=0
8020 FORI=1 TO8:FORJ=1 TO8
8030 HO=2*I:VE=17-2*J:GOSUB110:PRINTB$(I,J)
8040 IF(B$(I,J)=S1$) THENS1=S1+1
8050 IF(B$(I,J)=S2$) THENS2=S2+1
8060 NEXTJ:NEXTI
8070 IF(S1<10) THENHO=37:VE=6:GOSUB110:PRINT" "
8080 HO=36:VE=6:GOSUB110:PRINTS1
8090 IF(S2<10) THENHO=37:VE=8:GOSUB110:PRINT" "
8100 HO=36:VE=8:GOSUB110:PRINTS2
8110 RETURN
9000 REM *** UITLEG ***
9010 N2$="Uitleg":GOSUB2700:PRINT
9020 PRINT"Dit is de computer-versie van het"
9030 PRINT"beroemde spel Reversi."
9040 PRINT
9050 PRINT"Er wordt gespeeld op een veld met 64"
9060 PRINT"vakjes. Bij het begin van het spel"
9070 PRINT"bezitten beide spelers twee vakjes."
9080 PRINT
9090 PRINT"Het gaat erom zoveel mogelijk vakjes"
9100 PRINT"te 'veroveren'."
9110 GOSUB2600:GOSUB2700:PRINT
9200 PRINT"Insluiten / Veroveren."
9210 PRINT
9220 PRINT"Om beurten bezetten de spelers een leeg"
9230 PRINT"vakje en wel zo dat hierdoor een of"
9240 PRINT"meer, in een rechte lijn, aansluitende"
9250 PRINT"vakjes van de ander worden ingesloten."
9260 PRINT
9270 PRINT"De ingesloten vakjes verwisselen nu van"
9280 PRINT"eigenaar.(N.B.:Een vakje kan dus meer-"
9290 PRINT"dere keren van eigenaar wisselen!)."
9300 PRINT
9310 PRINT"Insluiten kan in alle richtingen,"
9320 PRINT"ook tegelijkertijd, gebeuren :"
9330 PRINT"vertikaal, horizontaal en diagonaal."
9350 PRINT"Een vakje bezetten wordt gedaan door"
9360 PRINT"een coordinaat in te typen bv.:'a1'."
9370 GOSUB2600:GOSUB2700
9400 PRINT"Passen."
9410 PRINT
9420 PRINT"Als een speler geen vakje kan bezetten"
9430 PRINT"waarbij een of meer vakjes van de"
9440 PRINT"tegenspeler worden ingesloten dan moet"
9450 PRINT"worden gepast. Dit kan door 'p' in te"
9460 PRINT"typen. De computer controleert dan of"
9470 PRINT"dit terecht wordt gedaan of niet."
9490 PRINT"Als terecht wordt gepast dan komt de"
9500 PRINT"andere speler aan de beurt."
9520 PRINT"Als onterecht wordt gepast dan wordt"
9530 PRINT"aangegeven welke zet toch mogelijk is,"
9540 PRINT"wat echter niet de meest profijtelijke"
9550 PRINT"hoeft te zijn. Het zal duidelijk zijn"
9560 PRINT"dat deze mogelijkheid kan helpen op een"
9570 PRINT"moment dat de speler niet direkt ziet"
9580 PRINT"wat een goede zet is."
9590 GOSUB2600:GOSUB2700
9600 PRINT"Einde spel."
9610 PRINT
9620 PRINT"Het spel is uit als alle vakjes bezet"
9630 PRINT"zijn of wanneer bij gebrek aan"
9640 PRINT"mogelijkheden tot insluiten geen vakje"
9650 PRINT"meer bezet kan worden en beide spelers"
9660 PRINT"dus moeten passen."
9670 PRINT
9680 PRINT"Wie de meeste vakjes bezet is winnaar !"
9690 PRINT
9700 PRINT"Succes !"
9710 PRINT
9720 GOSUB2600:GOTO1200
30000 REM *** VARIABELEN LIJST ***
30010 REM * *
30020 REM * B: BEZETTE VAKJES *
30030 REM * P: AANTAL SPELERS DIE*
30040 REM * HEBBEN GEPAST*
30050 REM * F:F=1:GOED *
30060 REM * F=2:INPUT FOUT *
30070 REM * F=3:ER WORDT GEPAST*
30080 REM * S1 EN S2: STAND *
30090 REM * S1$:TEKEN VAN SPELER1*
30100 REM * S2$:TEKEN VAN SPELER2*
30110 REM * IS TE VERANDEREN *
30120 REM * IN VB: X EN O *
30130 REM * ZIE REGEL 1030 *
30140 REM * B$(8,8):SPEELVELD *
30150 REM * RX(I):ZOEKRICHTING *
30160 REM * RY(I):ZOEKRICHTING *
30170 REM
30180 REM
30190 REM
30200 REM **HOBBYSCOOP-BASICODE2**
30210 REM * *
30220 REM * REVERSI *
30230 REM * *
30240 REM P INGEZONDEN DOOR : *
30250 REM O 1
30260 REM S J.S.ROSMAN 2
30270 REM T CH.TH.STORKSTRAAT 88 0
30280 REM B 3119 VE SCHIEDAM 0
30290 REM U *
30300 REM S EIGEN ONTWERP *
30310 REM * V1 : DEC 1986 *
30320 REM * V2 : FEB 1987 *
30330 REM * COMMODORE 64 *
30340 REM * *
30350 REM ******HILVERSUM*********
30360 REM
30370 REM
30380 REM
30390 REM COPYRIGHT (C) NOS - HILVERSUM