mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-21 14:50:54 -08:00
Added MiniScript implementation of lunar.bas.
This commit is contained in:
114
00_Alternate_Languages/59_Lunar_LEM_Rocket/MiniScript/lunar.ms
Normal file
114
00_Alternate_Languages/59_Lunar_LEM_Rocket/MiniScript/lunar.ms
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
print " "*33 + "Lunar"
|
||||||
|
print " "*15 + "Creative Computing Morristown, New Jersey"
|
||||||
|
print; print; print
|
||||||
|
print "This is a computer simulation of an Apollo lunar"
|
||||||
|
print "landing capsule."; print; print
|
||||||
|
print "The on-board computer has failed (it was made by"
|
||||||
|
print "Xerox) so you have to land the capsule manually."
|
||||||
|
|
||||||
|
printCols = function(fields, delimiter=null)
|
||||||
|
if delimiter == null then delimiter = text.delimiter
|
||||||
|
line = ""
|
||||||
|
for s in fields
|
||||||
|
line += (s + " "*12)[:12]
|
||||||
|
end for
|
||||||
|
print line, delimiter
|
||||||
|
end function
|
||||||
|
|
||||||
|
doOneGame = function
|
||||||
|
print; print "Set burn rate of retro rockets to any value between"
|
||||||
|
print "0 (free fall) and 200 (maximum burn) pounds per second."
|
||||||
|
print "Set new burn rate every 10 seconds."; print
|
||||||
|
print "Capsule weight 32,500 lbs; fuel weight 16,500 lbs."
|
||||||
|
print; print; print; print "Good luck"
|
||||||
|
l = 0
|
||||||
|
|
||||||
|
print
|
||||||
|
printCols ["sec","mi + ft","mph","lb fuel","burn rate"]
|
||||||
|
print
|
||||||
|
a=120; v = 1; m=33000; n=16500; g=1e-03; z = 1.8
|
||||||
|
|
||||||
|
formulaSet1 = function // (subroutine 330)
|
||||||
|
outer.l += s
|
||||||
|
outer.t -= s
|
||||||
|
outer.m -= s * k
|
||||||
|
outer.a = i
|
||||||
|
outer.v = j
|
||||||
|
end function
|
||||||
|
|
||||||
|
formulaSet2 = function // (subroutine 420)
|
||||||
|
outer.q = s * k / m
|
||||||
|
outer.j = v + g*s + z*(-q-q*q/2-q^3/3-q^4/4-q^5/5)
|
||||||
|
outer.i = a - g*s*s/2 - v*s+z*s*(q/2+q^2/6+q^3/12+q^4/20+q^5/30)
|
||||||
|
end function
|
||||||
|
|
||||||
|
formulaSet3 = function // (loop 340-360)
|
||||||
|
while s >= 5e-3
|
||||||
|
outer.d = v + sqrt(v * v + 2 * a * (g - z * k / m))
|
||||||
|
outer.s = 2 * a / d
|
||||||
|
formulaSet2
|
||||||
|
formulaSet1
|
||||||
|
end while
|
||||||
|
end function
|
||||||
|
|
||||||
|
while true
|
||||||
|
printCols [l, floor(a) + " " + floor(5280*(a-floor(a))), 3600*v, m-n], ""
|
||||||
|
k = input.val
|
||||||
|
t=10
|
||||||
|
shouldExit = false
|
||||||
|
|
||||||
|
while true
|
||||||
|
if m-n < 1e-03 then break
|
||||||
|
if t < 1e-03 then break
|
||||||
|
s = t; if m < n+s*k then s = (m-n)/k
|
||||||
|
formulaSet2
|
||||||
|
if i <= 0 then
|
||||||
|
formulaSet3
|
||||||
|
shouldExit = true
|
||||||
|
break
|
||||||
|
end if
|
||||||
|
if v > 0 and j < 0 then
|
||||||
|
while v > 0 and j <= 0
|
||||||
|
w = (1 - m*g/(z*k))/2
|
||||||
|
s = m*v / (z*k*(w + sqrt(w*w + v/z))) + 0.05
|
||||||
|
formulaSet2
|
||||||
|
if i <= 0 then
|
||||||
|
formulaSet3
|
||||||
|
shouldExit = true
|
||||||
|
break
|
||||||
|
end if
|
||||||
|
formulaSet1
|
||||||
|
end while
|
||||||
|
if shouldExit then break
|
||||||
|
continue
|
||||||
|
end if
|
||||||
|
formulaSet1
|
||||||
|
end while
|
||||||
|
if shouldExit then break
|
||||||
|
if m-n < 1e-03 then
|
||||||
|
print "Fuel out at " + round(l) + " seconds"
|
||||||
|
s = (-v+sqrt(v*v+2*a*g))/g
|
||||||
|
v = v+g*s; l = l+s
|
||||||
|
break
|
||||||
|
end if
|
||||||
|
end while
|
||||||
|
|
||||||
|
w = 3600*v
|
||||||
|
print "On moon at " + l + " seconds - impact velocity " + round(w,1) + " mph"
|
||||||
|
if w <= 1.2 then
|
||||||
|
print "Perfect landing!"
|
||||||
|
else if w <= 10 then
|
||||||
|
print "Good landing (could be better)"
|
||||||
|
else if w <= 60 then
|
||||||
|
print "Craft damage... you're stranded here until a rescue"
|
||||||
|
print "party arrives. Hope you have enough oxygen!"
|
||||||
|
else
|
||||||
|
print "Sorry there were no survivors. You blew it!"
|
||||||
|
print "In fact, you blasted a new lunar crater " + round(w*.227,1) + " feet deep!"
|
||||||
|
end if
|
||||||
|
end function
|
||||||
|
|
||||||
|
while true
|
||||||
|
doOneGame
|
||||||
|
print; print; print; print "Try again??"
|
||||||
|
end while
|
||||||
Reference in New Issue
Block a user