1 CHDIR ".\qbasicapps\simulation\life"
\r
4 ' Life simulator/editor
\r
5 ' made by Svjatoslav Agejenko
\r
7 ' H-Page: svjatoslav.eu
\r
8 ' E-Mail: svjatoslav@svjatoslav.eu
\r
11 ' in observing mode use keys:
\r
12 ' ---------------------------
\r
14 ' x - run for 10000 cycles
\r
15 ' s - run for specified amount of cycles
\r
16 ' n - run for 1 cycle
\r
19 ' w - write state to file
\r
20 ' l - load state from file
\r
21 ' e - switch to edit mode
\r
25 ' in edit mode use keys:
\r
26 ' ----------------------
\r
28 ' cursor keys - move around
\r
29 ' 4 8 6 2 - move arund in large jumps
\r
30 ' s - switch to select mode
\r
31 ' v - paste from copy buffer
\r
32 ' SPACE - toggle cell on/off
\r
33 ' ESC - return to observing mode
\r
36 ' in select mode use keys:
\r
37 ' ------------------------
\r
39 ' cursor keys - select area
\r
40 ' 4 8 6 2 - select area in large jumps
\r
43 ' ESC - return to edit mode
\r
48 DECLARE SUB shbuf ()
\r
51 DECLARE SUB sel (x, y)
\r
57 DECLARE SUB start ()
\r
58 DIM SHARED buf1(1 TO 50, 1 TO 50)
\r
59 DIM SHARED buf2(1 TO 50, 1 TO 50)
\r
63 DIM SHARED buf3(0 TO 50, 0 TO 50)
\r
64 DIM SHARED bufxs, bufys
\r
73 PRINT "frame:" + STR$(frm) + " "
\r
75 PRINT "skip:" + STR$(ski) + " "
\r
90 IF a$ = "n" THEN GOTO 1
\r
92 IF a$ = "c" THEN cle
\r
96 IF a$ = "z" THEN ski = 0
\r
98 IF a$ = "x" THEN ski = 10000
\r
100 IF a$ = "w" THEN wri
\r
102 IF a$ = "l" THEN load
\r
104 IF ski > 0 THEN ski = ski - 1: GOTO 1
\r
132 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
133 IF c = 0 THEN c = 1 ELSE c = 10
\r
134 LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), c, BF
\r
145 IF x < 1 THEN x = 1
\r
146 IF y < 1 THEN y = 1
\r
147 IF x > 50 THEN x = 50
\r
148 IF y > 49 THEN y = 49
\r
150 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
151 IF c = 0 THEN c = 1 ELSE c = 10
\r
152 LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), c, BF
\r
154 LINE (x * 4 - 1, y * 4 - 1)-(x * 4 + 3, y * 4 + 3), 14, B
\r
157 IF a$ = "" THEN GOTO 4
\r
159 LINE (x * 4 - 1, y * 4 - 1)-(x * 4 + 3, y * 4 + 3), 0, B
\r
161 IF a$ = CHR$(0) + "M" THEN x = x + 1
\r
162 IF a$ = CHR$(0) + "K" THEN x = x - 1
\r
163 IF a$ = CHR$(0) + "P" THEN y = y + 1
\r
164 IF a$ = CHR$(0) + "H" THEN y = y - 1
\r
165 IF a$ = "6" THEN x = x + 8
\r
166 IF a$ = "4" THEN x = x - 8
\r
167 IF a$ = "2" THEN y = y + 8
\r
168 IF a$ = "8" THEN y = y - 8
\r
170 IF a$ = CHR$(27) THEN GOTO 5
\r
171 IF a$ = "s" THEN sel x, y
\r
174 FOR y1 = 0 TO bufys
\r
175 FOR x1 = 0 TO bufxs
\r
180 IF (x2 < 50) AND (y2 < 50) THEN
\r
181 IF mill = 0 THEN buf1(x2, y2) = c ELSE buf2(x2, y2) = c
\r
190 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
191 IF c = 1 THEN c = 0 ELSE c = 1
\r
192 IF mill = 0 THEN buf1(x, y) = c ELSE buf2(x, y) = c
\r
208 OPEN f$ FOR INPUT AS #1
\r
210 IF EOF(1) <> 0 THEN GOTO 10
\r
214 FOR x = 1 TO LEN(a$)
\r
215 B$ = RIGHT$(LEFT$(a$, x), 1)
\r
216 IF B$ = "#" THEN c = 1 ELSE c = 0
\r
217 IF mill = 0 THEN buf1(x, y) = c ELSE buf2(x, y) = c
\r
233 IF buf1(x - 1, y - 1) = 1 THEN c = 1 ELSE c = 0
\r
234 IF buf1(x, y - 1) = 1 THEN c = c + 1
\r
235 IF buf1(x + 1, y - 1) = 1 THEN c = c + 1
\r
236 IF buf1(x - 1, y) = 1 THEN c = c + 1
\r
237 IF buf1(x + 1, y) = 1 THEN c = c + 1
\r
238 IF buf1(x - 1, y + 1) = 1 THEN c = c + 1
\r
239 IF buf1(x, y + 1) = 1 THEN c = c + 1
\r
240 IF buf1(x + 1, y + 1) = 1 THEN c = c + 1
\r
242 IF buf1(x, y) = 1 THEN
\r
243 IF c = 2 OR c = 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0
\r
245 IF c = 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0
\r
256 IF buf2(x - 1, y - 1) = 1 THEN c = 1 ELSE c = 0
\r
257 IF buf2(x, y - 1) = 1 THEN c = c + 1
\r
258 IF buf2(x + 1, y - 1) = 1 THEN c = c + 1
\r
259 IF buf2(x - 1, y) = 1 THEN c = c + 1
\r
260 IF buf2(x + 1, y) = 1 THEN c = c + 1
\r
261 IF buf2(x - 1, y + 1) = 1 THEN c = c + 1
\r
262 IF buf2(x, y + 1) = 1 THEN c = c + 1
\r
263 IF buf2(x + 1, y + 1) = 1 THEN c = c + 1
\r
265 IF buf2(x, y) = 1 THEN
\r
266 IF c = 2 OR c = 3 THEN buf1(x, y) = 1 ELSE buf1(x, y) = 0
\r
268 IF c = 3 THEN buf1(x, y) = 1 ELSE buf1(x, y) = 0
\r
289 LINE (x1, y1)-(x3, y3), 14, B
\r
292 IF a$ = "" THEN GOTO 8
\r
293 LINE (x1, y1)-(x3, y3), 0, B
\r
295 IF a$ = CHR$(0) + "M" THEN x2 = x2 + 1
\r
296 IF a$ = CHR$(0) + "K" THEN x2 = x2 - 1
\r
297 IF a$ = CHR$(0) + "P" THEN y2 = y2 + 1
\r
298 IF a$ = CHR$(0) + "H" THEN y2 = y2 - 1
\r
300 IF a$ = "6" THEN x2 = x2 + 8
\r
301 IF a$ = "4" THEN x2 = x2 - 8
\r
302 IF a$ = "2" THEN y2 = y2 + 8
\r
303 IF a$ = "8" THEN y2 = y2 - 8
\r
305 IF a$ = CHR$(27) THEN GOTO 7
\r
312 IF mill = 0 THEN c = buf1(x4, y4) ELSE c = buf2(x4, y4)
\r
313 buf3(x4 - x, y4 - y) = c
\r
325 IF mill = 0 THEN c = buf1(x4, y4): buf1(x4, y4) = 0 ELSE c = buf2(x4, y4): buf2(x4, y4) = 0
\r
326 buf3(x4 - x, y4 - y) = c
\r
346 IF x > 15 THEN x = 15
\r
348 IF y > 15 THEN y = 15
\r
350 LINE (204, 99)-(319, 199), 0, BF
\r
351 LINE (204, 99)-(208 + 4 * bufxs, 103 + 4 * bufys), 14, B
\r
356 IF c = 0 THEN c = 1 ELSE c = 10
\r
357 LINE (x2 * 4 + 205, y2 * 4 + 100)-(x2 * 4 + 2 + 205, y2 * 4 + 2 + 100), c, BF
\r
380 OPEN f$ FOR OUTPUT AS #1
\r
385 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
386 IF c = 0 THEN a$ = a$ + "." ELSE a$ = a$ + "#"
\r