mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
117 lines
2.9 KiB
Plaintext
117 lines
2.9 KiB
Plaintext
// Depth Charge
|
|
// Originally by Dana Noftle (1978)
|
|
// Translated from BASIC to MiniScript by Ryushinaka and Joe Strout (2023)
|
|
|
|
askYesNo = function(prompt)
|
|
while true
|
|
answer = input(prompt).lower[:1]
|
|
if answer == "y" or answer == "n" then return answer
|
|
end while
|
|
end function
|
|
|
|
showWelcome = function
|
|
print
|
|
print " "*34 + "Depth Charge"
|
|
print " "*15 + "Creative Computing Morristown, New Jersey"
|
|
print
|
|
end function
|
|
|
|
setup = function
|
|
while true
|
|
globals.size = input("Dimension of search area? ").val
|
|
if size > 0 then break
|
|
end while
|
|
|
|
globals.numCharges = ceil(log(size,2))
|
|
if numCharges == 0 then globals.numCharges = 1 // ensure we have at least 1 shot
|
|
|
|
print "You are the captain of the destroyer USS Computer."
|
|
print "An enemy sub has been causing you trouble. Your"
|
|
print "mission is to destroy it. You have " + numCharges + " shots."
|
|
print "Specify depth charge explosion point with a"
|
|
print "trio of numbers -- the first two are the"
|
|
print "surface coordinates; the third is the depth."
|
|
end function
|
|
|
|
showShotResult = function(shot,location)
|
|
result = "Sonar reports shot was "
|
|
if shot[1] > location[1] then
|
|
result = result + "north"
|
|
else if shot[1] < location[1] then
|
|
result = result + "south"
|
|
end if
|
|
|
|
if shot[0] > location[0] then
|
|
result = result + "east"
|
|
else if shot[0] < location[0] then
|
|
result = result + "west"
|
|
end if
|
|
|
|
if shot[1] != location[1] or shot[0] != location[0] then
|
|
result = result + " and "
|
|
end if
|
|
|
|
if shot[2] > location[2] then
|
|
result = result + "too low."
|
|
else if shot[2] < location[2] then
|
|
result = result + "too high."
|
|
else
|
|
result = result + "depth OK."
|
|
end if
|
|
|
|
print result
|
|
end function
|
|
|
|
getShot = function
|
|
shotPos = [0,0,0]
|
|
while true
|
|
rawGuess = input("Enter coordinates: ").split(" ")
|
|
if rawGuess.len == 3 then
|
|
shotPos[0] = rawGuess[0].val
|
|
shotPos[1] = rawGuess[1].val
|
|
shotPos[2] = rawGuess[2].val
|
|
return shotPos
|
|
else
|
|
print "Please enter coordinates separated by spaces"
|
|
print "Example: 3 2 1"
|
|
end if
|
|
end while
|
|
end function
|
|
|
|
|
|
playGame = function
|
|
print "Good luck!"
|
|
print
|
|
|
|
subPos = [floor(rnd*size), floor(rnd*size), floor(rnd*size)]
|
|
|
|
// For debugging, you can give away the answer:
|
|
//print "(Sub is hidden at: " + subPos.join(" ") + ")"
|
|
|
|
for c in range(1, numCharges)
|
|
print "Trial " + c
|
|
|
|
shot = getShot
|
|
|
|
if shot[0] == subPos[0] and shot[1] == subPos[1] and shot[2] == subPos[2] then
|
|
print "B O O M ! ! You found it in " + c + " tries!"
|
|
return
|
|
else
|
|
showShotResult(shot,subPos)
|
|
end if
|
|
end for
|
|
|
|
print "You have been torpedoed! Abandon ship!"
|
|
print "The submarine was at " + subPos.join(" ") + "."
|
|
end function
|
|
|
|
showWelcome
|
|
setup
|
|
while true
|
|
playGame
|
|
if askYesNo("Another game (Y or N): ") == "n" then
|
|
print "OK. Hope you enjoyed yourself."
|
|
break
|
|
end if
|
|
end while
|