diff --git a/00_Alternate_Languages/31_Depth_Charge/MiniScript/README.md b/00_Alternate_Languages/31_Depth_Charge/MiniScript/README.md new file mode 100644 index 00000000..f52e8746 --- /dev/null +++ b/00_Alternate_Languages/31_Depth_Charge/MiniScript/README.md @@ -0,0 +1,3 @@ +Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html). + +Conversion to [MiniScript](https://miniscript.org). diff --git a/00_Alternate_Languages/31_Depth_Charge/MiniScript/depthcharge.ms b/00_Alternate_Languages/31_Depth_Charge/MiniScript/depthcharge.ms new file mode 100644 index 00000000..eeb813d1 --- /dev/null +++ b/00_Alternate_Languages/31_Depth_Charge/MiniScript/depthcharge.ms @@ -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