mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-21 23:00:43 -08:00
114 lines
3.1 KiB
Plaintext
114 lines
3.1 KiB
Plaintext
degToRad = function(n)
|
|
return n * pi / 180
|
|
end function
|
|
|
|
radToDeg = function(n)
|
|
return n * 180 / pi
|
|
end function
|
|
|
|
roundDown = function(n, r)
|
|
return floor(n / r) * r
|
|
end function
|
|
|
|
getCoord = function(distance, radX, radZ)
|
|
xc = sin(radZ)*cos(radX)*distance
|
|
yc = sin(radZ)*sin(radX)*distance
|
|
zc = cos(radZ)*distance
|
|
return [xc,yc,zc]
|
|
end function
|
|
|
|
distanceBetween = function (d1,d2)
|
|
return ((d1[0]-d2[0])^2 + (d1[1]-d2[1])^2 + (d1[2]-d2[2])^2)^.5
|
|
end function
|
|
|
|
print " " * 33 + "TARGET"
|
|
print " " * 15 + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
|
print; print; print
|
|
|
|
print "You are the weapons officer on the Starship Enterprise"
|
|
print "and this is a test to see how accurae a shot you"
|
|
print "are in a 3-dimensional range. You will be told"
|
|
print "the radian offset for the X and Z axes, the location"
|
|
print "of the target in 3-dimensional rectangular coordinates,"
|
|
print "the approximate number of degrees from the X and Z"
|
|
print "axes, and the approximate distance to the target."
|
|
print "You will then proceed to shoot at the target until it is"
|
|
print "destroyed!"
|
|
print; print
|
|
print "Good luck!"
|
|
roundToList = [20,10,2,1]
|
|
ready = true
|
|
while ready
|
|
turns = -1
|
|
radX = rnd * 2 * pi
|
|
radZ = rnd * 2 * pi
|
|
print "Radians from X axis = " + radX + " from Z axis = " + radZ
|
|
|
|
distance = 100000 * rnd * rnd
|
|
coords = getCoord(distance, radX, radZ)
|
|
|
|
print "Target sighted: Approx Coordinates (X,Y,Z) = ("+coords.join(",")+")"
|
|
|
|
gameRunning = true
|
|
while gameRunning
|
|
turns += 1
|
|
if turns >=4 then
|
|
estDistance = distance
|
|
else
|
|
estDistance = roundDown(distance, roundToList[turns])
|
|
end if
|
|
|
|
print " Estimated Distance: " + estDistance
|
|
print
|
|
tx = input ("Input angle deviation from X in degrees: ").val
|
|
tz = input ("Input angle deviation from Z in degrees: ").val
|
|
tdist = input ("Input distance: ").val
|
|
print
|
|
if tdist < 20 then
|
|
print "You blew yourself up!!"
|
|
gameRunning = false
|
|
else
|
|
tx = degToRad(tx)
|
|
tz = degToRad(tz)
|
|
|
|
print "Radians from X-axis = " + tx + " from Z-axis = " + tz
|
|
targeted = getCoord(tdist, tx,tz)
|
|
distBet = distanceBetween(coords, targeted)
|
|
if distBet > 20 then
|
|
dx = targeted[0] - coords[0]
|
|
dy = targeted[1] - coords[1]
|
|
dz = targeted[2] - coords[2]
|
|
xMsg = {false: "Shot in front of target ", true: "Shot behind target "}
|
|
print xMsg[dx<0] + dx + " kilometers."
|
|
yMsg = {false: "Shot to left of target ", true: "Shot to right of target "}
|
|
print yMsg[dy<0] + dy + " kilometers."
|
|
zMsg = {false: "Shot above target ", true: "Shot below target "}
|
|
print zMsg[dz<0] + dz + " kilometers."
|
|
|
|
print "Approx position of explosion + (" + targeted.join(",") + ")"
|
|
print " Distance from target = " + distBet
|
|
print
|
|
print
|
|
|
|
else
|
|
print
|
|
print " * * * HIT * * * Target is non-functional"
|
|
print
|
|
print "Distance of explosion from target was " + distBet + "kilometers."
|
|
print
|
|
print "Mission accomplished in " + (turns+1) + " shots."
|
|
print
|
|
gameRunning = false
|
|
end if
|
|
end if
|
|
end while
|
|
print
|
|
ans = input("Ready for next target? ").lower
|
|
if ans == "" then
|
|
ready == false
|
|
else
|
|
ready = ans[0].lower == "y"
|
|
end if
|
|
print
|
|
end while
|