Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5305 | codemaster | 1 | ; BINARY MASTER |
2 | |||
3 | WINDOW.W=360 |
||
4 | WINDOW.H=492 |
||
5 | |||
6 | include 'a.inc' |
||
7 | |||
8 | text t(256), title.t='Binary Master: %hh' |
||
9 | |||
10 | text help.t=+\ |
||
11 | 'Fun Game for Programmers.' RET\ |
||
12 | 'Click BITs. Count in binary.' RET\ |
||
13 | 'Match the decimal number' RET\ |
||
14 | 'in the red box to make rows' RET\ |
||
15 | 'disappear. Press any key.' RET\ |
||
16 | 'r=Reset. p=Pause. Esc=exit' |
||
17 | |||
18 | text pause.t=+\ |
||
19 | 'Paused. Press p to continue' RET\ |
||
20 | 'or r=Reset. Esc=exit' |
||
21 | |||
22 | text game.over.t=+\ |
||
23 | 'Game over. Score: %hh.' RET\ |
||
24 | 'Press any key' |
||
25 | |||
26 | align |
||
27 | |||
28 | integer scene, score |
||
29 | numeric SCENE.*, TITLE, PLAY,\ |
||
30 | PAUSE, GAME.OVER |
||
31 | numeric EASY=5000, NORMAL=4000, HARD=2000 |
||
32 | |||
33 | BOX board, my.box |
||
34 | integer my.n, red.n, magic.n=10101101b |
||
35 | integer cbit.x, cbit.y, bits.h |
||
36 | numeric BIT.*, W=32, H=48 |
||
37 | |||
38 | text my.numbers(8+4), red.numbers(8+4) |
||
39 | |||
40 | FONT main.font='font' |
||
41 | |||
42 | IMAGE bits.i='bits', bit1.i='1',\ |
||
43 | bit0.i='0', close.i='x' |
||
44 | |||
45 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
46 | |||
47 | function random.byte |
||
48 | locals n |
||
49 | .r: |
||
50 | random 3 |
||
51 | if r0<2 |
||
52 | random 16 |
||
53 | else.if r0=2 |
||
54 | random 128 |
||
55 | else.if r0=3 |
||
56 | random 255 |
||
57 | end |
||
58 | . n=r0 |
||
59 | text.find red.numbers, n |
||
60 | if true, go .r, end |
||
61 | . r0=n |
||
62 | if false, r0++, end |
||
63 | endf |
||
64 | |||
65 | function reset.game |
||
66 | locals n, p |
||
67 | . score=0, bits.h=1 |
||
68 | memory.zero my.numbers, 12 |
||
69 | memory.zero red.numbers, 12 |
||
70 | . n=8, p=red.numbers |
||
71 | loop n |
||
72 | random.byte |
||
73 | . r1=p, *r1++=r0, p=r1 |
||
74 | endl |
||
75 | set.box board, 4, 70, BIT.W*8, BIT.H*8 |
||
76 | . scene=SCENE.TITLE |
||
77 | endf |
||
78 | |||
79 | function on.create |
||
80 | set.font main.font |
||
81 | set.timer NORMAL |
||
82 | reset.game |
||
83 | endf |
||
84 | |||
85 | function remove.byte, t, i |
||
86 | locals n |
||
87 | alias p=r0, q=r1, x=r2 |
||
88 | if i=7, go .new, end |
||
89 | . p=t, p+i, q=p, q++, x=7, x-i, n=x |
||
90 | loop n, *p++=*q++, endl |
||
91 | .new: |
||
92 | . p=my.numbers, *(p+7)=0 |
||
93 | random.byte |
||
94 | . q=red.numbers, *(q+7)=r0 |
||
95 | endf |
||
96 | |||
97 | function remove.row, i |
||
98 | remove.byte my.numbers, i |
||
99 | remove.byte red.numbers, i |
||
100 | . bits.h-- |
||
101 | if bits.h<1, bits.h=1, end |
||
102 | endf |
||
103 | |||
104 | function check.numbers |
||
105 | locals i |
||
106 | . i=0 |
||
107 | while i<8, r0=my.numbers, r0+i |
||
108 | . r1=*r0, r0=red.numbers |
||
109 | . r0+i, r2=*r0 |
||
110 | if r1=r2, score+r1 |
||
111 | remove.row i |
||
112 | return 1 |
||
113 | end |
||
114 | . i++ |
||
115 | endw |
||
116 | endf 0 |
||
117 | |||
118 | function draw.board |
||
119 | locals i, n, x, y, w, h |
||
120 | draw.image bits.i, 4, 35 |
||
121 | draw.image bits.i, 4, 457 |
||
122 | . x=0, y=0, w=32, h=48 |
||
123 | while y<8, x=0 |
||
124 | while x<8 |
||
125 | . r0=x, r0*w, r0+board.x |
||
126 | . r1=y, r1*h, r1+board.y |
||
127 | set.box my.box, r0, r1, w, h |
||
128 | draw.box my.box, BLACK, GRAY |
||
129 | . x++ |
||
130 | endw |
||
131 | . r0=x, r0*w, r0+board.x |
||
132 | . r1=y, r1*h, r1+board.y |
||
133 | set.box my.box, r0, r1, 48, h |
||
134 | draw.box.o my.box, WHITE |
||
135 | . my.box.x+48 |
||
136 | draw.box.o my.box, RED |
||
137 | . r0=y, r1=8, r1-bits.h |
||
138 | if r0>=r1 |
||
139 | . r0=my.numbers, r1=y, r2=8 |
||
140 | . r2-bits.h, r1-r2, r0+r1 |
||
141 | . r1=*r0, my.n=r1 |
||
142 | . r0=red.numbers, r1=y, r2=8 |
||
143 | . r2-bits.h, r1-r2, r0+r1 |
||
144 | . r1=*r0, red.n=r1 |
||
145 | u2t my.n, t |
||
146 | . my.box.x-40, my.box.y+11 |
||
147 | draw.text t, my.box.x, my.box.y |
||
148 | . my.box.x+44 |
||
149 | u2t red.n, t |
||
150 | draw.text t, my.box.x, my.box.y |
||
151 | end |
||
152 | . y++ |
||
153 | endw |
||
154 | endf |
||
155 | |||
156 | function draw.bit, n, x, y |
||
157 | if n |
||
158 | draw.image bit1.i, x, y |
||
159 | else |
||
160 | draw.image bit0.i, x, y |
||
161 | end |
||
162 | endf |
||
163 | |||
164 | function draw.byte, n, x, y |
||
165 | locals i |
||
166 | . i=8 |
||
167 | loop i, r0=n, r1=i, r1--, r0>>cl, r0&1 |
||
168 | draw.bit r0, x, y |
||
169 | . x+BIT.W |
||
170 | endl |
||
171 | endf |
||
172 | |||
173 | function draw.my.numbers |
||
174 | locals i, n, y |
||
175 | . i=bits.h, y=404 |
||
176 | loop i, r0=my.numbers, r0+i, r0-- |
||
177 | . r0=*r0, n=r0 |
||
178 | draw.byte n, 4, y |
||
179 | . y-BIT.H |
||
180 | endl |
||
181 | endf |
||
182 | |||
183 | function draw.title.scene |
||
184 | draw.text help.t, 16, 130 |
||
185 | draw.byte magic.n, 50, 300 |
||
186 | endf |
||
187 | |||
188 | function draw.play.scene |
||
189 | draw.board |
||
190 | draw.my.numbers |
||
191 | endf |
||
192 | |||
193 | function draw.pause.scene |
||
194 | draw.text pause.t, 16, 130 |
||
195 | draw.byte magic.n, 50, 300 |
||
196 | endf |
||
197 | |||
198 | function draw.game.over |
||
199 | print t, game.over.t, score |
||
200 | draw.text t, 44, 170 |
||
201 | draw.byte magic.n, 50, 300 |
||
202 | endf |
||
203 | |||
204 | function on.draw |
||
205 | locals x, y, w, h |
||
206 | clear.screen BLACK |
||
207 | print t, title.t, score |
||
208 | draw.text t, 4, 4 |
||
209 | draw.image close.i, 324, 4 |
||
210 | . r0=screen.w, r0-- |
||
211 | . r1=screen.h, r1-- |
||
212 | draw.outline 0, 0, r0, r1, GRAY |
||
213 | if scene=SCENE.TITLE |
||
214 | draw.title.scene |
||
215 | else.if scene=SCENE.PLAY |
||
216 | draw.play.scene |
||
217 | else.if scene=SCENE.PAUSE |
||
218 | draw.pause.scene |
||
219 | else.if scene=SCENE.GAME.OVER |
||
220 | draw.game.over |
||
221 | end |
||
222 | endf |
||
223 | |||
224 | function on.key |
||
225 | if key.event='c' |
||
226 | if scene=SCENE.TITLE |
||
227 | . scene=SCENE.PLAY |
||
228 | go .draw |
||
229 | end |
||
230 | if scene=SCENE.GAME.OVER |
||
231 | go .reset |
||
232 | end |
||
233 | if key='r' |
||
234 | .reset: |
||
235 | reset.game |
||
236 | go .draw |
||
237 | end |
||
238 | if key='p' |
||
239 | .pause: |
||
240 | if scene=SCENE.PLAY |
||
241 | . scene=SCENE.PAUSE |
||
242 | else.if scene=SCENE.PAUSE |
||
243 | . scene=SCENE.PLAY |
||
244 | end |
||
245 | go .draw |
||
246 | end |
||
247 | .draw: |
||
248 | render |
||
249 | end |
||
250 | endf |
||
251 | |||
252 | function on.mouse |
||
253 | if.select board |
||
254 | . r0=mouse.x, r0-WINDOW.X, r0-board.x |
||
255 | . r1=BIT.W, r0/r1, cbit.x=r0 |
||
256 | . r0=mouse.y, r0-WINDOW.Y, r0-board.y |
||
257 | . r1=BIT.H, r0/r1, cbit.y=r0 |
||
258 | if mouse.event='c' |
||
259 | . r0=cbit.y, r1=8, r1-bits.h |
||
260 | if r0>=r1, r0=my.numbers, r1=cbit.y |
||
261 | . r2=8, r2-bits.h, r1-r2, r0+r1 |
||
262 | . r3=*r0, r2=1, r1=7, r1-cbit.x |
||
263 | . r2< |
||
264 | end |
||
265 | end |
||
266 | end |
||
267 | if mouse.event='r' |
||
268 | check.numbers |
||
269 | go .draw |
||
270 | end |
||
271 | if mouse.event='c' |
||
272 | . r0=&close.i.x |
||
273 | if.select r0 |
||
274 | exit |
||
275 | end |
||
276 | if scene<>SCENE.PLAY |
||
277 | reset.game |
||
278 | . scene=SCENE.PLAY |
||
279 | end |
||
280 | .draw: |
||
281 | render |
||
282 | end |
||
283 | endf |
||
284 | |||
285 | function on.timer |
||
286 | if scene<>SCENE.PLAY |
||
287 | return |
||
288 | end |
||
289 | if mouse.1, return, end |
||
290 | if bits.h<8, bits.h++ |
||
291 | else |
||
292 | . scene=SCENE.GAME.OVER |
||
293 | end |
||
294 | render |
||
295 | endf |
||
296 | |||
297 | function on.exit |
||
298 | ; ... |
||
299 | endf8,>>> |