-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathOPTICAL1.LST
278 lines (278 loc) · 7.29 KB
/
OPTICAL1.LST
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
Defmouse O
@Init_sprites
@Draw_screen
@Mouse_routine
Procedure Mouse_routine
Do
A=0
B=0
Bx=0
By=0
C=0
D=O
Oldblock=Block
Qu=0
Sol=0
Mx=Mousex
My=Mousey
If Mousek=1
If Mx>=199 And Mx<232
If My>=39 And My<50
@Beep
Sol=1
Endif
If My>=54 And My<65
@Beep
Qu=1
Endif
For I%=0 To 8
If My>=I%*32+71 And My<I%*32+103
Block=I%+1
If Block<>Oldblock
@Beep
Endif
Endif
Next I%
Endif
If Mx>=272 And Mx<280
For I%=0 To 7
If My>I%*32+80 And My<=I%*32+94
@Beep
B=I%+1
Endif
Next I%
Endif
If Mx>=605 And Mx<613
For I%=0 To 7
If My>I%*32+80 And My<=I%*32+94
@Beep
D=I%+1
Endif
Next I%
Endif
If My>=29 And My<43
For I%=0 To 7
If Mx>I%*32+326 And Mx<=I%*32+334
@Beep
A=I%+1
Endif
Next I%
Endif
If My>=358 And My<372
For I%=0 To 7
If Mx>I%*32+326 And Mx<=I%*32+334
@Beep
C=I%+1
Endif
Next I%
Endif
If My>=71 And My<327 And Mx>=311 And Mx<567
For I%=0 To 7
For J%=0 To 7
If Mx>=I%*32+311 And Mx<I%*32+343
If My>=J%*32+71 And My<J%*32+103
@Beep
Bx=I%+1
By=J%+1
Endif
Endif
Next J%
Next I%
Endif
Endif
Exit If Qu=1
If Sol=1
@Solve
Endif
If Block<>Oldblock
@Markblock
Endif
If Bx<>0 And By<>0
@Notepad
Endif
If A<>0 Or B<>0 Or C<>0 Or D<>0
@Make_move
Endif
Loop
Return
Procedure Beep
Sound 1,14,3,5,5
Sound 1,0,0,0,0
Return
Procedure Markblock
Graphmode 3
Deftext 1,16,0,13
Text 190,(Oldblock-1)*32+94,Chr$(62)
Text 190,(Block-1)*32+94,Chr$(62)
Return
Procedure Notepad
If Board(Bx,By)<>0
Put (Bx-1)*32+312,(By-1)*32+72,Block$(Board(Bx,By)),6
Endif
Put (Bx-1)*32+312,(By-1)*32+72,Block$(Block),6
Board(Bx,By)=Block
Return
Procedure Draw_screen
Cls
Deffill 1,2,4
Pbox 20,20,240,380
Deffill 1,2,8
Pbox 260,20,620,380
Deffill 0,2,8
Pbox 312,72,567,327
Pbox 200,72,232,360
Pbox 188,72,198,360
Pbox 200,40,232,50
Pbox 200,55,232,65
For X%=0 To 8
For Y%=0 To 8
Ax%=X%*32+311
Ay%=Y%*32+71
Draw Ax%,Ay% To Ax%+1,Ay% To Ax%+1,Ay%+1 To Ax%,Ay%+1
Next Y%
Next X%
Deftext 1,0,0,4
Text 202,47,"Solve"
Text 205,62,"Quit"
Graphmode 3
Text 312,70,"A"
Text 563,70,"A"
Text 312,333,"C"
Text 563,333,"C"
Text 306,77,"B"
Text 306,327,"B"
Text 569,77,"D"
Text 569,327,"D"
Deftext 1,16,0,13
For I%=0 To 7
Ax%=I%*32+328
Ay%=I%*32+94
Text Ax%,42,I%+1
Text Ax%,371,I%+1
Text 273,Ay%,I%+1
Text 606,Ay%,I%+1
Next I%
For I%=1 To 32 Step 4
Read Ax%,Ay%,Bx%,By%,Cx%,Cy%,Dx%,Dy%
Sprite Spr$(I%),Ax%,Ay%
Sprite Spr$(I%+1),Bx%,By%
Sprite Spr$(I%+2),Cx%,Cy%
Sprite Spr$(I%+3),Dx%,Dy%
Get Ax%,Ay%,Dx%+15,Dy%+15,Block$((I%+3)/4)
Next I%
Text 190,(Block-1)*32+94,Chr$(62)
Return
Procedure Init_sprites
Block=9
Dim Block$(9)
Dim Board(8,8)
Arrayfill Board(),O
Dim Spr$(32)
For I%=1 To 32
Spr$(I%)=Mki$(0)+Mki$(0)+Mki$(0)+Mki$(0)+Mki$(1)
For J%=1 To 16
Read Foregrnd,Backgrnd
Spr$(I%)=Spr$(I%)+Mki$(Backgrnd)+Mki$(Foregrnd)
Next J%
Next I%
Return
Data 0,0,12,0,12,0,12,0,12,0,12,0,12,0,12,0
Data 28,0,24,0,4152,0,12528,0,32736,0,32640,0,12288,0,4096,0
'
Data 0,0,12288,0,30720,0,64512,0,12288,0,12288,0,12288,0,12288,0
Data 14336,0,6144,0,7168,0,3840,0,2046,0,510,0,0,0,0,0
'
Data 0,0,0,0,32640,0,32736,0,240,0,56,0,24,0,28,0
Data 12,0,12,0,12,0,12,0,63,0,30,0,12,0,0,0
'
Data 8,0,12,0,510,0,2046,0,3852,0,7176,0,6144,0,14336,0
Data 12288,0,12288,0,12288,0,12288,0,12288,0,12288,0,12288,0,0,0
'
Data 0,0,12,0,30,0,63,0,12,0,12,0,12,0,12,0
Data 28,0,24,0,56,0,240,0,32736,0,32640,0,0,0,0,0
'
Data 0,0,12288,0,12288,0,12288,0,12288,0,12288,0,12288,0,12288,0
Data 14336,0,6144,0,7176,0,3852,0,2046,0,510,0,12,0,8,0
'
Data 4096,0,12288,0,32640,0,32736,0,12528,0,4152,0,24,0,28,0
Data 12,0,12,0,12,0,12,0,12,0,12,0,12,0,0,0
'
Data 0,0,0,0,510,0,2046,0,3840,0,7168,0,6144,0,14336,0
Data 12288,0,12288,0,12288,0,12288,0,64512,0,30720,0,12288,0,0,0
'
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,1,0,3,0,4,0
' 10
Data 8,0,28,0,54,0,107,0,210,0,420,0,840,0,1680,0
Data 3360,0,6720,0,13440,0,26880,0,53760,0,41984,0,18432,0,36864,0
'
Data 9,0,18,0,37,0,75,0,150,0,300,0,600,0,1200,0
Data 2400,0,4800,0,9600,0,19200,0,54784,0,27648,0,14336,0,4096,0
'
Data 8192,0,49152,0,32768,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
'
Data 4096,0,14336,0,27648,0,54784,0,19200,0,9600,0,4800,0,2400,0
Data 1200,0,600,0,300,0,150,0,75,0,37,0,18,0,9,0
'
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,32768,0,49152,0,8192,0
'
Data 4,0,3,0,1,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
'
Data 36864,0,18432,0,41984,0,53760,0,26880,0,13440,0,6720,0,3360,0
Data 1680,0,840,0,420,0,210,0,107,0,54,0,28,0,8,0
'
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,65535,0,54613,0,43690,0
'
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,65535,0,1,0,43691,0
'
Data 32768,0,65535,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
' 20
Data 21845,0,65535,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
'
Data 0,0,15,0,127,0,507,0,1022,0,2013,0,4086,0,8063,0
Data 8181,0,15839,0,14330,0,16247,0,32221,0,30583,0,32221,0,32630,0
'
Data 0,0,61440,0,65024,0,24448,0,59840,0,21216,0,41072,0,17080,0
Data 43288,0,20604,0,43964,0,17748,0,43710,0,21870,0,43710,0,30582,0
'
Data 32221,0,30582,0,32221,0,32631,0,15325,0,16383,0,16255,0,8191,0
Data 7645,0,4095,0,1911,0,989,0,503,0,127,0,15,0,0,0
'
Data 40414,0,30582,0,56798,0,30590,0,56828,0,65532,0,32636,0,65528,0
Data 56792,0,65392,0,30688,0,56768,0,30592,0,65024,0,61440,0,0,0
'
Data 0,0,15,0,127,0,511,0,1023,0,2047,0,4095,0,8191,0
Data 8191,0,16383,0,16383,0,16383,0,32767,0,32767,0,32767,0,32767,0
'
Data 0,0,61440,0,65024,0,65408,0,65472,0,65504,0,65520,0,65528,0
Data 65528,0,65532,0,65532,0,65532,0,65534,0,65534,0,65534,0,65534,0
'
Data 32767,0,32767,0,32767,0,32767,0,16383,0,16383,0,16383,0,8191,0
Data 8191,0,4095,0,2047,0,1023,0,511,0,127,0,15,0,0,0
'
Data 65534,0,65534,0,65534,0,65534,0,65532,0,65532,0,65532,0,65528,0
Data 65528,0,65520,0,65504,0,65472,0,65408,0,65024,0,61440,0,0,0
'
Data 19,0,69,0,19,0,69,0,19,0,69,0,19,0,69,0
Data 19,0,21829,0,19,0,43685,0,3,0,21845,0,43691,0,65535,0
' 30
Data 51200,0,41472,0,51200,0,41472,0,51200,0,41472,0,51200,0,41472,0
Data 51200,0,41642,0,51200,0,42325,0,49152,0,43690,0,54613,0,65535,0
'
Data 65535,0,43691,0,21845,0,3,0,43685,0,19,0,21829,0,19,0
Data 69,0,19,0,69,0,19,0,69,0,19,0,69,0,19,0
'
Data 65535,0,54613,0,43690,0,49152,0,42325,0,51200,0,41642,0,51200,0
Data 41472,0,51200,0,41472,0,51200,0,41472,0,51200,0,41472,0,51200,0
' Sprite locations
Data 200,72,216,72,200,88,216,88,200,104,216,104,200,120,216,120
Data 200,136,216,136,200,152,216,152,200,168,216,168,200,184,216,184
Data 200,200,216,200,200,216,216,216,200,232,216,232,200,248,216,248
Data 200,264,216,264,200,280,216,280,200,296,216,296,200,312,216,312