-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathqubic.bas
More file actions
236 lines (235 loc) · 5.47 KB
/
qubic.bas
File metadata and controls
236 lines (235 loc) · 5.47 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
0 REM * CUBIC- *
5 PRINT "DO YOU WANT INSTRUCTIONS";
6 INPUT C$
7 IF C$="NO" THEN 21
8 IF C$="YES" THEN 13
9 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'.";
10 GOTO 6
13 PRINT "THE GAME IS TIC-TAC-TOE IN A 4 X 4 X 4 CUBE."
14 PRINT "EACH MOVE IS INDICATED BY A 3 DIGIT NUMBER, WITH EACH"
15 PRINT "DIGIT BETWEEN 1 AND 4 INCLUSIVE. THE DIGITS INDICATE THE"
16 PRINT "LEVEL, COLUMN, AND ROW, RESPECTIVELY, OF THE OCCUPIED PLACE."
20 DIM X(64),L(76),M(76,4),Y(16)
21 FOR I = 1 TO 16
22 READ Y(I)
23 NEXT I
24FOR J=1 TO 76
25FOR J = 1 TO 4
26 READM(I,J)
27 NEXT J
28 NEXT I
35 FOR I = 1 TO 64
40 LET X (I) = 0
50 NEXT I
54 LET Z=1
55 PRINT "DO YOU WANT TO MOVE FIRST";
60 INPUT S$
66 IF S$="NO" THEN 110
67 IF S$="YES" THEN 70
68 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'.";
69 GOTO 60
70 PRINT " "
72 PRINT "YOUR MOVE";
80INPUT J1
85 GOSUB 1800
90 LETK1=INT(J1/100)
95 LET J2=INT((J1-K1*100)/10)
96 LET K2=INT(J2/10)
97 LET K3= J1 - K1*100 -K2*10
98 LET M=16*K1+4*K2+K3-20
99 IF X(M)<>0 THEN 100
100 PRINT "THAT SQUARE IS USED, TRY AGAIN"
101 GOTO 70
109 LET X(M)=1
110 GOSUB 1050
198 FOR J=1 TO 3
199 FOR J=1 TO 76
200 IF J=1 THEN 210
201 IF J=2 THEN 220
203 IF J=3 THEN 235
205 NEXT I
206 NEXTJ
207 GOTO 400
210 IF L(I)<>4 THEN 205
211 PRINT "YOU WIN AS FOLLOWS";
212 FOR J=1 TO 4
213 LET M=M(I,J)
214 GOSUB 1000
216 NEXT J
217 GOTO 500
220 IF L(I)<>14 THEN 205
221 FOR J=1 TO 4
222 LET M=M(I,J)
223 IF X(M)<>0 THEN 227
224 LET X(M)=5
225 PRINT "MACHINE MOVES TO";
226 GOSUB 1000
227 NEXT J
228 PRINT ", AND WINS AS FOLLOWS"
229 FOR J=1 TO 4
230 LET M=M(I,J)
231 GOSUB 1000
233 NEXT J
234 GOTO 500
235 IF L(I)<>3 THEN 205
236 PRINT "NICE TRY MACHINE MOVES TO";
237 FOR J=1 TO 4
238 LET M=M(I,J)
239 IF X(M)<>0 THEN 245
240 LET X(M)=5
241 GOSUB 1000
243 GOTO 70
245 NEXT J
248 GOTO 400
250 FOR I = 1 TO 76
251 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4))
252 LET L = L(I)
255 IF L <2 THEN 290
260 IF L>=3 THEN 290
265 IF L>2 THEN 1600
270 FOR J = 1 TO 4
275 IF X(M(I,J))<>0 THEN 285
280 LET X(M(I,J))=1/8
285 NEXT J
290 NEXT I
295 GOSUB 1050
300 FOR I = 1 TO 76
305 IF L(I)=1/2 THEN 1700
310 IF L(I)=1+3/8 THEN 1700
315 NEXT I
320 GOTO 1300
360LET Z = 1
362 IF X(Y(Z))=0 THEN 380
365 LET Z=Z+1
368 IF Z<>17 THEN 362
370 GOTO 1200
380 LET M=Y(Z)
381 LET X(M)=5
385 PRINT "MACHINE MOVES TO";
389 GOSUB 1000
390 GOTO 70
400 LET X=X
410 FOR I=1 TO 76
412 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4))
415 LET L=L(I)
420 IF L<10 THEN 455
425 IF L>=11 THEN 455
430 IF L>10 THEN 1600
435 FOR J=1 TO 4
440 IF X(M(I,J))<>0 THEN 450
445 LET X(M(I,J))=1/8
450 NEXT J
455 NEXT I
470 GOSUB 1050
475 FOR I=1 TO 76
480 IF L(I)=.5 THEN 1700
485 IF L(I)=5+3/8 THEN 1700
490 NEXT I
492 GOSUB 1800
493 GOTO 250
500 PRINT " "
505 PRINT "DO YOU WANT TO TRY ANOTHER GAME";
510 INPUT X$
515 IF X$="YES" THEN 35
516 IF X$="NO" THEN 520
517 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'";
518 GOTO 510
520 STOP
1000 LET K1=INT((M-1)/16)+1
1010 LET J2=M-16*(K1-1)
1030 LET K2=INT((J2-1)/4)+1
1035 LET K3=M-(K1-1)*16-(K2-1)*4
1040 LET M=K1*100+K2*10+K3
1042 PRINT M;
1045 RETURN
1050 FOR S=1 TO 76
1060 LET J1 = M(S,1)
1070 LET J2 = M(S,2)
1080 LET J3 = M(S,3)
1090 LET J4 = M(S,4)
1100 LET L(S)=X(J1)+X(J2)+X(J3)+X(J4)
1110 NEXT S
1120 RETURN
1200 FOR I=1 TO 64
1210 IF X(I)<>0 THEN 1250
1220 LET X(I)=5
1225 LET M=I
1226 PRINT "MACHINE LIKES";
1227 GOSUB 1000
1228 PRINT " "
1230 GOTO 70
1250 NEXT I
1252 PRINT "THE GAME IS A DRAW"
1255 GOTO 500
1300 FOR K=1 TO 18
1305 LET P=0
1310 FOR I=4*K-3 TO 4*K
1315 FOR J=1 TO 4
1320 LET P=P*X(M(I,J))
1325 NEXT J
1330 NEXT I
1345 IF P<4 THEN 1390
1350 IF P<5 THEN 1400
1355 IF P<9 THEN 1390
1360 IF P<10 THEN 1400
1390 NEXT K
1395 GOSUB 1800
1396 GOTO 360
1400 LET S=1/8
1405 FOR I=4*K-3 TO 4*K
1410 GOTO 1700
1415 NEXT I
1420 LET S=0
1425 GOTO 1405
1500 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43
1510DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
1520 DATA 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,3
1521 DATA 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,5
1522 DATA 57,58,59,60,61,62,63,64
1523DATA1,17,33,49,5,21,37,53,9,25,41,57,13,29,45,61
1524 DATA 2,18,34,50,6,22,38,54,10,26,42,58,14,30,46,62
1525DATA 3,19,35,51,7,23,39,55,11,27,43,59,15,31,47,63
1527 DATA 4,20,36,52,8,24,40,56,12,28,44,60,16,32,48,64
1529 DATA 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61
1532 DATA 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62
1534 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63
1536 DATA 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64
1538 DATA1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64
1540 DATA 13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52
1542 DATA1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64
1544DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16
1546DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64
1548DATA 49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16
1550DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52
1600 FOR J=1 TO 4
1605 IF X(M(I,J))<>1/8 THEN 1650
1610 LET L(I)=5
1615 IF L(I)<5 THEN 1625
1620 PRINT "LET'S SEE YOU GET OUT OF THIS: MACHINE MOVES TO";
1622 GOTO 1628
1625 PRINT "YOU FOX. JUST IN THE NICK OF TIME, MACHINE MOVES TO";
1626 LET M=M(I,J)
1630 GOSUB 1000
1640 GOTO 70
1650 NEXT J
1660 PRINT "MACHINE CONCEDES THIS GAME."
1665 GOTO 500
1700 LET S=1/8
1705 IF I=INT(I/4)*4-1 THEN 1715
1708 LET A=1
1710 GOTO 1720
1715 LET A=2
1720 FOR J=A TO 5-A STEP 5-2*A
1725 IF X(M(I,J))=5 THEN 1750
1730 NEXT J
1735 GOTO 1415
1750 LET X(M(I,J))=5
1755 LET M=M(I,J)
1760 PRINT "MACHINE TAKES";
1770 GOSUB 1000
1780 GOTO 70
1800 FOR I=1 TO 64
1810 IF X(I)<>1/8 THEN 1850
1850 NEXT I
1855 RETURN
2000 END