1 ' Life simulator/editor
\r
2 ' made by Svjatoslav Agejenko
\r
4 ' H-Page: svjatoslav.eu
\r
5 ' E-Mail: svjatoslavagejenko@gmail.com
\r
8 ' in observing mode use keys:
\r
9 ' ---------------------------
\r
11 ' x - run for 10000 cycles
\r
12 ' s - run for specified amount of cycles
\r
13 ' n - run for 1 cycle
\r
16 ' w - write state to file
\r
17 ' l - load state from file
\r
18 ' e - switch to edit mode
\r
22 ' in edit mode use keys:
\r
23 ' ----------------------
\r
25 ' cursor keys - move around
\r
26 ' 4 8 6 2 - move arund in large jumps
\r
27 ' s - switch to select mode
\r
28 ' v - paste from copy buffer
\r
29 ' SPACE - toggle cell on/off
\r
30 ' ESC - return to observing mode
\r
33 ' in select mode use keys:
\r
34 ' ------------------------
\r
36 ' cursor keys - select area
\r
37 ' 4 8 6 2 - select area in large jumps
\r
40 ' ESC - return to edit mode
\r
45 DECLARE SUB shbuf ()
\r
48 DECLARE SUB sel (x, y)
\r
54 DECLARE SUB start ()
\r
55 DIM SHARED buf1(1 TO 50, 1 TO 50)
\r
56 DIM SHARED buf2(1 TO 50, 1 TO 50)
\r
60 DIM SHARED buf3(0 TO 50, 0 TO 50)
\r
61 DIM SHARED bufxs, bufys
\r
70 PRINT "frame:" + STR$(frm) + " "
\r
72 PRINT "skip:" + STR$(ski) + " "
\r
87 IF a$ = "n" THEN GOTO 1
\r
89 IF a$ = "c" THEN cle
\r
93 IF a$ = "z" THEN ski = 0
\r
95 IF a$ = "x" THEN ski = 10000
\r
97 IF a$ = "w" THEN wri
\r
99 IF a$ = "l" THEN load
\r
101 IF ski > 0 THEN ski = ski - 1: GOTO 1
\r
129 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
130 IF c = 0 THEN c = 1 ELSE c = 10
\r
131 LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), c, BF
\r
142 IF x < 1 THEN x = 1
\r
143 IF y < 1 THEN y = 1
\r
144 IF x > 50 THEN x = 50
\r
145 IF y > 49 THEN y = 49
\r
147 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
148 IF c = 0 THEN c = 1 ELSE c = 10
\r
149 LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), c, BF
\r
151 LINE (x * 4 - 1, y * 4 - 1)-(x * 4 + 3, y * 4 + 3), 14, B
\r
154 IF a$ = "" THEN GOTO 4
\r
156 LINE (x * 4 - 1, y * 4 - 1)-(x * 4 + 3, y * 4 + 3), 0, B
\r
158 IF a$ = CHR$(0) + "M" THEN x = x + 1
\r
159 IF a$ = CHR$(0) + "K" THEN x = x - 1
\r
160 IF a$ = CHR$(0) + "P" THEN y = y + 1
\r
161 IF a$ = CHR$(0) + "H" THEN y = y - 1
\r
162 IF a$ = "6" THEN x = x + 8
\r
163 IF a$ = "4" THEN x = x - 8
\r
164 IF a$ = "2" THEN y = y + 8
\r
165 IF a$ = "8" THEN y = y - 8
\r
167 IF a$ = CHR$(27) THEN GOTO 5
\r
168 IF a$ = "s" THEN sel x, y
\r
171 FOR y1 = 0 TO bufys
\r
172 FOR x1 = 0 TO bufxs
\r
177 IF (x2 < 50) AND (y2 < 50) THEN
\r
178 IF mill = 0 THEN buf1(x2, y2) = c ELSE buf2(x2, y2) = c
\r
187 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
188 IF c = 1 THEN c = 0 ELSE c = 1
\r
189 IF mill = 0 THEN buf1(x, y) = c ELSE buf2(x, y) = c
\r
205 OPEN f$ FOR INPUT AS #1
\r
207 IF EOF(1) <> 0 THEN GOTO 10
\r
211 FOR x = 1 TO LEN(a$)
\r
212 B$ = RIGHT$(LEFT$(a$, x), 1)
\r
213 IF B$ = "#" THEN c = 1 ELSE c = 0
\r
214 IF mill = 0 THEN buf1(x, y) = c ELSE buf2(x, y) = c
\r
230 IF buf1(x - 1, y - 1) = 1 THEN c = 1 ELSE c = 0
\r
231 IF buf1(x, y - 1) = 1 THEN c = c + 1
\r
232 IF buf1(x + 1, y - 1) = 1 THEN c = c + 1
\r
233 IF buf1(x - 1, y) = 1 THEN c = c + 1
\r
234 IF buf1(x + 1, y) = 1 THEN c = c + 1
\r
235 IF buf1(x - 1, y + 1) = 1 THEN c = c + 1
\r
236 IF buf1(x, y + 1) = 1 THEN c = c + 1
\r
237 IF buf1(x + 1, y + 1) = 1 THEN c = c + 1
\r
239 IF buf1(x, y) = 1 THEN
\r
240 IF c = 2 OR c = 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0
\r
242 IF c = 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0
\r
253 IF buf2(x - 1, y - 1) = 1 THEN c = 1 ELSE c = 0
\r
254 IF buf2(x, y - 1) = 1 THEN c = c + 1
\r
255 IF buf2(x + 1, y - 1) = 1 THEN c = c + 1
\r
256 IF buf2(x - 1, y) = 1 THEN c = c + 1
\r
257 IF buf2(x + 1, y) = 1 THEN c = c + 1
\r
258 IF buf2(x - 1, y + 1) = 1 THEN c = c + 1
\r
259 IF buf2(x, y + 1) = 1 THEN c = c + 1
\r
260 IF buf2(x + 1, y + 1) = 1 THEN c = c + 1
\r
262 IF buf2(x, y) = 1 THEN
\r
263 IF c = 2 OR c = 3 THEN buf1(x, y) = 1 ELSE buf1(x, y) = 0
\r
265 IF c = 3 THEN buf1(x, y) = 1 ELSE buf1(x, y) = 0
\r
286 LINE (x1, y1)-(x3, y3), 14, B
\r
289 IF a$ = "" THEN GOTO 8
\r
290 LINE (x1, y1)-(x3, y3), 0, B
\r
292 IF a$ = CHR$(0) + "M" THEN x2 = x2 + 1
\r
293 IF a$ = CHR$(0) + "K" THEN x2 = x2 - 1
\r
294 IF a$ = CHR$(0) + "P" THEN y2 = y2 + 1
\r
295 IF a$ = CHR$(0) + "H" THEN y2 = y2 - 1
\r
297 IF a$ = "6" THEN x2 = x2 + 8
\r
298 IF a$ = "4" THEN x2 = x2 - 8
\r
299 IF a$ = "2" THEN y2 = y2 + 8
\r
300 IF a$ = "8" THEN y2 = y2 - 8
\r
302 IF a$ = CHR$(27) THEN GOTO 7
\r
309 IF mill = 0 THEN c = buf1(x4, y4) ELSE c = buf2(x4, y4)
\r
310 buf3(x4 - x, y4 - y) = c
\r
322 IF mill = 0 THEN c = buf1(x4, y4): buf1(x4, y4) = 0 ELSE c = buf2(x4, y4): buf2(x4, y4) = 0
\r
323 buf3(x4 - x, y4 - y) = c
\r
343 IF x > 15 THEN x = 15
\r
345 IF y > 15 THEN y = 15
\r
347 LINE (204, 99)-(319, 199), 0, BF
\r
348 LINE (204, 99)-(208 + 4 * bufxs, 103 + 4 * bufys), 14, B
\r
353 IF c = 0 THEN c = 1 ELSE c = 10
\r
354 LINE (x2 * 4 + 205, y2 * 4 + 100)-(x2 * 4 + 2 + 205, y2 * 4 + 2 + 100), c, BF
\r
377 OPEN f$ FOR OUTPUT AS #1
\r
382 IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)
\r
383 IF c = 0 THEN a$ = a$ + "." ELSE a$ = a$ + "#"
\r