' Svjatoslav Agejenko ' year 2001 ' arrow keys - move around ' 2, 6, 4, 8 - look around ' - - fly up ' + - fly down DECLARE SUB mkkoll () DECLARE SUB putkol () DECLARE SUB rend () DECLARE SUB env () DECLARE SUB start () DIM SHARED npo, nlo, np, nl DIM SHARED px(1 TO 1000) DIM SHARED py(1 TO 1000) DIM SHARED pz(1 TO 1000) DIM SHARED rpx(1 TO 1000) DIM SHARED rpy(1 TO 1000) DIM SHARED orpx(1 TO 1000) DIM SHARED orpy(1 TO 1000) DIM SHARED onp DIM SHARED lin1(1 TO 1000) DIM SHARED lin2(1 TO 1000) DIM SHARED linc(1 TO 1000) DIM SHARED olin1(1 TO 1000) DIM SHARED olin2(1 TO 1000) DIM SHARED onl DIM SHARED myx, myy, myz DIM SHARED myxs, myys, myzs DIM SHARED an1, an2 DIM SHARED an1s, an2s DIM SHARED kolx(1 TO 10) DIM SHARED koly(1 TO 10) DIM SHARED kolz(1 TO 10) DIM SHARED kolxs(1 TO 10) DIM SHARED kolys(1 TO 10) DIM SHARED kolzs(1 TO 10) DIM SHARED kolm ON ERROR GOTO 2 start env putkol 1 np = npo nl = nlo mkkoll rend myx = myx + myxs myy = myy + myys myz = myz + myzs an1 = an1 + an1s an2 = an2 + an2s a$ = INKEY$ IF a$ <> "" THEN IF a$ = CHR$(0) + "H" THEN myzs = myzs - SIN(an1) / 100 myxs = myxs - COS(an1) / 100 END IF IF a$ = CHR$(0) + "P" THEN myzs = myzs + SIN(an1) / 100 myxs = myxs + COS(an1) / 100 END IF IF a$ = CHR$(0) + "M" THEN myzs = myzs + COS(an1) / 100 myxs = myxs - SIN(an1) / 100 END IF IF a$ = CHR$(0) + "K" THEN myzs = myzs - COS(an1) / 100 myxs = myxs + SIN(an1) / 100 END IF IF a$ = "6" THEN an1s = an1s - .01 IF a$ = "4" THEN an1s = an1s + .01 IF a$ = "8" THEN an2s = an2s - .01 IF a$ = "2" THEN an2s = an2s + .01 IF a$ = "+" THEN myys = myys - .01 IF a$ = "-" THEN myys = myys + .01 IF a$ = CHR$(27) THEN SYSTEM END IF GOTO 1 2 END RESUME SUB env FOR z = -5 TO 5 FOR x = -5 TO 5 np = np + 1 px(np) = x py(np) = 0 pz(np) = z IF x > -5 THEN nl = nl + 1 lin1(nl) = np lin2(nl) = np - 1 linc(nl) = 3 END IF IF z > -5 THEN nl = nl + 1 lin1(nl) = np lin2(nl) = np - 11 linc(nl) = 3 END IF NEXT x NEXT z npo = np nlo = nl END SUB SUB env1 np = 1 px(np) = -2 py(np) = 0 pz(np) = 0 np = np + 1 px(np) = 2 py(np) = 0 pz(np) = 0 nl = 1 lin1(nl) = 1 lin2(nl) = 2 linc(nl) = 14 END SUB SUB mkkoll FOR a = 1 TO kolm x = kolx(a) y = koly(a) z = kolz(a) xs = kolxs(a) ys = kolys(a) zs = kolzs(a) ys = ys - .01 x = x + xs y = y + ys z = z + zs IF x > 5 THEN xs = -.1 IF z > 5 THEN zs = -.1 IF x < -5 THEN xs = .1 IF z < -5 THEN zs = .1 IF y < .5 THEN ys = RND * .2 + .1 nl = nl + 1 lin1(nl) = np + 1 lin2(nl) = np + 2 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 3 lin2(nl) = np + 2 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 3 lin2(nl) = np + 4 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 1 lin2(nl) = np + 4 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 1 lin2(nl) = np + 5 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 2 lin2(nl) = np + 6 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 3 lin2(nl) = np + 7 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 4 lin2(nl) = np + 8 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 5 lin2(nl) = np + 6 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 7 lin2(nl) = np + 6 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 7 lin2(nl) = np + 8 linc(nl) = 14 nl = nl + 1 lin1(nl) = np + 5 lin2(nl) = np + 8 linc(nl) = 14 np = np + 1 px(np) = x - .5 py(np) = y - .5 pz(np) = z - .5 np = np + 1 px(np) = x + .5 py(np) = y - .5 pz(np) = z - .5 np = np + 1 px(np) = x + .5 py(np) = y + .5 pz(np) = z - .5 np = np + 1 px(np) = x - .5 py(np) = y + .5 pz(np) = z - .5 np = np + 1 px(np) = x - .5 py(np) = y - .5 pz(np) = z + .5 np = np + 1 px(np) = x + .5 py(np) = y - .5 pz(np) = z + .5 np = np + 1 px(np) = x + .5 py(np) = y + .5 pz(np) = z + .5 np = np + 1 px(np) = x - .5 py(np) = y + .5 pz(np) = z + .5 kolx(a) = x koly(a) = y kolz(a) = z kolxs(a) = xs kolys(a) = ys kolzs(a) = zs NEXT a END SUB SUB putkol FOR a = 1 TO kolm kolx(a) = RND * 10 - 5 koly(a) = 2 kolz(a) = RND * 10 - 5 kolxs(a) = RND * .5 - .25 kolys(a) = RND * .5 + .1 kolzs(a) = RND * .5 - .25 NEXT a END SUB SUB rend 'C3& = Cosine&(Deg3): S3& = Sine&(Deg3) s1 = SIN(an1) c1 = COS(an1) s2 = SIN(an2) c2 = COS(an2) FOR a = 1 TO np x = px(a) + myx y = py(a) - myy z = pz(a) + myz x1 = x * s1 - z * c1 z1 = x * c1 + z * s1 y1 = y * s2 - z1 * c2 z2 = y * c2 + z1 * s2 IF z2 < .1 THEN rpx(a) = -1 ELSE rpx(a) = 320 + (x1 / z2 * 400) rpy(a) = 240 - (y1 / z2 * 400) END IF NEXT a FOR a = 1 TO nl l1 = olin1(a) l2 = olin2(a) IF orpx(l1) = -1 OR orpx(l2) = -1 THEN ELSE LINE (orpx(l1), orpy(l1))-(orpx(l2), orpy(l2)), 0 l1 = lin1(a) l2 = lin2(a) IF rpx(l1) = -1 OR rpx(l2) = -1 THEN ELSE LINE (rpx(l1), rpy(l1))-(rpx(l2), rpy(l2)), linc(a) NEXT IF nl < onl THEN FOR a = nl + 1 TO onl l1 = olin1(a) l2 = olin2(a) IF orpx(l1) = -1 OR orpx(l2) = -1 THEN ELSE LINE (orpx(l1), orpy(l1))-(orpx(l2), orpy(l2)), 0 NEXT END IF FOR a = 1 TO np orpx(a) = rpx(a) orpy(a) = rpy(a) NEXT a onp = np FOR a = 1 TO nl olin1(a) = lin1(a) olin2(a) = lin2(a) NEXT a onl = nl END SUB SUB start SCREEN 12 npo = 0 nlo = 0 np = npo nl = nlo kolm = 9 myx = 0 myy = 4 myz = 7 an1 = 3.14 / 2 an2 = an1 + .6 FOR a = 1 TO 1000 linc(a) = 4 NEXT a FOR a = 1 TO 1000 olin1(a) = 1 olin2(a) = 1 NEXT a END SUB