' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.09.00.00]) on 2025.11.10 at 00:29 (Coordinated Universal Time)

' This is a port and mod, by Charlie Veniot, of a QBJS program by bplus, shared with the QB64pe community
' (https://qb64phoenix.com/forum/showthread.php?tid=2001&pid=19770)

' Converted to QBJS from specbas sample by ZXDunny
' PROG demos:graphics/deep field
' REM Deep Field by P Malin
_TITLE( "Deep Field" )

SCREEN _NEWIMAGE( _WINDOWWIDTH - 5, _WINDOWHEIGHT - 5, 32 )

CONST pal(1 TO 5) = { &HFF0000,_
                      &HFF8000,_
                      &HFFFF00,_
                      &HFFFF80,_
                      &HFFFFFF}
                      
DIM g, t1, q1, u1, v1, a, r, q, a1, m, c, i1, s, t, d, z, x1, u, clr, _
    points( XMAX, YMAX )

🏁LoopStart:
  CLS
  FOR x = 0 TO XMAX : FOR Y = 0 TO YMAX : LET points(x,y) = 0 : NEXT Y,X
  FOR g = -64 TO 800
      LET t1 = RND * 99
          q1 = RND * 99
          u1 = RND * _WIDTH
          v1 = RND * _HEIGHT
          a  = RND * 3
          r  = 90 / ( 1 + RND * 200 )
          q  = 1 + r * ( .5 + RND / 2 )
          a1 = 1 + 3 * RND ^ 2
          m  = 1
          c = ( 1 + 3 * RND ^ 2 ) * r * r
      IF RND * 9 < 4 THEN LET q = r, t1 = 0, q1 = 0, a = 0, m = _PI / 3, a1 = 1

      FOR i1 = 0 TO c
          LET s = -LOG(RND)
              t = i1 * M
              u = s * r * SIN(t)
              v = s * q * COS(t)
              t = s * a
              x = u * COS(t) + v * SIN(t)
              y = v * COS(t) - u * SIN(t)
              d = ( x * x + y * y ) / ( r * r + q * q )
              z = 99 * ( ( 2.7 ^ -d ) + .1 )
              z = z * ( RND - .5 ) ^ 3
              y1 = y * COS(t1) + z * SIN(t1)
              z = z * COS(t1) - Y * SIN(t1)
              x1 = u1 + x * COS(q1) + y1 * SIN(q1)
              y1 = v1 - x * SIN(q1) + y1 * COS(q1)
              x1p = CINT(x1)
              y1p = CINT(y1)
              clr = CINT( MIN( 5, MAX( 0, points( x1p, y1p ) ) + a1 ) )
          IF BETWEEN( x1p, 0, XMAX ) AND BETWEEN( Y1p, 0, YMAX ) _
             THEN
               PSET ( x1p, y1p ), pal(clr) 
               LET points( x1p, y1p ) = clr
               IF i1 MOD 9 = 0 THEN SLEEP 0.001 
          END IF
      NEXT i1
  NEXT g
  FOR i = 4 TO 0 STEP -1 : SOUND 20, 1 : SLEEP 2 : NEXT I
GOTO 🏁LoopStart