mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-04 00:57:13 -08:00
113 lines
3.2 KiB
Plaintext
113 lines
3.2 KiB
Plaintext
|
|
getNum = function(prompt, maxVal=5)
|
|
while true
|
|
num = floor(input(prompt + "? ").val)
|
|
if num > 0 and num <= maxVal then return num
|
|
print "Try again..."
|
|
end while
|
|
end function
|
|
|
|
showReturn = function
|
|
print "You made it through tremendous flak!!"
|
|
end function
|
|
|
|
showShotDown = function
|
|
print "* * * * boom * * * *"
|
|
print "You have been shot down....."
|
|
print "Dearly beloved, we are gathered here today to pay our"
|
|
print "last tribute..."
|
|
end function
|
|
|
|
showSuccess = function
|
|
print "Direct hit!!!! " + floor(100*rnd) + " killed."
|
|
print "Mission successful."
|
|
end function
|
|
|
|
// Function to calculate the mission result for all nations except Japan.
|
|
doNonJapanResult = function
|
|
print
|
|
d = input("How many missions have you flown? ").val
|
|
while d >= 160
|
|
print "Missions, not miles..."
|
|
print "150 missions is high even for old-timers."
|
|
d = input("Now then, how many missions have you flown? ").val
|
|
end while
|
|
print
|
|
if d >= 100 then print "That's pushing the odds!"
|
|
if d < 25 then print "Fresh out of training, eh?"
|
|
print
|
|
if d >= 160 * rnd then
|
|
showSuccess
|
|
else
|
|
print "Missed target by " + floor(2+30*rnd) + " miles!"
|
|
print "Now you're really in for it !!"; print
|
|
r = getNum("Does the enemy have guns(1), missiles(2), or both(3)")
|
|
print
|
|
if r != 2 then
|
|
s = input("What's the percent hit rate of enemy gunners (10 to 50)? ").val
|
|
if s<10 then
|
|
print "You lie, but you'll pay..."
|
|
showShotDown
|
|
return
|
|
end if
|
|
end if
|
|
print
|
|
print
|
|
if r > 1 then t = 35 else t = 0
|
|
if s + t > 100 * rnd then
|
|
showShotDown
|
|
else
|
|
showReturn
|
|
end if
|
|
end if
|
|
end function
|
|
|
|
s = 0 // hit rate of enemy gunners
|
|
r = 0 // whether enemy has guns(1), missiles(2), or both(3)
|
|
|
|
// Main Loop
|
|
while true
|
|
print "You are a pilot in a World War II bomber."
|
|
a = getNum("What side -- Italy(1), Allies(2), Japan(3), Germany(4)", 4)
|
|
|
|
if a == 1 then // Italy
|
|
b = getNum("Your target -- Albania(1), Greece(2), North Africa(3)")
|
|
print
|
|
print ["Should be easy -- you're flying a nazi-made plane.",
|
|
"Be careful!!!", "You're going for the oil, eh?"][b-1]
|
|
doNonJapanResult
|
|
|
|
else if a == 2 then // Allies
|
|
g = getNum("Aircraft -- Liberator(1), B-29(2), B-17(3), Lancaster(4)", 4)
|
|
print ["You've got 2 tons of bombs flying for Ploesti.",
|
|
"You're dumping the A-bomb on Hiroshima.",
|
|
"You're chasing the Aismark in the North Sea.",
|
|
"You're busting a German heavy water plant in the Ruhr."][g-1]
|
|
doNonJapanResult
|
|
|
|
else if a == 3 then // Japan (different logic than all others)
|
|
print "You're flying a kamikaze mission over the USS Lexington."
|
|
isFirst = input("Your first kamikaze mission(y or n)? ").lower
|
|
if isFirst and isFirst[0] == "n" then
|
|
s = 0
|
|
showReturn
|
|
else
|
|
print
|
|
if rnd > 0.65 then showSuccess else showShotDown
|
|
end if
|
|
|
|
else // Germany
|
|
m = getNum("A nazi, eh? Oh well. Are you going for Russia(1)," +
|
|
char(13) + "England(2), or France(3)")
|
|
print ["You're nearing Stalingrad.",
|
|
"Nearing London. Be careful, they've got radar.",
|
|
"Nearing Versailles. Duck soup. They're nearly defenseless."][m-1]
|
|
doNonJapanResult
|
|
end if
|
|
|
|
print; print; print; another = input("Another mission (y or n)? ").lower
|
|
if not another or another[0] != "y" then
|
|
print "Chicken !!!" ; print ; break
|
|
end if
|
|
end while
|