updated license and email addresses
[qbasicapps.git] / graphics / 3D / stars.bas
1 ' 3D starfield\r
2 ' made by Svjatoslav Agejenko\r
3 ' in 2003.03\r
4 ' H-Page: svjatoslav.eu\r
5 ' E-Mail: svjatoslav@svjatoslav.eu\r
6 \r
7 DECLARE SUB setstar (x2!, y2!, z2!)\r
8 DECLARE SUB galaxy ()\r
9 DIM SHARED mitu\r
10 DIM SHARED mituv\r
11 \r
12 \r
13 RANDOMIZE TIMER\r
14 mituv = 2000\r
15 mitu = mituv\r
16 rns = 500\r
17 wl = 0\r
18 \r
19 DIM SHARED px(1 TO mitu + 1000)\r
20 DIM SHARED py(1 TO mitu + 1000)\r
21 DIM SHARED pz(1 TO mitu + 1000)\r
22 \r
23 FOR a = 1 TO mitu\r
24 pz(a) = RND * 500 + 20\r
25   n = RND * 100\r
26   px(a) = SIN(n) * 20\r
27   py(a) = COS(n) * 20\r
28 NEXT a\r
29 \r
30 \r
31 SCREEN 13\r
32 \r
33 \r
34 frm = 10\r
35 1\r
36 fps = fps + 1\r
37 IF tm$ <> TIME$ THEN\r
38 'LOCATE 1, 1\r
39 'PRINT fps\r
40 IF fps > 20 THEN wl = wl + 2 ELSE wl = wl - 1\r
41 IF wl < 0 THEN wl = 0\r
42 fps = 0\r
43 tm$ = TIME$\r
44 END IF\r
45 frm = frm + 1\r
46 xp = SIN(frm / 21) * 3\r
47 yp = SIN(frm / 18) * 3\r
48 \r
49 nrk = (3.1412) / 2 + SIN(frm / 35) / 100 + SIN(frm / 21) / 100\r
50 rs1 = SIN(nrk)\r
51 rc1 = COS(nrk)\r
52 \r
53 FOR a = 1 TO mitu\r
54 x = px(a)\r
55 y = py(a)\r
56 z = pz(a)\r
57 x1 = x / z * 160 + 160\r
58 y1 = y / z * 100 + 100\r
59 PSET (x1, y1), 0\r
60 \r
61 x5 = x * rs1 - y * rc1\r
62 y5 = x * rc1 + y * rs1\r
63 \r
64 x = x5\r
65 y = y5\r
66 \r
67 z = z - 3\r
68 x = x + xp\r
69 y = y + yp\r
70 IF z < 10 THEN\r
71 z = RND * 300 + 400\r
72 x = RND * 800 - 400\r
73 y = RND * 800 - 400\r
74 END IF\r
75 \r
76 x1 = x / z * 160 + 160\r
77 y1 = y / z * 100 + 100\r
78 c = 3000 / z + 15\r
79 IF c > 31 THEN c = 31\r
80 PSET (x1, y1), c\r
81 \r
82 px(a) = x\r
83 py(a) = y\r
84 pz(a) = z\r
85 NEXT a\r
86 \r
87 \r
88 IF mituv - mitu > rns THEN galaxy: rns = RND * 800 + 100\r
89 \r
90 FOR a = 1 TO 2\r
91 b = RND * (mitu - 10) + 1\r
92 SWAP px(mitu), px(b)\r
93 SWAP py(mitu), py(b)\r
94 SWAP pz(mitu), pz(b)\r
95 \r
96 x = px(mitu)\r
97 y = py(mitu)\r
98 z = pz(mitu)\r
99 x1 = x / z * 160 + 160\r
100 y1 = y / z * 100 + 100\r
101 PSET (x1, y1), 0\r
102 mitu = mitu - 1\r
103 NEXT a\r
104 \r
105 'LOCATE 2, 1\r
106 'PRINT wl\r
107 FOR a = 0 TO wl\r
108 FOR b = 0 TO 1000\r
109 c = c / 100\r
110 NEXT b\r
111 NEXT a\r
112 \r
113 IF INKEY$ <> "" THEN SYSTEM\r
114 GOTO 1\r
115 \r
116 SUB galaxy\r
117 \r
118 xf = RND * 4 - 2\r
119 yf = RND * 4 - 2\r
120 xp = RND * 200 - 100\r
121 yp = RND * 200 - 100\r
122 \r
123 FOR a = 1 TO RND * 15 + 10 STEP .04\r
124 x = SIN(a) * a * a / 10\r
125 y = COS(a) * a * a / 10\r
126 setstar x + RND * a * a / 30 + xp, y + RND * a * a / 30 + yp, 700 + RND * a * a / 30 + (x * xf) + (y * yf)\r
127 NEXT a\r
128 \r
129 'SOUND 1000, 1\r
130 END SUB\r
131 \r
132 SUB setstar (x2, y2, z2)\r
133 mitu = mitu + 1\r
134 s = mitu\r
135 \r
136 px(s) = x2\r
137 py(s) = y2\r
138 pz(s) = z2\r
139 END SUB\r
140 \r