mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-06-26 08:23:56 -07:00
Added MiniScript version of 31_Depth_Charge.
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
|
||||
|
||||
Conversion to [MiniScript](https://miniscript.org).
|
||||
@@ -0,0 +1,116 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user