From: Svjatoslav Agejenko Date: Thu, 18 Apr 2024 20:56:32 +0000 (+0300) Subject: Slow down animation for compatibility with fast CPUs X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=commitdiff_plain;h=8821bff788ce14399fa825a6d13ba6f70d7a4ead;ds=sidebyside Slow down animation for compatibility with fast CPUs --- diff --git a/graphics/3D/stars.bas b/graphics/3D/stars.bas index 60a03dc..7feee8a 100755 --- a/graphics/3D/stars.bas +++ b/graphics/3D/stars.bas @@ -6,135 +6,136 @@ DECLARE SUB setstar (x2!, y2!, z2!) DECLARE SUB galaxy () -DIM SHARED mitu -DIM SHARED mituv +Dim Shared mitu +Dim Shared mituv -RANDOMIZE TIMER +Randomize Timer mituv = 2000 mitu = mituv rns = 500 wl = 0 -DIM SHARED px(1 TO mitu + 1000) -DIM SHARED py(1 TO mitu + 1000) -DIM SHARED pz(1 TO mitu + 1000) +Dim Shared px(1 To mitu + 1000) +Dim Shared py(1 To mitu + 1000) +Dim Shared pz(1 To mitu + 1000) -FOR a = 1 TO mitu -pz(a) = RND * 500 + 20 - n = RND * 100 - px(a) = SIN(n) * 20 - py(a) = COS(n) * 20 -NEXT a +For a = 1 To mitu + pz(a) = Rnd * 500 + 20 + n = Rnd * 100 + px(a) = Sin(n) * 20 + py(a) = Cos(n) * 20 +Next a -SCREEN 13 +Screen 13 frm = 10 1 fps = fps + 1 -IF tm$ <> TIME$ THEN -'LOCATE 1, 1 -'PRINT fps -IF fps > 20 THEN wl = wl + 2 ELSE wl = wl - 1 -IF wl < 0 THEN wl = 0 -fps = 0 -tm$ = TIME$ -END IF +If tm$ <> Time$ Then + 'LOCATE 1, 1 + 'PRINT fps + If fps > 20 Then wl = wl + 2 Else wl = wl - 1 + If wl < 0 Then wl = 0 + fps = 0 + tm$ = Time$ +End If frm = frm + 1 -xp = SIN(frm / 21) * 3 -yp = SIN(frm / 18) * 3 - -nrk = (3.1412) / 2 + SIN(frm / 35) / 100 + SIN(frm / 21) / 100 -rs1 = SIN(nrk) -rc1 = COS(nrk) - -FOR a = 1 TO mitu -x = px(a) -y = py(a) -z = pz(a) -x1 = x / z * 160 + 160 -y1 = y / z * 100 + 100 -PSET (x1, y1), 0 - -x5 = x * rs1 - y * rc1 -y5 = x * rc1 + y * rs1 - -x = x5 -y = y5 - -z = z - 3 -x = x + xp -y = y + yp -IF z < 10 THEN -z = RND * 300 + 400 -x = RND * 800 - 400 -y = RND * 800 - 400 -END IF - -x1 = x / z * 160 + 160 -y1 = y / z * 100 + 100 -c = 3000 / z + 15 -IF c > 31 THEN c = 31 -PSET (x1, y1), c - -px(a) = x -py(a) = y -pz(a) = z -NEXT a - - -IF mituv - mitu > rns THEN galaxy: rns = RND * 800 + 100 - -FOR a = 1 TO 2 -b = RND * (mitu - 10) + 1 -SWAP px(mitu), px(b) -SWAP py(mitu), py(b) -SWAP pz(mitu), pz(b) - -x = px(mitu) -y = py(mitu) -z = pz(mitu) -x1 = x / z * 160 + 160 -y1 = y / z * 100 + 100 -PSET (x1, y1), 0 -mitu = mitu - 1 -NEXT a +xp = Sin(frm / 21) * 3 +yp = Sin(frm / 18) * 3 + +nrk = (3.1412) / 2 + Sin(frm / 35) / 100 + Sin(frm / 21) / 100 +rs1 = Sin(nrk) +rc1 = Cos(nrk) + +For a = 1 To mitu + x = px(a) + y = py(a) + z = pz(a) + x1 = x / z * 160 + 160 + y1 = y / z * 100 + 100 + PSet (x1, y1), 0 + + x5 = x * rs1 - y * rc1 + y5 = x * rc1 + y * rs1 + + x = x5 + y = y5 + + z = z - 3 + x = x + xp + y = y + yp + If z < 10 Then + z = Rnd * 300 + 400 + x = Rnd * 800 - 400 + y = Rnd * 800 - 400 + End If + + x1 = x / z * 160 + 160 + y1 = y / z * 100 + 100 + c = 3000 / z + 15 + If c > 31 Then c = 31 + PSet (x1, y1), c + + px(a) = x + py(a) = y + pz(a) = z +Next a + + +If mituv - mitu > rns Then galaxy: rns = Rnd * 800 + 100 + +For a = 1 To 2 + b = Rnd * (mitu - 10) + 1 + Swap px(mitu), px(b) + Swap py(mitu), py(b) + Swap pz(mitu), pz(b) + + x = px(mitu) + y = py(mitu) + z = pz(mitu) + x1 = x / z * 160 + 160 + y1 = y / z * 100 + 100 + PSet (x1, y1), 0 + mitu = mitu - 1 +Next a 'LOCATE 2, 1 'PRINT wl -FOR a = 0 TO wl -FOR b = 0 TO 1000 -c = c / 100 -NEXT b -NEXT a - -IF INKEY$ <> "" THEN SYSTEM -GOTO 1 - -SUB galaxy - -xf = RND * 4 - 2 -yf = RND * 4 - 2 -xp = RND * 200 - 100 -yp = RND * 200 - 100 - -FOR a = 1 TO RND * 15 + 10 STEP .04 -x = SIN(a) * a * a / 10 -y = COS(a) * a * a / 10 -setstar x + RND * a * a / 30 + xp, y + RND * a * a / 30 + yp, 700 + RND * a * a / 30 + (x * xf) + (y * yf) -NEXT a - -'SOUND 1000, 1 -END SUB - -SUB setstar (x2, y2, z2) -mitu = mitu + 1 -s = mitu - -px(s) = x2 -py(s) = y2 -pz(s) = z2 -END SUB +For a = 0 To wl + For b = 0 To 1000 + c = c / 100 + Next b +Next a + +If InKey$ <> "" Then System +sound 0,1 +GoTo 1 + +Sub galaxy + + xf = Rnd * 4 - 2 + yf = Rnd * 4 - 2 + xp = Rnd * 200 - 100 + yp = Rnd * 200 - 100 + + For a = 1 To Rnd * 15 + 10 Step .04 + x = Sin(a) * a * a / 10 + y = Cos(a) * a * a / 10 + setstar x + Rnd * a * a / 30 + xp, y + Rnd * a * a / 30 + yp, 700 + Rnd * a * a / 30 + (x * xf) + (y * yf) + Next a + + 'SOUND 1000, 1 +End Sub + +Sub setstar (x2, y2, z2) + mitu = mitu + 1 + s = mitu + + px(s) = x2 + py(s) = y2 + pz(s) = z2 +End Sub