1 DECLARE SUB dispimg ()
\r
2 DECLARE SUB updateland ()
\r
3 DECLARE SUB makeland ()
\r
4 DECLARE FUNCTION getcol! (r!, g!, b!)
\r
6 DECLARE SUB traceline (x%, y%, xl)
\r
7 DECLARE SUB dispframe ()
\r
8 DECLARE SUB tower (x%, y%)
\r
9 DECLARE SUB square (x1%, y1%, x2%, y2%, c%, h%)
\r
10 DECLARE SUB displand ()
\r
11 DECLARE SUB start ()
\r
12 DECLARE SUB setupal ()
\r
14 DIM SHARED landh(0 TO 180, 0 TO 180)
\r
15 DIM SHARED landc(0 TO 180, 0 TO 180)
\r
17 DIM SHARED zmyx, zmyy, zmyz
\r
18 DIM SHARED myx, myy, myz
\r
19 DIM SHARED zmyan, myan2
\r
20 DIM SHARED ste, stem, dist
\r
21 DIM SHARED tim$, frm, frmrate
\r
25 sky = getcol(100, 100, 255)
\r
28 frmrate = 10 ' Desired framerate.
\r
29 ' Lower framerate, better quality
\r
37 OPEN "cat.i01" FOR INPUT AS #1
\r
47 x2 = x1 + RND * 10 + 1
\r
48 y2 = y1 + RND * 10 + 1
\r
50 IF (frm > 50) AND (frm < 150) THEN square x1, y1, x2, y2, RND * 200, RND * 10
\r
51 IF (frm > 150) AND (picty < 177) THEN
\r
53 FOR ff = 1 TO 180 * 2
\r
55 landc(pictx, picty) = c
\r
56 landh(pictx, picty) = 0
\r
58 IF pictx >= pictxw THEN pictx = 0: picty = picty + 1
\r
59 IF picty >= pictyw THEN picty = 0
\r
63 IF frm = 430 THEN dispimg
\r
76 FOR z = .5 TO -.5 STEP zst
\r
77 traceline SIN(zmyan + z) * dist + myx, COS(zmyan + z) * dist + myy, l
\r
88 OPEN "cat.i01" FOR INPUT AS #1
\r
92 FOR y = 0 TO pictyw - 1
\r
93 FOR x = 0 TO pictxw - 1
\r
95 PSET (x + 50, 150 - y), c
\r
105 CHAIN "KHKDEMO2.BAS"
\r
114 IF z > 120 THEN zs = .7
\r
115 IF z > 160 THEN zs = .6
\r
116 FOR zx = 0 TO 180 STEP zs
\r
117 y1 = landh(zx, z) - 80
\r
120 zx2 = zx1 / z1 * 190
\r
121 zy2 = y1 / z1 * 190
\r
123 LINE (zx2 + 160, 40 - zy2)-(zx2 + 160, 200), landc(zx, z)
\r
128 PRINT "Press any key to continue..."
\r
133 FUNCTION getcol (r, g, b)
\r
134 IF r < 0 THEN r = 0
\r
135 IF g < 0 THEN g = 0
\r
136 IF b < 0 THEN b = 0
\r
137 IF r > 255 THEN r = 255
\r
138 IF g > 255 THEN g = 255
\r
139 IF b > 255 THEN b = 255
\r
140 getcol = INT(r / 43) * 36 + INT(g / 43) * 6 + INT(b / 43)
\r
146 square 0, 0, 180, 180, 15, 0
\r
150 x1 = (x \ 10) MOD 2
\r
151 y1 = (y \ 10) MOD 2
\r
152 c = (x1 + y1) MOD 2
\r
154 landc(x, y) = getcol(250, 250, 250)
\r
156 landc(x, y) = getcol(250, 50, 50)
\r
163 v = SQR((ABS(50 - y)) ^ 2 + (ABS(130 - x)) ^ 2)
\r
164 h = SQR((60 - v) * (60 + v)) - 35
\r
165 IF h > 0 THEN landh(x, y) = h
\r
174 FOR za = 0 TO 20 STEP .1
\r
175 x = SIN(za) * (1 + (za * 2)) + 100
\r
176 y = COS(za) * (1 + (za * 2)) + 100
\r
177 landc(x, y) = getcol(20, RND * 200, 20)
\r
178 landc(x + 1, y) = getcol(20, RND * 200, 20)
\r
179 landc(x, y + 1) = getcol(20, RND * 200, 20)
\r
180 landc(x + 1, y + 1) = getcol(20, RND * 200, 20)
\r
200 SUB square (x1, y1, x2, y2, c, h)
\r
213 'PRINT "please wait..."
\r
231 FOR a = 10 TO 0 STEP -1
\r
232 square x - a, y - a, x + a, y + a, getcol(100, 0, a * 20), 20 - a
\r
235 square x - 11, y - 11, x - 9, y - 9, getcol(255, 0, 0), 20
\r
236 square x + 9, y - 11, x + 11, y - 9, getcol(0, 255, 0), 20
\r
237 square x - 11, y + 9, x - 9, y + 11, getcol(0, 0, 255), 20
\r
238 square x + 9, y + 9, x + 11, y + 11, getcol(255, 255, 0), 20
\r
243 SUB traceline (x, y, xl)
\r
246 zpr = myx / (myx - x)
\r
248 y = myy - ((myy - y) * zpr)
\r
252 zpr = myy / (myy - y)
\r
254 x = myx - ((myx - x) * zpr)
\r
258 zpr = (180 - myx) / (x - myx)
\r
260 y = myy - ((myy - y) * zpr)
\r
264 zpr = (180 - myy) / (y - myy)
\r
266 x = myx - ((myx - x) * zpr)
\r
269 lp = SQR(ABS(myx - x) ^ 2 + ABS(myy - y) ^ 2)
\r
277 cx = xp * a / lp + myx
\r
278 cy = yp * a / lp + myy
\r
279 yn = myan2 - ((landh(cx, cy) - myz) * 300) / a
\r
280 IF yn < yo THEN LINE (xl, yn)-(xl + stem, yo - 1), landc(cx, cy), BF: yo = yn
\r
282 LINE (xl, yo - 1)-(xl + stem, 0), sky, BF
\r
293 zmyan = frm / 15 + pi
\r
295 'zmyx = SIN(zmyan) * 3 + zmyx
\r
296 'zmyy = COS(zmyan) * 3 + zmyy
\r
299 zmyx = 90 - SIN(zmyan) * 91
\r
300 zmyy = 90 - COS(zmyan) * 91
\r
302 IF zmyx > 170 THEN zmyx = 170
\r
303 IF zmyy > 170 THEN zmyy = 170
\r
304 IF zmyx < 10 THEN zmyx = 10
\r
305 IF zmyy < 10 THEN zmyy = 10
\r
307 zmyz = SIN(zmyan / 2) * 4 + 4
\r
308 zmyz = SIN(zmyan / 2) * 50 + 50
\r
309 myan2 = -SIN(zmyan / 2) * 120 + 121
\r
310 myan2 = -(SIN(zmyan / 2) * 10 + 10)
\r
311 IF zmyz < landh(myx, myy) + 10 THEN zmyz = landh(myx, myy) + 10: zmyzs = (zmyzs / 2) + .2
\r