Simple Sun, Earth, Moon Orbit Simulation by Alexb Orsova6th Dec 2005 20:02
|
---|
Summary An orbit simulation of a sun, earth, moon and some space junk. Use arrow keys to move camera and + - keys to adjust zoom. Description An orbit simulation of a sun, earth, moon and some space junk. Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com rem Prepare Environment hide mouse : color backdrop RGB(0, 0, 0) sync on : sync rate 0 rem Loading Prompt center text screen width() / 2, screen height() / 2, "Loading, please wait..." : sync rem Create First Row of Debris for p = 1 to 36 make object plain p, 3, 3 color object p, RGB(rnd(20) + 90, rnd(20) + 90, rnd(20) + 90) next p rem Create Second Row of Debris for p = 37 to 72 make object plain p, 3, 3 color object p, RGB(rnd(20) + 90, rnd(20) + 90, rnd(20) + 90) next p rem Assign values to the placeholder variables sun = 73 planet = 74 moon = 75 asteroid = 76 rem Create Planets make object sphere sun, 15 make object sphere planet, 10 make object sphere moon, 5 rem Position Planets position object sun, 0, 0, 0 position object planet, 0, 0, 0 position object moon, 0, 0, 0 rem Fix the Planet's Pivot fix object pivot sun fix object pivot planet fix object pivot moon rem Color Planets rem texture object sun, 1 color object sun, RGB(255, 255, 0) set object light sun, 0 color object planet, RGB(100, 255, 100) color object moon, RGB(100, 100, 100) rem Position First Row of Debris for p = 1 to 36 position object p, object position x(sun), object position y(sun), object position z(sun) yrotate object p, wrapvalue(p * 10) move object p, -60 rotate object p, rnd(180), 0, rnd(180) fix object pivot p next p rem Position Second Row of Debris for p = 37 to 72 position object p, object position x(sun), object position y(sun), object position z(sun) yrotate object p, wrapvalue((p + 0.5) * 10) move object p, -65 rotate object p, rnd(180), 0, rnd(180) fix object pivot p next p rem Setup Fog fog on : fog distance 150 fog color RGB(0, 0, 0) rem Position Camera position camera 0, 100, 0 point camera 0, 0, 0 rem Setup Camera Variables camera_angle_x# = 90 camera_angle_y# = 0 camera_zoom# = 100 rem Setup Text draw to front rem Setup Light set point light 0, 0, 0, 0 rem Setup Variables paused = 0 rem Clear the Screen cls rem User Prompt text 10, 20, "Use the Arrow Keys to Move the Camera." text 10, 40, "Use P to Pause the Simulation." text 10, 60, "Use the + and - keys to adjust zoom." text 10, 80, "Press any key to continue." sync : wait key Do rem handle pause if keystate(25) = 1 if paused = 0 paused = 1 wait 500 else paused = 0 wait 500 endif endif rem handle controls if keystate(200) = 1 then camera_angle_x# = camera_angle_x# + 0.2 if keystate(208) = 1 then camera_angle_x# = camera_angle_x# - 0.2 if keystate(205) = 1 then camera_angle_y# = camera_angle_y# + 0.2 if keystate(203) = 1 then camera_angle_y# = camera_angle_y# - 0.2 if keystate(78) = 1 then camera_zoom# = camera_zoom# - 0.2 if keystate(74) = 1 then camera_zoom# = camera_zoom# + 0.2 if keystate(13) = 1 then camera_zoom# = camera_zoom# - 0.2 if keystate(12) = 1 then camera_zoom# = camera_zoom# + 0.2 rem wrap camera angles camera_angle_x# = wrapvalue(camera_angle_x#) camera_angle_y# = wrapvalue(camera_angle_y#) if camera_zoom# > 1000 then camera_zoom# = 1000 if camera_zoom# < 20 then camera_zoom# = 20 if paused = 1 then goto skip rem Position Planet position object planet, object position x(sun), object position y(sun), object position z(sun) yrotate object planet, wrapvalue(object angle y(planet) - 0.6) move object planet, -40 rem Position Moon position object moon, object position x(planet), object position y(planet), object position z(planet) yrotate object moon, wrapvalue(object angle y(moon) + 2) move object moon, -15 rem Set Debris Angle if debris_angle# = 360 then debris_angle# = 0.0 debris_angle# = debris_angle# + 0.01 rem Position Debris Field for p = 1 to 36 ax# = object angle x(p) : az# = object angle z(p) position object p, object position x(sun), object position y(sun), object position z(sun) rotate object p, 0, 0,0 yrotate object p, wrapvalue((p * 10) + debris_angle#) move object p, -60 rotate object p, ax#, 0, az# next p for p = 37 to 72 ax# = object angle x(p) : az# = object angle z(p) position object p, object position x(sun), object position y(sun), object position z(sun) rotate object p, 0, 0, 0 yrotate object p, wrapvalue(((p + 0.5) * 10) + debris_angle#) move object p, -65 rotate object p, ax#, 0, az# next p skip: rem Update Camera position camera 0, 0, 0 rotate camera camera_angle_x#, camera_angle_y#, 0 move camera camera_zoom# - (camera_zoom# * 2) rem Refresh Screen sync Loop |