mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-10 04:07:28 -08:00
Added MiniScript verions of 37_Football and 38_Fur_Trader.
This commit is contained in:
431
00_Alternate_Languages/37_Football/MiniScript/ftball.ms
Normal file
431
00_Alternate_Languages/37_Football/MiniScript/ftball.ms
Normal file
@@ -0,0 +1,431 @@
|
||||
os = ["Dartmouth", ""]
|
||||
sa = [0, 1]
|
||||
ls = ["", "Kick","receive"," yard ","run back for ","ball on ",
|
||||
"yard line"," simple run"," tricky run"," short pass",
|
||||
" long pass","punt"," quick kick "," place kick"," loss ",
|
||||
" no gain","gain "," touchdown "," touchback ","safety***",
|
||||
"junk"]
|
||||
p = 0
|
||||
x = 0
|
||||
x1 = 0
|
||||
|
||||
fnf = function(x); return 1 - 2 * p; end function
|
||||
fng = function(z); return p * (x1 - x) + (1 - p) * (x - x1); end function
|
||||
|
||||
show_score = function
|
||||
print
|
||||
print "SCORE: " + sa[0] + " TO " + sa[1]
|
||||
print
|
||||
print
|
||||
end function
|
||||
|
||||
show_position = function
|
||||
if x <= 50 then
|
||||
print ls[5] + os[0] + " " + x + " " + ls[6]
|
||||
else
|
||||
print ls[5] + os[1] + " " + (100 - x) + " " + ls[6]
|
||||
end if
|
||||
end function
|
||||
|
||||
offensive_td = function
|
||||
print ls[17] + "***"
|
||||
if rnd <= 0.8 then
|
||||
sa[p] += 7
|
||||
print "Kick is good."
|
||||
else
|
||||
print "Kick is off to the side"
|
||||
sa[p] += 6
|
||||
end if
|
||||
show_score
|
||||
print os[p] + " kicks off"
|
||||
globals.p = 1 - p
|
||||
end function
|
||||
|
||||
// Main program
|
||||
main = function
|
||||
print " "*33 + "FTBALL"
|
||||
print " "*15 + "Creative Computing Morristown, New Jersey"
|
||||
print
|
||||
print
|
||||
print "This is Dartmouth championship football."
|
||||
print
|
||||
print "You will quarterback Dartmouth. Call plays as follows:"
|
||||
print "1= simple run; 2= tricky run; 3= short pass;"
|
||||
print "4= long pass; 5= punt; 6= quick kick; 7= place kick."
|
||||
print
|
||||
os[1] = input("Choose your opponent: ").upper
|
||||
os[0] = "DARMOUTH"
|
||||
print
|
||||
sa[0] = 0
|
||||
sa[1] = 0
|
||||
globals.p = floor(rnd * 2)
|
||||
print os[p] + " won the toss"
|
||||
if p != 0 then
|
||||
print os[1] + " Elects to receive."
|
||||
print
|
||||
else
|
||||
print "Do you elect to kick or receive? "
|
||||
while true
|
||||
str = input.lower
|
||||
if str and (str[0] == "k" or str[0] == "r") then break
|
||||
print "Incorrect answer. Please type 'kick' or 'receive'"
|
||||
end while
|
||||
if str[0] == "k" then e = 1 else e = 2
|
||||
if e == 1 then globals.p = 1
|
||||
end if
|
||||
globals.t = 0
|
||||
start = 1
|
||||
while true
|
||||
if start <= 1 then
|
||||
x = 40 + (1 - p) * 20
|
||||
end if
|
||||
if start <= 2 then
|
||||
y = floor(200 * ((rnd - 0.5))^3 + 55)
|
||||
print " " + y + " " + ls[3] + " kickoff"
|
||||
x = x - fnf(1) * y
|
||||
if abs(x - 50) >= 50 then
|
||||
print "Touchback for " + os[p] + "."
|
||||
x = 20 + p * 60
|
||||
start = 4
|
||||
else
|
||||
start = 3
|
||||
end if
|
||||
end if
|
||||
if start <= 3 then
|
||||
y = floor(50 * (rnd)^2) + (1 - p) * floor(50 * (rnd)^4)
|
||||
x = x + fnf(1) * y
|
||||
if abs(x - 50) < 50 then
|
||||
print " " + y + " " + ls[3] + " runback"
|
||||
else
|
||||
print ls[4]
|
||||
offensive_td
|
||||
start = 1
|
||||
continue
|
||||
end if
|
||||
end if
|
||||
if start <= 4 then
|
||||
// First down
|
||||
show_position
|
||||
end if
|
||||
if start <= 5 then
|
||||
x1 = x
|
||||
d = 1
|
||||
print
|
||||
print "First down " + os[p] + "***"
|
||||
print
|
||||
print
|
||||
end if
|
||||
// New play
|
||||
globals.t += 1
|
||||
if t == 30 then
|
||||
if rnd <= 1.3 then
|
||||
print "Game delayed. Dog on field."
|
||||
print
|
||||
end if
|
||||
end if
|
||||
if t >= 50 and rnd <= 0.2 then break
|
||||
if p != 1 then
|
||||
// Opponent's play
|
||||
if d <= 1 then
|
||||
if rnd > 1/3 then z = 1 else z = 3
|
||||
else if d != 4 then
|
||||
if 10 + x - x1 < 5 or x < 5 then
|
||||
if rnd > 1/3 then z = 1 else z = 3
|
||||
else if x <= 10 then
|
||||
a = floor(2 * rnd)
|
||||
z = 2 + a
|
||||
else if x <= x1 or d < 3 or x < 45 then
|
||||
a = floor(2 * rnd)
|
||||
z = 2 + a * 2
|
||||
else
|
||||
if (rnd > 1 / 4) then
|
||||
z = 4
|
||||
else
|
||||
z = 6
|
||||
end if
|
||||
end if
|
||||
else
|
||||
if x <= 30 then
|
||||
z = 5
|
||||
else if 10 + x - x1 < 3 or x < 3 then
|
||||
if rnd > 1/3 then z = 1 else z = 3
|
||||
else
|
||||
z = 7
|
||||
end if
|
||||
end if
|
||||
else
|
||||
while true
|
||||
z = input("Next play? ").val
|
||||
if 1 <= z <= 7 then break
|
||||
print "Illegal play number, retype"
|
||||
end while
|
||||
end if
|
||||
f = 0
|
||||
print ls[z + 6] + ". "
|
||||
r = rnd * (0.98 + fnf(1) * 0.02)
|
||||
r1 = rnd
|
||||
if z == 1 or z == 2 then // Simple Run or Tricky Run
|
||||
done = false
|
||||
if z == 1 then
|
||||
y = floor(24 * (r - 0.5)^3 + 3)
|
||||
if rnd >= 0.05 then
|
||||
routine = 1
|
||||
done = true
|
||||
end if
|
||||
else
|
||||
y = floor(20 * r - 5)
|
||||
if rnd > 0.1 then
|
||||
routine = 1
|
||||
done = true
|
||||
end if
|
||||
end if
|
||||
if not done then
|
||||
f = -1
|
||||
x3 = x
|
||||
x = x + fnf(1) * y
|
||||
if abs(x - 50) < 50 then
|
||||
print "*** Fumble after "
|
||||
routine = 2
|
||||
else
|
||||
print "*** Fumble."
|
||||
routine = 4
|
||||
end if
|
||||
end if
|
||||
else if z == 3 or z == 4 then // Short Pass or Long Pass
|
||||
if z == 3 then
|
||||
y = floor(60 * (r1 - 0.5)^3 + 10)
|
||||
else
|
||||
y = floor(160 * ((r1 - 0.5))^3 + 30)
|
||||
end if
|
||||
if z == 3 and r < 0.05 or z == 4 and r < 0.1 then
|
||||
if d != 4 then
|
||||
print "Intercepted."
|
||||
f = -1
|
||||
x = x + fnf(1) * y
|
||||
if abs(x - 50) >= 50 then
|
||||
routine = 4
|
||||
else
|
||||
routine = 3
|
||||
end if
|
||||
else
|
||||
y = 0
|
||||
if rnd < 0.3 then
|
||||
print "Batted down. ", ""
|
||||
else
|
||||
print "Incomplete. ", ""
|
||||
end if
|
||||
routine = 1
|
||||
end if
|
||||
else if z == 4 and r < 0.3 then
|
||||
print "Passer tackled. ", ""
|
||||
y = -floor(15 * r1 + 3)
|
||||
routine = 1
|
||||
else if z == 3 and r < 0.15 then
|
||||
print "Passer taclked. ", ""
|
||||
y = -floor(10 * r1)
|
||||
routine = 1
|
||||
else if z == 3 and r < 0.55 or z == 4 and r < 0.75 then
|
||||
y = 0
|
||||
if rnd < 0.3 then
|
||||
print "Batted down. ", ""
|
||||
else
|
||||
print "Incomplete. ", ""
|
||||
end if
|
||||
routine = 1
|
||||
else
|
||||
print "Complete. ", ""
|
||||
routine = 1
|
||||
end if
|
||||
else if z == 5 or z == 6 then // Punt or Quick Kick
|
||||
y = floor(100 * ((r - 0.5))^3 + 35)
|
||||
if (d != 4) then y = floor(y * 1.3)
|
||||
print " " + y + " " + ls[3] + " punt"
|
||||
if abs(x + y * fnf(1) - 50) < 50 and d >= 4 then
|
||||
y1 = floor((r1)^2 * 20)
|
||||
print " " + y1 + " " + ls[3] + " Run back"
|
||||
y = y - y1
|
||||
end if
|
||||
f = -1
|
||||
x = x + fnf(1) * y
|
||||
if abs(x - 50) >= 50 then routine = 4 else routine = 3
|
||||
else if z == 7 then // Place kick
|
||||
y = floor(100 * ((r - 0.5))^3 + 35)
|
||||
if r1 <= 0.15 then
|
||||
print "Kick is blocked ***"
|
||||
x = x - 5 * fnf(1)
|
||||
globals.p = 1 - p
|
||||
start = 4
|
||||
continue
|
||||
end if
|
||||
x = x + fnf(1) * y
|
||||
if abs(x - 50) >= 60 then
|
||||
if r1 <= 0.5 then
|
||||
print "Kick is off to the side."
|
||||
print ls[18]
|
||||
globals.p = 1 - p
|
||||
x = 20 + p * 60
|
||||
start = 4
|
||||
continue
|
||||
else
|
||||
print "Field goal ***"
|
||||
sa[p] = sa[p] + 3
|
||||
show_score
|
||||
print os[p] + " kicks off"
|
||||
globals.p = 1 - p
|
||||
start = 1
|
||||
continue
|
||||
end if
|
||||
else
|
||||
print "Kick is short."
|
||||
if abs(x - 50) >= 50 then
|
||||
// Touchback
|
||||
print ls[18]
|
||||
globals.p = 1 - p
|
||||
x = 20 + p * 60
|
||||
start = 4
|
||||
continue
|
||||
end if
|
||||
globals.p = 1 - p
|
||||
start = 3
|
||||
continue
|
||||
end if
|
||||
end if
|
||||
// Gain or loss
|
||||
if routine <= 1 then
|
||||
x3 = x
|
||||
x = x + fnf(1) * y
|
||||
if abs(x - 50) >= 50 then
|
||||
routine = 4
|
||||
end if
|
||||
end if
|
||||
if routine <= 2 then
|
||||
if y != 0 then
|
||||
print " " + abs(y) + " " + ls[3]
|
||||
if (y < 0) then
|
||||
yt = -1
|
||||
else if y > 0 then
|
||||
yt = 1
|
||||
else
|
||||
yt = 0
|
||||
end if
|
||||
print ls[15 + yt]
|
||||
if abs(x3 - 50) <= 40 and rnd < 0.1 then
|
||||
// Penalty
|
||||
p3 = floor(2 * rnd)
|
||||
print os[p3] + " offsides -- penalty of 5 yards."
|
||||
print
|
||||
print
|
||||
if p3 != 0 then
|
||||
print "Do you accept the penalty?"
|
||||
while true
|
||||
str = input.lower
|
||||
if str and (str[0] == "y" or str[0] == "n") then break
|
||||
print "Yype 'yes' or 'no'"
|
||||
end while
|
||||
if str[0] == "y" then
|
||||
f = 0
|
||||
d = d - 1
|
||||
if (p != p3) then
|
||||
x = x3 + fnf(1) * 5
|
||||
else
|
||||
x = x3 - fnf(1) * 5
|
||||
end if
|
||||
end if
|
||||
else
|
||||
// opponent's strategy on penalty
|
||||
if ((p != 1 and (y <= 0 or f < 0 or fng(1) < 3 * d - 2)) or
|
||||
(p == 1 and ((y > 5 and f >= 0) or d < 4 or fng(1) >= 10))) then
|
||||
print "penalty refused."
|
||||
else
|
||||
print "penalty accepted."
|
||||
f = 0
|
||||
d = d - 1
|
||||
if (p != p3) then
|
||||
x = x3 + fnf(1) * 5
|
||||
else
|
||||
x = x3 - fnf(1) * 5
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
routine = 3
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
if routine <= 3 then
|
||||
show_position
|
||||
if f != 0 then
|
||||
globals.p = 1 - p
|
||||
start = 5
|
||||
continue
|
||||
else if fng(1) >= 10 then
|
||||
start = 5
|
||||
continue
|
||||
else if d == 4 then
|
||||
globals.p = 1 - p
|
||||
start = 5
|
||||
continue
|
||||
else
|
||||
d += 1
|
||||
print "DOWN: " + d + " "
|
||||
if (x1 - 50) * fnf(1) >= 40 then
|
||||
print "Goal to go"
|
||||
else
|
||||
print "Yards to go: " + (10 - fng(1))
|
||||
end if
|
||||
print
|
||||
print
|
||||
start = 6
|
||||
continue
|
||||
end if
|
||||
end if
|
||||
if routine <= 4 then
|
||||
// Ball in end-zone
|
||||
e = (x >= 100)
|
||||
case = 1 + e - f * 2 + p * 4
|
||||
if case == 1 or case == 5 then
|
||||
// Safety
|
||||
sa[1 - p] = sa[1 - p] + 2
|
||||
print ls[19]
|
||||
show_score
|
||||
print os[p] + " kicks off from its 20 yard line."
|
||||
x = 20 + p * 60
|
||||
globals.p = 1 - p
|
||||
start = 2
|
||||
continue
|
||||
end if
|
||||
if case == 3 or case == 6 then
|
||||
// defensive td
|
||||
print ls[17] + "for " + os[1 - p] + "***"
|
||||
globals.p = 1 - p
|
||||
end if
|
||||
if case == 3 or case == 6 or case == 2 or case == 8 then
|
||||
// offensive td
|
||||
print ls[17] + "***"
|
||||
if rnd <= 0.8 then
|
||||
sa[p] = sa[p] + 7
|
||||
print "kick is good."
|
||||
else
|
||||
print "kick is off to the side"
|
||||
sa[p] = sa[p] + 6
|
||||
end if
|
||||
show_score
|
||||
print os[p] + " kicks off"
|
||||
globals.p = 1 - p
|
||||
start = 1
|
||||
continue
|
||||
end if
|
||||
if case == 4 or case == 7 then
|
||||
// Touchback
|
||||
print ls[18]
|
||||
globals.p = 1 - p
|
||||
x = 20 + p * 60
|
||||
start = 4
|
||||
continue
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
print "END OF GAME ***"
|
||||
print "FINAL SCORE: " + os[0] + ": " + sa[0] + " " + os[1] + ": " + sa[1]
|
||||
end function
|
||||
|
||||
main
|
||||
Reference in New Issue
Block a user