1 ' Material simulation, simulates shockwaves propagation in gas.
\r
2 ' made by Svjatoslav Agejenko
\r
4 ' homepage: svjatoslav.eu
\r
5 ' email: svjatoslav@svjatoslav.eu
\r
7 DECLARE SUB saveit ()
\r
8 DECLARE SUB playit ()
\r
9 DECLARE SUB frmget ()
\r
10 DECLARE SUB frmsav ()
\r
11 DECLARE SUB spot (x!, y!, p!)
\r
12 DECLARE SUB lin (x1!, y1!, x2!, y2!)
\r
14 DECLARE SUB start ()
\r
18 DIM SHARED press(1 TO 100, 1 TO 100)
\r
19 DIM SHARED spdx(1 TO 100, 1 TO 100)
\r
20 DIM SHARED spdy(1 TO 100, 1 TO 100)
\r
21 DIM SHARED spdxp(1 TO 100, 1 TO 100)
\r
22 DIM SHARED spdyp(1 TO 100, 1 TO 100)
\r
23 DIM SHARED nam$, frm
\r
24 DIM SHARED linb AS STRING * 100
\r
30 OPEN "tst.an0" FOR BINARY AS #1
\r
40 IF press(x, y) = wal THEN spdx(x - 1, y) = 0: spdy(x, y - 1) = 0: spdx(x, y) = 0: spdy(x, y) = 0: GOTO 3
\r
41 spdy(x, y) = spdy(x, y) - (press(x, y) / 500) ' gravitation
\r
43 IF press(x + 1, y) = wal THEN spdx(x, y) = 0: GOTO 2
\r
44 spdx(x, y) = (press(x + 1, y) - press(x, y)) / 20 + spdx(x, y)
\r
46 IF press(x, y + 1) = wal THEN spdy(x, y) = 0: GOTO 3
\r
47 spdy(x, y) = (press(x, y + 1) - press(x, y)) / 20 + spdy(x, y)
\r
57 a = press(x, y) + spdx(x, y) + spdy(x, y) - spdx(x - 1, y) - spdy(x, y - 1)
\r
59 IF a = 0 OR ((a < 0) AND (a > -.0001)) THEN
\r
60 IF spdx(x, y) < 0 THEN spdx(x, y) = 0
\r
61 IF spdy(x, y) < 0 THEN spdy(x, y) = 0
\r
62 IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = 0
\r
63 IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = 0
\r
67 IF spdx(x, y) < 0 THEN spdx(x, y) = spdx(x, y) / 1.5
\r
68 IF spdy(x, y) < 0 THEN spdy(x, y) = spdy(x, y) / 1.5
\r
69 IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = spdx(x - 1, y) / 1.5
\r
70 IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = spdy(x, y - 1) / 1.5
\r
77 IF b = 1 THEN GOTO 4
\r
81 IF spdx(x, y) > 0 THEN spdxp(x - 1, y) = ((press(x, y) * spdx(x - 1, y)) + (spdx(x, y) * spdx(x, y))) / (press(x, y) + spdx(x, y)) - spdx(x - 1, y)
\r
82 IF spdy(x, y) > 0 THEN spdyp(x, y - 1) = ((press(x, y) * spdy(x, y - 1)) + (spdy(x, y) * spdy(x, y))) / (press(x, y) + spdy(x, y)) - spdy(x, y - 1)
\r
83 IF spdx(x - 1, y) < 0 THEN spdxp(x, y) = ((press(x, y) * spdx(x, y)) - (spdx(x - 1, y) * spdx(x - 1, y))) / (press(x, y) - spdx(x - 1, y)) - spdx(x, y)
\r
84 IF spdy(x, y - 1) < 0 THEN spdyp(x, y) = ((press(x, y) * spdy(x, y)) - (spdy(x, y - 1) * spdy(x, y - 1))) / (press(x, y) - spdy(x, y - 1)) - spdy(x, y)
\r
91 press(x + 1, y) = press(x + 1, y) - spdx(x, y)
\r
92 press(x, y + 1) = press(x, y + 1) - spdy(x, y)
\r
93 press(x, y) = press(x, y) + spdx(x, y)
\r
94 press(x, y) = press(x, y) + spdy(x, y)
\r
100 spdx(x, y) = spdx(x, y) + spdxp(x, y)
\r
102 spdy(x, y) = spdy(x, y) + spdyp(x, y)
\r
110 PSET (x, y), press(x, y) + 16
\r
126 LOCATE y - 46, (x - 46) * 4
\r
135 SUB lin (x1, y1, x2, y2)
\r
139 IF m1 > m THEN m = m1
\r
145 x5 = x3 * a / m + x1
\r
146 y5 = y3 * a / m + y1
\r
147 press(x5, y5) = wal
\r
157 a$ = a$ + CHR$(POINT(x, y))
\r
168 press(x + 1, y) = p
\r
169 press(x, y + 1) = p
\r
170 press(x + 1, y + 1) = p
\r
197 FOR x = 5 TO 40 STEP 5
\r
198 lin x, 80, x + 50, 80 - x
\r