mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-21 23:00:43 -08:00
Added MiniScript version of 07_Basketball
This commit is contained in:
16
00_Alternate_Languages/07_Basketball/MiniScript/README.md
Normal file
16
00_Alternate_Languages/07_Basketball/MiniScript/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
|
||||
|
||||
Conversion to [MiniScript](https://miniscript.org).
|
||||
|
||||
Ways to play:
|
||||
|
||||
1. Command-Line MiniScript:
|
||||
Download for your system from https://miniscript.org/cmdline/, install, and then run the program with a command such as:
|
||||
|
||||
miniscript basketball.ms
|
||||
|
||||
2. Mini Micro:
|
||||
Download Mini Micro from https://miniscript.org/MiniMicro/, launch, and then click the top disk slot and chose "Mount Folder..." Select the folder containing the BASIC program. Then, at the Mini Micro command prompt, enter:
|
||||
|
||||
load "basketball"
|
||||
run
|
||||
299
00_Alternate_Languages/07_Basketball/MiniScript/basketball.ms
Normal file
299
00_Alternate_Languages/07_Basketball/MiniScript/basketball.ms
Normal file
@@ -0,0 +1,299 @@
|
||||
print " "*31 + "Basketball"
|
||||
print " "*15 + "Creative Computing Morristown, New Jersey"
|
||||
print; print; print
|
||||
print "This is Dartmouth College basketball. You will be Dartmouth"
|
||||
print " captain and playmaker. Call shots as follows: 1. Long"
|
||||
print " (30 ft.) jump shot; 2. Short (15 ft.) jump shot; 3. Lay"
|
||||
print " up; 4. Set shot."
|
||||
print "Both teams will use the same defense. Call defense as"
|
||||
print "follows: 6. Press; 6.5 Man-to-Man; 7. Zone; 7.5 None."
|
||||
print "To change defense, just type 0 as your next shot."
|
||||
|
||||
inputDefense = function(prompt)
|
||||
while true
|
||||
globals.defense = input(prompt).val
|
||||
if defense >= 6 then break
|
||||
end while
|
||||
end function
|
||||
|
||||
// Do the center jump; return US or THEM who gets the ball.
|
||||
centerJump = function
|
||||
print "Center Jump"
|
||||
if rnd < 0.6 then
|
||||
print opponent + " controls the tap."
|
||||
return THEM
|
||||
else
|
||||
print "Dartmouth controls the tap."
|
||||
return US
|
||||
end if
|
||||
end function
|
||||
|
||||
inputShot = function
|
||||
while true
|
||||
globals.shotType = input("Your shot (0-4): ")
|
||||
if shotType == "0" then
|
||||
inputDefense "Your new defensive alignment is? "
|
||||
continue
|
||||
end if
|
||||
globals.shotType = shotType.val
|
||||
if 1 <= shotType <= 4 then return
|
||||
end while
|
||||
end function
|
||||
|
||||
endFirstHalf = function
|
||||
print " ***** End of first half *****"; print
|
||||
print "Score: Dartmouth: " + score[US] + " " + opponent + ": " + score[THEM]
|
||||
print; print
|
||||
globals.inControl = centerJump
|
||||
end function
|
||||
|
||||
checkGameOver = function
|
||||
print
|
||||
if score[0] != score[1] then
|
||||
print " ***** END OF GAME *****"
|
||||
print "Final score: Dartmouth: " + score[US] + " " + opponent + ": " + score[THEM]
|
||||
print
|
||||
return true
|
||||
else
|
||||
print " ***** End of Second Half *****"
|
||||
print "Score at end of regulation time:"
|
||||
print " Dartmouth: " + score[US] + " " + opponent + ": " + score[THEM]
|
||||
print
|
||||
print "Begin two minute overtime period"
|
||||
return false
|
||||
end if
|
||||
end function
|
||||
|
||||
scoreBasket = function(who = null)
|
||||
if who == null then who = inControl
|
||||
score[who] += 2
|
||||
printScore
|
||||
end function
|
||||
|
||||
printScore = function
|
||||
print "Score: " + score[1] + " to " + score[0]
|
||||
print "Time: " + timer
|
||||
end function
|
||||
|
||||
// Logic for a Dartmouth jump shot. Return true to continue as Dartmouth,
|
||||
// false to pass the ball to the opponent.
|
||||
dartmouthJumpShot = function
|
||||
if rnd <= 0.341 * defense / 8 then
|
||||
print "Shot is good."
|
||||
scoreBasket
|
||||
return false
|
||||
end if
|
||||
|
||||
if rnd < 0.682 * defense / 8 then
|
||||
print "Shot is off target."
|
||||
if defense/6 * rnd > 0.45 then
|
||||
print "Rebound to " + opponent
|
||||
return false
|
||||
end if
|
||||
print "Dartmouth controls the rebound."
|
||||
if rnd <= 0.4 then
|
||||
globals.shotType = 3 + (rnd > 0.5)
|
||||
return true
|
||||
end if
|
||||
if defense == 6 and rnd < 0.6 then
|
||||
print "Pass stolen by " + opponent + ", easy layup."
|
||||
scoreBasket THEM
|
||||
return true
|
||||
end if
|
||||
print "Ball passed back to you."
|
||||
return true
|
||||
end if
|
||||
|
||||
if rnd < 0.782 * defense/8 then
|
||||
print "Shot is blocked. Ball controlled by ", ""
|
||||
if rnd > 0.5 then
|
||||
print opponent + "."
|
||||
return false
|
||||
else
|
||||
print "Dartmouth."
|
||||
return true
|
||||
end if
|
||||
end if
|
||||
|
||||
if rnd > 0.843 * defense/8 then
|
||||
print "Charging foul. Dartmouth loses ball."
|
||||
else
|
||||
print "Shooter is fouled. Two shots."
|
||||
doFoulShots US
|
||||
end if
|
||||
return false
|
||||
end function
|
||||
|
||||
// Logic for an opponent jump shot. Return true to continue as opponent,
|
||||
// false to pass the ball to Dartmouth.
|
||||
opponentJumpShot = function
|
||||
if rnd <= 0.35 * defense / 8 then
|
||||
print "Shot is good."
|
||||
scoreBasket
|
||||
return false
|
||||
end if
|
||||
|
||||
if 8 / defense * rnd <= 0.75 then
|
||||
print "Shot is off rim."
|
||||
return opponentMissed
|
||||
end if
|
||||
|
||||
if 8 / defense * rnd <= 0.9 then
|
||||
print "Player fouled. Two shots."
|
||||
doFoulShots THEM
|
||||
return false
|
||||
end if
|
||||
print "Offensive foul. Dartmouth's ball."
|
||||
return false
|
||||
end function
|
||||
|
||||
// Do a Dartmouth set shot or lay-up. Return true to continue as Dartmouth,
|
||||
// false to pass the ball to the opponent.
|
||||
dartmouthSetOrLay = function
|
||||
if 7 / defense * rnd <= 0.4 then
|
||||
print "Shot is good. Two points."
|
||||
scoreBasket
|
||||
else if 7 / defense * rnd <= 0.7 then
|
||||
print "Shot is off the rim."
|
||||
if rnd < 0.667 then
|
||||
print opponent + " controls the rebound."
|
||||
return false
|
||||
end if
|
||||
print "Dartmouth controls the rebound."
|
||||
if rnd < 0.4 then return true
|
||||
print "Ball passed back to you."
|
||||
return true
|
||||
else if 7 / defense * rnd < 0.875 then
|
||||
print "Shooter fouled. Two shots."
|
||||
doFoulShots US
|
||||
else if 7 / defense * rnd < 0.925 then
|
||||
print "Shot blocked. " + opponent + "'s ball."
|
||||
else
|
||||
print "Charging foul. Dartmouth loses the ball."
|
||||
end if
|
||||
return false
|
||||
end function
|
||||
|
||||
// Do an opponent set shot or lay-up. Return true to continue as opponent,
|
||||
// false to pass the ball to Dartmouth.
|
||||
opponentSetOrLay = function
|
||||
if 7 / defense * rnd <= 0.413 then
|
||||
print "Shot is missed."
|
||||
return opponentMissed
|
||||
else
|
||||
print "Shot is good."
|
||||
scoreBasket
|
||||
return false
|
||||
end if
|
||||
end function
|
||||
|
||||
// Handle opponent missing a shot -- return true to continue as opponent,
|
||||
// false to pass the ball to Dartmouth.
|
||||
opponentMissed = function
|
||||
if defense / 6 * rnd <= 0.5 then
|
||||
print "Dartmouth controls the rebound."
|
||||
return false
|
||||
else
|
||||
print opponent + " controls the rebound."
|
||||
if defense == 6 and rnd <= 0.75 then
|
||||
print "Ball stolen. Easy lay up for Dartmouth."
|
||||
scoreBasket US
|
||||
return true
|
||||
end if
|
||||
if rnd <= 0.5 then
|
||||
print "Pass back to " + opponent + " guard."
|
||||
return true
|
||||
end if
|
||||
globals.shotType = 4 - (rnd > 0.5)
|
||||
return true
|
||||
end if
|
||||
end function
|
||||
|
||||
playOneSide = function
|
||||
print
|
||||
while true
|
||||
globals.timer += 1
|
||||
if timer == 50 then return endFirstHalf
|
||||
if time == 92 then
|
||||
print " *** Two minutes left in the game ***"; print
|
||||
end if
|
||||
if shotType == 1 or shotType == 2 then
|
||||
print "Jump Shot"
|
||||
if inControl == US then
|
||||
if dartmouthJumpShot then continue else break
|
||||
else
|
||||
if opponentJumpShot then continue else break
|
||||
end if
|
||||
else // (if shot type >= 3)
|
||||
if shotType > 3 then print "Set shot." else print "Lay up."
|
||||
if inControl == US then
|
||||
if dartmouthSetOrLay then continue else break
|
||||
else
|
||||
if opponentSetOrLay then continue else break
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
globals.inControl = 1 - globals.inControl
|
||||
end function
|
||||
|
||||
doFoulShots = function(who)
|
||||
if rnd > 0.49 then
|
||||
if rnd > 0.75 then
|
||||
print "Both shots missed."
|
||||
else
|
||||
print "Shooter makes one shot and misses one."
|
||||
score[who] += 1
|
||||
end if
|
||||
else
|
||||
print "Shooter makes both shots."
|
||||
score[who] += 2
|
||||
end if
|
||||
printScore
|
||||
end function
|
||||
|
||||
opponentPlay = function
|
||||
print
|
||||
while true
|
||||
globals.timer += 1
|
||||
if timer == 50 then return endFirstHalf
|
||||
if time == 92 then
|
||||
print " *** Two minutes left in the game ***"; print
|
||||
end if
|
||||
if shotType == 1 or shotType == 2 then
|
||||
print "Jump Shot"
|
||||
if opponentJumpShot then continue else break
|
||||
else // (if shot type >= 3)
|
||||
if shotType > 3 then print "Set shot." else print "Lay up."
|
||||
if opponentSetOrLay then continue else break
|
||||
end if
|
||||
end while
|
||||
globals.inControl = US
|
||||
end function
|
||||
|
||||
// Constants
|
||||
THEM = 0
|
||||
US = 1
|
||||
|
||||
// Main program
|
||||
inputDefense "Your starting defense will be? "
|
||||
print
|
||||
opponent = input("Choose your opponent? ")
|
||||
score = [0,0] // score for each team (US and THEM)
|
||||
gameOver = false
|
||||
inControl = centerJump
|
||||
timer = 0
|
||||
while not gameOver
|
||||
print
|
||||
if inControl == US then
|
||||
inputShot
|
||||
playOneSide
|
||||
else
|
||||
shotType = ceil(10 / 4 * rnd + 1)
|
||||
playOneSide
|
||||
end if
|
||||
if timer >= 100 then
|
||||
if checkGameOver then break
|
||||
timer = 93
|
||||
dartmouthHasBall = centerJump
|
||||
end if
|
||||
end while
|
||||
Reference in New Issue
Block a user