home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 91 / af091a.adf / af91a3.lzx / prgs / Gfx / stun.b < prev    next >
Text File  |  2018-03-22  |  7KB  |  231 lines

  1.  
  2. {From: jackmott@ix.netcom.com (The Crow)
  3. Newsgroups: comp.lang.basic.misc
  4. Subject: Great BASIC program, visually stunning
  5. Date: 18 Nov 1995 04:15:34 GMT
  6. Organization: none
  7. Lines: 192
  8. Message-ID: <48jml6$gkn@ixnews4.ix.netcom.com>
  9. NNTP-Posting-Host: ix-stm6-26.ix.netcom.com
  10. Mime-Version: 1.0
  11. Content-Type: Text/Plain; charset=US-ASCII
  12. X-NETCOM-Date: Fri Nov 17  8:15:34 PM PST 1995
  13. X-Newsreader: WinVN 0.99.6
  14.  
  15. I wrote the following with QuickBasic 4.5 (the commercial one) if you run this 
  16. with Qbasic that comes with DOS it will go REAL slow, but there is a variable 
  17. you can change that I will comment profusely that will speed it up with a lack 
  18. of quality..also you can just change the screen resolution and stuff if it is 
  19. too slow, I am on a p90 for reference.
  20.  
  21.     This program makes a random and very cool starfield, then makes graphs 
  22. various things that resemble black holes and galaxies..makes good screen saver 
  23. type thing, and show it to your math teacher for extra credit...
  24.  
  25. I have this written in pascal at the highschool if anyone wants it in that let 
  26. me know, its an easy conversion.}
  27.  
  28. const true = -1&, false = 0&
  29.  
  30. SCREEN 1,640,200,4,2
  31.  
  32. '..Approximate IBM CGA colors.
  33. palette 0,0,0,0        '..black
  34. palette 1,0,0,1        '..blue
  35. palette 2,0,1,0        '..green
  36. palette 3,0,.93,.87    '..cyan (aqua)
  37. palette 4,1,0,0        '..red
  38. palette 5,1,.13,.93    '..magenta (violet)
  39. palette 6,.8,.6,.53    '..brown
  40. palette 7,.25,.25,.25    '..light gray
  41. palette 8,.73,.73,.73    '..dark gray
  42. palette 9,.47,.87,1    '..light (sky) blue
  43. palette 10,.73,1,0    '..light (lime) green
  44. palette 11,0,.47,.43    '..light cyan (aqua)
  45. palette 12,.5,0,0    '..light red
  46. palette 13,.5,.7,.46    '..light magenta (violet)
  47. palette 14,1,1,.13    '..yellow
  48. palette 15,1,1,1    '..white
  49.  
  50. SUB quit
  51.   SCREEN CLOSE 1
  52.   STOP
  53. END SUB
  54.  
  55. ON MOUSE CALL quit : MOUSE ON
  56.  
  57. RANDOMIZE TIMER
  58.  
  59. radians = 1.57079632679#        'constant for 90 degrees in radians
  60.  
  61.  
  62. REPEAT      'Main body
  63. i = 0
  64.  
  65.         REPEAT                        'Big Stars
  66.  
  67.                 x = INT(RND * 640 + 1)      'This part makes really really
  68.                 y = INT(RND * 200 + 1)        'cool looking stars
  69.                 COLOR 15
  70.                 PSET (x, y)
  71.  
  72.                 COLOR 7
  73.                 PSET (x - 1, y)
  74.                 PSET (x + 1, y)
  75.                 PSET (x, y - 1)
  76.                 PSET (x, y + 1)
  77.                 COLOR 8
  78.                 PSET (x - 2, y)
  79.                 PSET (x + 2, y)
  80.                 PSET (x, y - 2)
  81.                 PSET (x, y + 2)
  82.                 i = i + 1
  83.         UNTIL i = 20     'Big stars - change the value here for more stars
  84.        
  85. 'The parts below make normal single pixel stars       
  86.  
  87. COLOR 8
  88. i = 0
  89.         REPEAT                     'Dim little stars
  90.                 x = INT(RND * 640 + 1)
  91.                 y = INT(RND * 200 + 1)
  92.                 PSET (x, y)
  93.                 i = i + 1
  94.         UNTIL i = 180     'Dim little stars
  95.  
  96. COLOR 15
  97. i = 0
  98.         REPEAT                     'Bright litte stars
  99.                 x = INT(RND * 640 + 1)
  100.                 y = INT(RND * 200 + 1)
  101.                 PSET (x, y)
  102.                 i = i + 1
  103.         UNTIL i = 90      'Bright little stars
  104.  
  105. COLOR 7
  106. i = 0
  107.         REPEAT                      'medium little stars
  108.                 x = INT(RND * 640 + 1)
  109.                 y = INT(RND * 200 + 1)
  110.                 PSET (x, y)
  111.                 i = i + 1
  112.         UNTIL i = 150       'medium little stars
  113.  
  114.  
  115. theta = 1
  116.  
  117. c = INT(RND * 15 + 1)  'color scheme, picks a random NON-black color
  118. if c = 0 then c = 4
  119. color c
  120.  
  121. hole = INT(RND * 16 + 1)    'Random value to select type of graph
  122. REPEAT              'Black hole main loop
  123.  
  124.         
  125.  
  126.                 r = 1.01 ^ theta                    'black hole main formula
  127.  
  128.                
  129. CASE      'Variations of the graph
  130.         hole = 1 :
  131.                 y = (SIN(theta)) * r :~          'Convert polar to cartesian y
  132.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  133.         x = x + theta :~
  134.         y = y + 240 :~
  135.         hole = 2 :
  136.                 y = (SIN(theta)) * r :~            'Convert polar to cartesian y
  137.                 x = (SIN(radians - theta)) * r:~  'Convert polar to cartesian x
  138.         x = x - theta + 640 :~
  139.         y = y + 240
  140.        
  141.         hole = 3 :
  142.                 y = (SIN(theta)) * r :~           'Convert polar to cartesian y
  143.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  144.         x = x - theta + 640 :~
  145.         y = y - theta + 200 
  146.  
  147.         hole = 4 :
  148.                 y = (SIN(theta)) * r :~           'Convert polar to cartesian y
  149.                 x = (SIN(radians - theta)) * r  'Convert polar to cartesian x
  150.         x = x + theta :~
  151.         y = y + theta
  152.  
  153.         hole = 5 OR hole = 14 :
  154.       
  155.                 y = (COS(theta)) * r :~           'Convert polar to cartesian y
  156.                 x = (SIN(90 - theta)) * r :~       'Convert polar to cartesian x
  157.         x = x + 320 :~
  158.         y = y + 240
  159.        
  160.         hole = 15 OR hole = 16 :
  161.                 y = (SIN(theta)) * r :~           'Convert polar to cartesian y
  162.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  163.         
  164.         x = x + 320 :~
  165.         y = y + 240
  166.         
  167.         hole = 6 :
  168.                 y = (SIN(theta)) * r  :~          'Convert polar to cartesian y
  169.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  170.         x = x * theta / 85 + 320 :~
  171.         y = y + theta
  172.  
  173.         hole = 7 :
  174.                 y = (SIN(theta)) * r  :~          'Convert polar to cartesian y
  175.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  176.         x = x * theta / 85 + 320 :~
  177.         y = y - theta + 200
  178.  
  179.         hole = 8 :
  180.                 y = (SIN(theta)) * r :~        'Convert polar to cartesian y
  181.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  182.         x = x + theta :~
  183.         y = y * theta / 100 + 240 
  184.  
  185.         hole = 9 :
  186.                 y = (SIN(theta)) * r  :~          'Convert polar to cartesian y
  187.                 x = (SIN(radians - theta)) * r  :~ 'Convert polar to cartesian x
  188.         x = x - theta + 640 :~
  189.         y = y * theta / 100 + 240
  190.  
  191.         hole = 10 :
  192.                 y = (SIN(theta)) * r :~           'Convert polar to cartesian y
  193.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  194.         x = x + theta / r + 320 :~
  195.         y = y + theta
  196.  
  197.         hole = 11 :
  198.                 y = (SIN(theta)) * r :~          'Convert polar to cartesian y
  199.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  200.         x = x + theta / r + 320 :~
  201.         y = y - theta + 200
  202.  
  203.         hole = 12 :
  204.                 y = (SIN(theta)) * r :~          'Convert polar to cartesian y
  205.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  206.         x = x + theta :~
  207.         y = y + theta / r + 240
  208.  
  209.         hole = 13 :
  210.                 y = (SIN(theta)) * r :~           'Convert polar to cartesian y
  211.                 x = (SIN(radians - theta)) * r :~ 'Convert polar to cartesian x
  212.         x = x - theta + 640 :~
  213.         y = y + theta / r + 240
  214.  
  215. END CASE
  216.  
  217.  
  218.                 PSET (x, y)                             'Place the dots
  219.                 theta = theta + .01  'Make this bigger for more speed!!!!!!!
  220.  
  221.                 'breakout$ = INKEY$
  222.  
  223.         UNTIL theta > 750 OR breakout$ <> ""
  224.  
  225.     SLEEP FOR 1
  226.  
  227.         CLS
  228.  
  229.         'IF breakout$ <> "" THEN SCREEN CLOSE 1:STOP
  230. UNTIL false                    'Main body
  231.