Merge pull request #866 from JoeStrout/miniscript-batch-3

Miniscript batch 3
This commit is contained in:
Jeff Atwood
2023-07-29 12:43:18 -07:00
committed by GitHub
30 changed files with 1424 additions and 15 deletions

View File

@@ -11,6 +11,8 @@ playerMoney = [0]*8 // total $ for each player (T)
roundWinnings = [0]*7 // total $ won/lost this hand for each player (S)
betPerHand = [0]*15 // bet for each hand (B)
cardNames = " A 2 3 4 5 6 7 8 9 10 J Q K".split
reshuffle = function
print "Reshuffling"
globals.deck = range(1,13)*4
@@ -23,6 +25,12 @@ getCard = function
return deck.pop
end function
// Function to get a name for the given card, preceded by "a" or "an"
a = function(cardNum)
article = "a" + "n" * (cardNum == 1 or cardNum == 8)
return article + " " + cardNames[cardNum]
end function
// Function to evaluate the given hand. Total is usually put into
// handValue(handNum). Totals have the following meaning:
// 2-10...Hard 2-10
@@ -123,7 +131,7 @@ playOneRound = function
// Test for dealer blackjack
if (dealerCard0==1 and dealerCard1 > 9) or
(dealerCard0 > 9 and dealerCard1==1) then
print; print "Dealer has a " + cardNames[dealerCard1] + " in the hole for Blackjack"
print; print "Dealer has " + a(dealerCard1) + " in the hole for Blackjack"
for i in range(0, numPlayers)
handValue[i] = evalHand(i)
end for
@@ -144,11 +152,11 @@ playOneRound = function
if hands[i] or hands[i+8] then anyLeft = true
end for
if not anyLeft then
print "Dealer had a " + cardNames[hands[numPlayers][1]] + " concealed."
print "Dealer had " + a(hands[numPlayers][1]) + " concealed."
else
// Play dealer's hand.
dispTotal = displayTotal(handValue[numPlayers])
print "Dealer has a " + cardNames[hands[numPlayers][1]] + " concealed" +
print "Dealer has " + a(hands[numPlayers][1]) + " concealed" +
" for a total of " + dispTotal + "."
while handValue[numPlayers] > 0 and dispTotal <= 16
card = getCard
@@ -187,7 +195,7 @@ playHand = function(handNum, prompt=null, allowSplit=true)
handValue[handNum] = evalHand(handNum)
if choice == "D" then betPerHand[handNum] *= 2
card = getCard
print "Received a " + cardNames[card], " "
print "Received " + a(card), " "
hands[handNum].push card
handValue[handNum] = evalHand(handNum)
if handValue[handNum] < 0 then
@@ -209,10 +217,10 @@ playHand = function(handNum, prompt=null, allowSplit=true)
hands[hand2] = [hands[handNum].pop]
betPerHand[hand2] = betPerHand[handNum]
card = getCard
print "First hand receives a " + cardNames[card]
print "First hand receives " + a(card)
hands[handNum].push card
card = getCard
print "Second hand receives a " + cardNames[card]
print "Second hand receives " + a(card)
hands[hand2].push card
if card1 != 1 then
// Now play the two hands
@@ -252,9 +260,7 @@ tallyResults = function
print
end function
// Main program starts here // (Line 1500)
// Initialize
cardNames = "n A 2 3 4 5 6 7 8 9 10 J Q K".split
// Main program starts here
if getYesNo("Do you want instructions? ") == "Y" then
print "This is the game of 21. As many as 7 players may play the"

View 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 bombardment.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 "bombardment"
run

View File

@@ -0,0 +1,101 @@
print " "*33 + "Bombardment"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
print "You are on a battlefield with 4 platoons and you"
print "have 25 outposts available where they may be placed."
print "You can only place one platoon at any one outpost."
print "The computer does the same with its four platoons."
print
print "The object of the game is to fire missiles at the"
print "outposts of the computer. It will do the same to you."
print "The one who destroys all four of the enemy's platoons"
print "first is the winner."
print
print "Good luck... and tell us where you want the bodies sent!"
print
input "(Press Return.)" // (so user can read the above)
print
print "Tear off matrix and use it to check off the numbers."
for i in range(1,5); print; end for
memory = [] // records computer's guesses
for row in range(1,5)
for i in range(row*5-4, row*5)
print (" " + i)[-6:], ""
end for
print
end for
print
// Define a helper function to pick a random position (1-25)
// that is not already in the given list.
pickOutpost = function(excludingThese)
while true
pick = floor(rnd * 25) + 1
if excludingThese.indexOf(pick) == null then return pick
end while
end function
// Choose the computer's four positions.
computerOutposts = []
for i in range(1,4)
computerOutposts.push pickOutpost(computerOutposts)
end for
playerOutposts = []
while playerOutposts.len != 4
inp = input("What are your four positions? ")
inp = inp.replace(", ", " ").replace(",", " ")
inp = inp.split
for pos in inp
pos = pos.val
playerOutposts.push pos
if pos < 1 or pos > 25 then playerOutposts=[]
end for
end while
// Main loop.
while true
// player's attack
pos = input("Where do you wish to fire your missile? ").val
if computerOutposts.indexOf(pos) == null then
print "Ha, ha you missed. My turn now:"
else
print "You got one of my outposts!"
computerOutposts.remove computerOutposts.indexOf(pos)
left = computerOutposts.len
if left == 3 then
print "One down, three to go."
else if left == 2 then
print "Two down, two to go."
else if left == 3 then
print "Three down, one to go."
else
print "You got me, I'm going fast. ButI'll get you when"
print "My transisto&s recup%ra*e!"
break
end if
end if
// computer's attack
pos = pickOutpost(memory)
memory.push pos
if playerOutposts.indexOf(pos) == null then
print "I missed you, you dirty rat. I picked " + pos + ". Your turn:"
else
playerOutposts.remove playerOutposts.indexOf(pos)
left = playerOutposts.len
if left == 0 then
print "You're dead. Your last outpost was at " + pos + ". Ha, ha, ha."
print "Better luck next time."
break
end if
print "I got you. It won't be long now. Post " + pos + " was hit."
if left == 3 then
print "You have only three outposts left."
else if left == 2 then
print "You have only two outposts left."
else if left == 1 then
print "You have only one outpost left."
end if
end if
end while

View 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 bombsaway.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 "bombsaway"
run

View File

@@ -0,0 +1,112 @@
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

View 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 bounce.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 "bounce"
run

View File

@@ -0,0 +1,55 @@
print " "*33 + "Bounce"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
t = [0]*21
print "This simulation lets you specify the initial velocity"
print "of a ball thrown straight up, and the coefficient of"
print "elasticity of the ball. Please use a decimal fraction"
print "coefficiency (less than 1)."
print
print "You also specify the time increment to be used in"
print "'strobing' the ball's flight (try .1 initially)."
print
addToLine = function(line, tabPos, textToAdd)
return line + " " * (floor(tabPos) - line.len) + textToAdd
end function
while true
s2 = input("Time increment (sec)? ").val
print
v = input("Velocity (fps)? ").val
print
c = input("Coefficient? ").val
print
print "feet"
print
s1 = floor(70/(v/(16*s2)))
for i in range(1, s1)
t[i]=v*c^(i-1)/16
end for
for h in range(floor(-16*(v/32)^2+v^2/32+.5), 0, -0.5)
line = ""
if floor(h)==h then line = str(h)
l=0
for i in range(1, s1)
for time in range(0, t[i], s2)
l=l+s2
if abs(h-(.5*(-32)*time^2+v*c^(i-1)*time))<=.25 then
line = addToLine(line, l/s2, "0")
end if
end for
time = t[i+1]/2
if -16*time^2+v*c^(i-1)*time < h then break
end for
print line
end for
print " " + "." * floor((l+1)/s2+1)
line = " 0"
for i in range(1, l+.9995)
line = addToLine(line, i/s2, i)
end for
print line
print " " * floor((l+1)/(2*s2)-2) + "seconds"
print
end while

View 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 bowling.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 "bowling"
run

View File

@@ -0,0 +1,138 @@
import "listUtil"
print " "*34 + "Bowl"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
pinDown = [0]*10 // state of each pin: 1=down, 0=standing
player = 1
frame = 1
ball = 1
scores = list.init3d(10, 4, 3, 0) // index by [frame][player][ball], all 0-based
printInstructions = function
print "The game of bowling takes mind and skill. During the game"
print "the computer will keep score. You may compete with"
print "other players [up to four]. You will be playing ten frames."
print "On the pin diagram 'O' means the pin is down...'+' means the"
print "pin is standing. After the game the computer will show your"
print "scores."
end function
printPinDiagram = function
print "Player: " + (player+1) + " Frame: " + (frame+1) + " Ball: " + (ball+1)
print
k = 0
for row in range (0, 3)
line = " " * row
for j in range(1, 4-row)
line += "+O"[pinDown[k]] + " "
k += 1
end for
print line
end for
end function
printAnalysis = function(previousDown=0)
pinsLeft = 10 - pinDown.sum
if pinDown.sum == previousDown then print "Gutter!!"
if ball == 0 and pinsLeft == 0 then
print "Strike!!!!!" + char(7)*4
globals.status = 3
else if ball == 1 and pinsLeft == 0 then
print "Spare!!!!"
globals.status = 2
else if ball == 1 and pinsLeft > 0 then
print "Error!!!" // (i.e., didn't clear all the pins in 2 balls)
globals.status = 1
end if
end function
rollOneBall = function
print "Type roll to get the ball going."
input // (response ignored)
for i in range(1, 20)
// Generate a random number from 0-99, then take this mod 15.
// This gives us a slightly higher chance of hitting a non-existent
// pin than one of the actual 10.
x = floor(rnd*100)
if x % 15 < 10 then pinDown[x % 15] = 1
end for
printPinDiagram
end function
doOneFrame = function
globals.pinDown = [0]*10
globals.ball = 0
rollOneBall
printAnalysis
hitOnBall0 = pinDown.sum
scores[frame][player][ball] = hitOnBall0
globals.ball = 1
if hitOnBall0 < 10 then
print "Roll your 2nd ball"
print
rollOneBall
printAnalysis hitOnBall0
end if
// Note: scoring in this program is not like real bowling.
// It just stores the number of pins down at the end of each ball,
// and a status code (1, 2, or 3).
scores[frame][player][ball] = pinDown.sum
scores[frame][player][2] = status
end function
pad = function(n, width=3)
return (" "*width + n)[-width:]
end function
printFinalScores = function
print "FRAMES"
for i in range(1,10)
print pad(i), ""
end for
print
for player in range(0, numPlayers-1)
for i in range(0, 2)
for frame in range(0, 9)
print pad(scores[frame][player][i]), ""
end for
print
end for
print
end for
end function
playOneGame = function
for f in range(0, 9)
globals.frame = f
for p in range(0, numPlayers-1)
globals.player = p
doOneFrame
end for
end for
print
printFinalScores
end function
// Main program
print "Welcome to the alley"
print "Bring your friends"
print "Okay let's first get acquainted"
print
ans = input("The instructions (Y/N)? ").upper
if not ans or ans[0] != "N" then printInstructions
while true
numPlayers = input("First of all...How many are playing? ").val
if 0 < numPlayers < 5 then break
print "Please enter a number from 1 to 4."
end while
print
print "Very good..."
while true
playOneGame
print
ans = input("Do you want another game? ").upper
if not ans or ans[0] != "Y" then break
end while

View 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 boxing.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 "boxing"
run

View File

@@ -0,0 +1,174 @@
print " "*33 + "Boxing"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
print "Boxing Olympic Style (3 Rounds -- 2 out of 3 Wins)"
playerWins = 0
opponentWins = 0
print
opponentName = input("What is your opponent's name? ")
playerName = input("Input your man's name? ")
print "Different punches are: (1) full swing; (2) hook; (3) uppercut; (4) jab."
playerBest = input("What is your man's best? ").val
playerWeakness = input("What is his vulnerability? " ).val
while true
opponentBest = floor(4 * rnd + 1)
opponentWeakness = floor(4 * rnd + 1)
if opponentBest != opponentWeakness then break
end while
print opponentName + "'s advantage is " + opponentBest + " and vulnerability is secret."
print
playerConnects = function
print "He connects!"
if playerPoints > 35 then
print opponentName + " is knocked cold and " + playerName + " is the winner and champ!"
globals.done = true
return
end if
globals.playerPoints += 15
end function
doPlayerPunch = function
p = input(playerName + "'s punch? ").val
if p == playerBest then globals.playerPoints += 2
if p == 1 then // Full Swing
print playerName + " swings and ", ""
if opponentWeakness == 4 then // (probably a bug in original code)
playerConnects
else
x3 = floor(30 * rnd+1)
if x3 < 10 then
playerConnects
else
print "he misses "
if playerPoints != 1 then
print
print
end if
end if
end if
else if p == 2 then // Hook
print playerName + " gives the hook... ", ""
if opponentWeakness == 2 then
globals.playerPoints += 7
else
h1 = floor(2 * rnd + 1)
if h1 == 1 then
print "But it's blocked!!!!!!!!!!!!!"
else
print "Connects..."
globals.playerPoints += 7
end if
end if
else if p == 3 then // Uppercut
print playerName + " tries an uppercut ", ""
if opponentWeakness == 3 or floor(100 * rnd + 1) < 51 then
print "and he connects!"
globals.playerPoints += 4
else
print "and it's blocked (lucky block!)"
end if
else // Jab
print playerName + " jabs at " + opponentName + "'s head ", ""
if opponentWeakness != 4 and floor(8 * rnd + 1) >= 4 then
print "It's blocked."
else
globals.playerPoints += 3
end if
end if
end function
playerKnockedOut = function
print playerName + " is knocked cold and " + opponentName + " is the winner and champ!"
globals.done = true
end function
doOpponentPunch = function
j7 = floor(4 * rnd + 1)
if j7 == playerBest then globals.opponentPoints += 2
if j7 == 1 then // Full swing
print opponentName + " takes a full swing and ", ""
if playerWeakness == 1 or floor(60 * rnd + 1) < 30 then
print "POW!!!!! He hits him right in the face!"
if opponentPoints > 35 then
playerKnockedOut
else
globals.opponentPoints += 15
end if
else
print "it's blocked!"
end if
end if
if j7 == 2 then // Hook
print opponentName + " gets " + playerName + " in the jaw (ouch!)"
globals.playerPoints += 7
print "....and again!"
globals.playerPoints += 5
if opponentPoints > 35 then
playerKnockedOut
return
end if
print
// continue below as if an Uppercut (probably a bug in the original code)
end if
if j7 == 2 or j7 == 3 then // Uppercut, or Hook
print playerName + " is attacked by an uppercut (oh,oh)..."
if playerWeakness == 3 or floor(200*rnd+1) <= 75 then
print "and " + opponentName + " connects..."
globals.opponentPoints += 8
else
print " blocks and hits " + opponentName + " with a hook."
globals.playerPoints += 5
end if
end if
if j7 == 4 then // Jab
print opponentName + " jabs and ", ""
if playerWeakness == 4 or floor(7 * rnd + 1) > 4 then
print "blood spills !!!"
globals.opponentPoints += 5
else
print "It's blocked!"
end if
end if
end function
playOneRound = function
globals.playerPoints = 0
globals.opponentPoints = 0
print "Round " + round + " begins..."
for r1 in range(1, 7)
i = floor(10 * rnd + 1)
if i <= 5 then
doPlayerPunch
else
doOpponentPunch
end if
if done then return
end for // next R1 (sub-round)
if playerPoints > opponentPoints then
print; print playerName + " wins round " + round
globals.playerWins += 1
else
print; print opponentName + " wins round " + round
globals.opponentWins += 1
end if
end function
done = false
for round in range(1,3)
playOneRound
if done then break
if opponentWins >= 2 then
print opponentName + " wins (nice going, " + opponentName + ")."
break
else if playerWins >= 2 then
print playerName + " amazingly wins!!"
break
end if
end for // next round
print
print
print "and now goodbye from the Olympic arena."
print

View 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 bug.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 "bug"
run

View File

@@ -0,0 +1,192 @@
print " "*34 + "Bug"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
print "The game Bug"
print "I hope you enjoy this game."
print
ans = input("Do you want instructions? ").lower
if not ans or ans[0] != "n" then
print "The object of bug is to finish your bug before i finish"
print "mine. Each number stands for a part of the bug body."
print "I will roll the die for you, tell you what i rolled for you"
print "what the number stands for, and if you can get the part."
print "If you can get the part I will give it to you."
print "The same will happen on my turn."
print "If there is a change in either bug I will give you the"
print "option of seeing the pictures of the bugs."
print "Ihe numbers stand for parts as follows:"
print "Number Part Number of part needed"
print "1 body 1"
print "2 neck 1"
print "3 head 1"
print "4 feelers 2"
print "5 tail 1"
print "6 legs 6"
print
input "(Press Return.)" // (wait before starting the game)
print
end if
// define a class to represent a bug (with all its body parts)
Bug = {}
Bug.body = false
Bug.neck = false
Bug.head = false
Bug.feelers = 0
Bug.tail = false
Bug.legs = 0
Bug.feelerLetter = "F"
Bug.pronoun = "I"
// add a method to determine if the bug is complete
Bug.complete = function
return self.tail and self.feelers >= 2 and self.legs >= 6
end function
// add a method to draw the bug using print
Bug.draw = function
if self.feelers then
for row in range(1,4)
print " "*10 + (self.feelerLetter + " ") * self.feelers
end for
end if
if self.head then
print " HHHHHHH"
print " H H"
print " H O O H"
print " H H"
print " H V H"
print " HHHHHHH"
end if
if self.neck then
print " N N"
print " N N"
end if
if self.body then
print " BBBBBBBBBBBB"
print " B B"
print " B B"
if self.tail then print "TTTTTB B"
print " BBBBBBBBBBBB"
end if
if self.legs then
for row in [1,2]
print " "*5 + "L " * self.legs
end for
end if
end function
// add a method to add a part, if possible; return true if bug changed
Bug.addPart = function(partNum)
if partNum == 1 then
print "1=Body"
if self.body then
print self.pronoun + " do not need a body."
else
print self.pronoun + " now have a body."
self.body = true
return true
end if
else if partNum == 2 then
print "2=neck"
if self.neck then
print self.pronoun + " do not need a neck."
else if not self.body then
print self.pronoun + " do not have a body."
else
print self.pronoun + " now have a neck."
self.neck = true
return true
end if
else if partNum == 3 then
print "3=head"
if self.head then
print self.pronoun + " have a head."
else if not self.neck then
print self.pronoun + " do not have a neck."
else
print self.pronoun + " needed a head."
self.head = true
return true
end if
else if partNum == 4 then
print "4=feelers"
if self.feelers >= 2 then
print self.pronoun + " have two feelers already."
else if not self.head then
print self.pronoun + " do not have a head."
else
if self.pronoun == "You" then
print "I now give you a feeler."
else
print "I get a feeler."
end if
self.feelers += 1
return true
end if
else if partNum == 5 then
print "5=tail"
if self.tail then
print self.pronoun + " already have a tail."
else if not self.body then
print self.pronoun + " do not have a body."
else
if self.pronoun == "You" then
print "I now give you a tail."
else
print "I now have a tail."
end if
self.tail = true
return true
end if
else if partNum == 6 then
print "6=legs"
if self.legs >= 6 then
print self.pronoun + " have 6 feet."
else if not self.body then
print self.pronoun + " do not have a body."
else
self.legs += 1
print self.pronoun + " now have " + self.legs + " leg" + "s"*(self.legs>1) + "."
return true
end if
end if
return 0
end function
// ...then, instantiate a bug for You (human player) and Me (computer)
you = new Bug
you.feelerLetter = "A" // (don't ask me why)
you.pronoun = "You"
me = new Bug
// Main loop
while not you.complete and not me.complete
anyChange = false
die = floor(6 * rnd + 1)
print; print "You rolled a " + die
if you.addPart(die) then anyChange = true
wait 2
die = floor(6 * rnd + 1)
print; print "I rolled a " + die
if me.addPart(die) then anyChange = true
if you.complete then print "Your bug is finished."
if me.complete then print "My bug is finished."
if anyChange then
ans = input("Do you want the pictures? ").lower
if not ans or ans[0] != "n" then
print "*****Your Bug*****"
print; print
you.draw
wait 2
print
print "*****My Bug*****"
print; print
me.draw
wait 2
end if
end if
end while
print "I hope you enjoyed the game, play it again soon!!"

View 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 bull.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 "bull"
run

View File

@@ -0,0 +1,188 @@
print " "*34 + "Bull"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
getYesNo = function(prompt)
while true
ans = input(prompt + "? ").lower
if ans and (ans[0] == "y" or ans[0] == "n") then return ans[0]
print "Incorrect answer - - please type 'yes' or 'no'."
end while
end function
if getYesNo("Do you want instructions") == "y" then
print "Hello, all you bloodlovers and aficionados."
print "Here is your big chance to kill a bull."
print
print "On each pass of the bull, you may try"
print "0 - Veronica (dangerous inside move of the cape)"
print "1 - Less dangerous outside move of the cape"
print "2 - Ordinary swirl of the cape."
print
print "Instead of the above, you may try to kill the bull"
print "on any turn: 4 (over the horns), 5 (in the chest)."
print "But if I were you,"
print "I wouldn't try it before the seventh pass."
print
print "The crowd will determine what award you deserve"
print "(posthumously if necessary)."
print "The braver you are, the better the award you receive."
print
print "The better the job the picadores and toreadores do,"
print "the better your chances are."
print; input "(Press return.)"
end if
print; print
bravery = 1
outcome = 1
qualities = [null, "superb", "good", "fair", "poor", "awful"]
// Select a bull (level 1-5, lower numbers are tougher)
bullLevel = floor(rnd*5+1)
print "You have drawn a " + qualities[bullLevel] + " bull."
if bullLevel > 4 then print "You're lucky."
if bullLevel < 2 then print "Good luck. You'll need it."
print
// Simulate one of the preliminary types of bullfighters
// (picodores or toreadores). Return their effect, 0.1 - 0.5.
simPreliminary = function(fighterType)
effect = 0.1
temp = 3 / bullLevel * rnd
if temp < 0.87 then effect = 0.2
if temp < 0.63 then effect = 0.3
if temp < 0.5 then effect = 0.4
if temp < 0.37 then effect = 0.5
t = floor(10 * effect + 0.2) // (get quality in range 1 - 5)
print "The " + fighterType + " did a " + qualities[t] + " job."
if t == 5 then
if fighterType == "picadores" then
print floor(rnd*2+1) + " of the horses of the picadores killed."
end if
print floor(rnd*2+1) + " of the " + fighterType + " killed."
else if t == 4 then
if rnd > 0.5 then
print "One of the " + fighterType + " killed."
else
print "No " + fighterType + " were killed."
end if
end if
print
return effect
end function
picaEffect = simPreliminary("picadores")
toreEffect = simPreliminary("toreadores")
getGored = function
while not done
if rnd > 0.5 then
print "You are dead."
globals.bravery = 1.5
globals.done = true
else
print "You are still alive."; print
if getYesNo("Do you run from the ring") == "y" then
print "Coward"
globals.bravery = 0
globals.done = true
else
print "You are brave. Stupid, but brave."
if rnd > 0.5 then
globals.bravery = 2
break
else
print "You are gored again!"
end if
end if
end if
end while
end function
pass = 0
courage = 1 // cumulative effect of cape choices
bravery = 1 // set mainly by outcomes after getting gored
victory = false // true if we kill the bull
done = false
while not done
pass += 1
print
print "Pass number " + pass
if pass < 3 then
print "The bull is charging at you! You are the matador--"
tryKill = (getYesNo("do you want to kill the bull") == "y")
else
tryKill = (getYesNo("Here comes the bull. Try for a kill") == "y")
end if
if tryKill then
print; print "It is the moment of truth."; print
h = input("How do you try to kill the bull? " ).val
if h != 4 and h != 5 then
print "You panicked. The bull gored you."
getGored
break
end if
k = (6-bullLevel) * 10 * rnd / ((picaEffect + toreEffect) * 5 * pass)
if h == 4 then
victory = (k <= 0.8)
else
victory = (k <= 0.2)
end if
if victory then
print "You killed the bull!"
else
print "The bull has gored you!"
getGored
end if
done = true
else
if pass < 3 then
capeMove = input("What move do you make with the cape? ").val
else
capeMove = input("Cape move? ").val
end if
while capeMove < 0 or capeMove > 2 or capeMove != floor(capeMove)
print "Don't panic, you idiot! Put down a correct number"
capeMove = input.val
end while
m = [3, 2, 0.5][capeMove]
courage += m
f = (6-bullLevel+m/10)*rnd / ((picaEffect+toreEffect+pass/10)*5)
if f >= 0.51 then
print "The bull has gored you!"
getGored
end if
end if
end while
// Final outcome
if bravery == 0 then
print "The crowd boos for ten minutes. If you ever dare to show"
print "your face in a ring again, they swear they will kill you--"
print "unless the bull does first."
else
fnd = (4.5+courage/6-(picaEffect+toreEffect)*2.5+4*bravery+2*(victory+1)-pass^2/120-bullLevel)
fnc = function; return fnd * rnd; end function
if bravery == 2 then
print "The crowd cheers wildly!"
else if victory then
print "The crowd cheers!"; print
end if
print "The crowd awards you"
if fnc < 2.4 then
print "nothing at all."
else if fnc < 4.9 then
print "one ear of the bull."
else if fnc < 7.4 then
print "Both ears of the bull!"
print "Ole!"
else
print "Ole! You are 'Muy Hombre!"" Ole! Ole!"
end if
end if
print
print "Adios"; print; print; print

View File

@@ -0,0 +1,19 @@
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
Conversion to [MiniScript](https://miniscript.org).
Ways to play:
0. Try-It! Page:
Go to https://miniscript.org/tryit/, clear the sample code from the code editor, and paste in the contents of bullseye.ms. Then click the "Run Script" button. Program output (and input) will appear in the green-on-black terminal display to the right of or below the code editor.
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 bullseye.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 "bullseye"
run

View File

@@ -0,0 +1,59 @@
print " "*32 + "Bullseye"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
print "In this game, up to 20 players throw darts at a target"
print "with 10, 20, 30, and 40 point zones. the objective is"
print "to get 200 points."; print
print "throw description probable score"
print " 1 fast overarm bullseye or complete miss"
print " 2 controlled overarm 10, 20 or 30 points"
print " 3 underarm anything";print
names = []
n = input("How many players? ").val; print
for i in range(0, n-1)
names.push input("Name of player #" + (i+1) + "? ")
end for
scores = [0] * n
round = 0
while true
round += 1; print; print "round " + round; print "---------"
for i in range(0, n-1)
while true
print; t = input(names[i] + "'s throw? ").val
if 1 <= t <= 3 then break
print "Input 1, 2, or 3!"
end while
if t == 1 then
p1=.65; p2=.55; p3=.5; p4=.5
else if t == 2 then
p1=.99; p2=.77; p3=.43; p4=.01
else
p1=.95; p2=.75; p3=.45; p4=.05
end if
u = rnd
if u>=p1 then
print "Bullseye!! 40 points!"; b=40
else if u>=p2 then
print "30-point zone!"; b=30
else if u>=p3 then
print "20-point zone"; b=20
else if u>=p4 then
print "Whew! 10 points."; b=10
else
print "Missed the target! too bad."; b=0
end if
scores[i] += b; print "Total score = " + scores[i]
end for
winners = []
for i in range(0, n-1)
if scores[i] >= 200 then winners.push i
end for
if winners then break
end while
print; print "We have a winner!!"; print
for i in winners; print names[i] + " scored " + scores[i] + " points."; end for
print; print "Thanks for the game."

View File

@@ -0,0 +1,19 @@
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
Conversion to [MiniScript](https://miniscript.org).
Ways to play:
0. Try-It! Page:
Go to https://miniscript.org/tryit/, clear the sample code from the code editor, and paste in the contents of bunny.ms. Then click the "Run Script" button. Program output (and input) will appear in the green-on-black terminal display to the right of or below the code editor.
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 bunny.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 "bunny"
run

View File

@@ -0,0 +1,43 @@
print " "*33 + "Bunny"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
data = []
data += [1,2,-1,0,2,45,50,-1,0,5,43,52,-1,0,7,41,52,-1]
data += [1,9,37,50,-1,2,11,36,50,-1,3,13,34,49,-1,4,14,32,48,-1]
data += [5,15,31,47,-1,6,16,30,45,-1,7,17,29,44,-1,8,19,28,43,-1]
data += [9,20,27,41,-1,10,21,26,40,-1,11,22,25,38,-1,12,22,24,36,-1]
data += [13,34,-1,14,33,-1,15,31,-1,17,29,-1,18,27,-1]
data += [19,26,-1,16,28,-1,13,30,-1,11,31,-1,10,32,-1]
data += [8,33,-1,7,34,-1,6,13,16,34,-1,5,12,16,35,-1]
data += [4,12,16,35,-1,3,12,15,35,-1,2,35,-1,1,35,-1]
data += [2,34,-1,3,34,-1,4,33,-1,6,33,-1,10,32,34,34,-1]
data += [14,17,19,25,28,31,35,35,-1,15,19,23,30,36,36,-1]
data += [14,18,21,21,24,30,37,37,-1,13,18,23,29,33,38,-1]
data += [12,29,31,33,-1,11,13,17,17,19,19,22,22,24,31,-1]
data += [10,11,17,18,22,22,24,24,29,29,-1]
data += [22,23,26,29,-1,27,29,-1,28,29,-1,4096]
string.pad = function(w)
return self + " " * (w - self.len)
end function
for i in range(5); print; end for
line = ""
while true
x = data.pull
if x > 128 then break
if x >= 0 then
line = line.pad(x)
y = data.pull
for i in range(x, y)
line += "BUNNY"[i % 5]
end for
else
print line
line = ""
wait 0.1 // optional delay to make printing more visible
end if
end while

View File

@@ -0,0 +1,19 @@
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
Conversion to [MiniScript](https://miniscript.org).
Ways to play:
0. Try-It! Page:
Go to https://miniscript.org/tryit/, clear the sample code from the code editor, and paste in the contents of bunny.ms. Then click the "Run Script" button. Program output (and input) will appear in the green-on-black terminal display to the right of or below the code editor.
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 bunny.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 "bunny"
run

View File

@@ -0,0 +1,38 @@
print " "*26 + "Buzzword Generator"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
print "This program prints highly acceptable phrases in"
print "'educator-speak' that you can work into reports"
print "and speeches. Whenever a question mark is printed,"
print "type a 'y' for another phrase or 'n' to quit."
words1 = ["ability","basal","behavioral","child-centered",
"differentiated","discovery","flexible","heterogeneous",
"homogeneous","manipulative","modular","tavistock",
"individualized"]
words2 = ["learning", "evaluative","objective",
"cognitive","enrichment","scheduling","humanistic",
"integrated","non-graded","training","vertical age",
"motivational","creative"]
words3 = ["grouping","modification",
"accountability","process","core curriculum","algorithm",
"performance","reinforcement","open classroom","resource",
"structure","facility","environment"]
list.any = function
return self[self.len * rnd]
end function
print; print; print "Here's the first phrase:"
while true
print [words1.any, words2.any, words3.any].join
print
yn = input("?").lower
if yn != "y" then break
end while
print "Come back when you need help with another report!"

View 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 calendar.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 "calendar"
run

View File

@@ -0,0 +1,89 @@
import "stringUtil"
print " "*32 + "Calendar"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
startingDOW = 0
leapYear = false
// Note: while the original program required changes to the code to configure
// it for the current year, in this port we choose to ask the user.
// Here's the function to do that.
getParameters = function
days = "sunday monday tuesday wednesday thursday friday saturday".split
globals.startingDOW = 999
while startingDOW == 999
ans = input("What is the first day of the week of the year? ").lower
if not ans then continue
for i in days.indexes
if days[i].startsWith(ans) then
globals.startingDOW = -i
break
end if
end for
end while
while true
ans = input("Is it a leap year? ").lower
if ans and (ans[0] == "y" or ans[0] == "n") then break
end while
globals.leapYear = (ans[0] == "y")
while true
ans = input("Pause after each month? ").lower
if ans and (ans[0] == "y" or ans[0] == "n") then break
end while
globals.pause = (ans[0] == "y")
end function
getParameters
monthNames = [
" JANUARY ",
" FEBRUARY",
" MARCH ",
" APRIL ",
" MAY ",
" JUNE ",
" JULY ",
" AUGUST ",
"SEPTEMBER",
" OCTOBER ",
" NOVEMBER",
" DECEMBER",
]
monthDays = [31, 28 + leapYear, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
// Function to print one month calendar.
// month: numeric month number, 0-based (0-11)
printMonth = function(month)
daysSoFar = monthDays[:month].sum
daysLeft = monthDays[month:].sum
print "** " + str(daysSoFar).pad(4) + "*"*18 + " " + monthNames[month] +
" " + "*"*18 + " " + str(daysLeft).pad(4) + "**"
print
print " S M T W T F S"
print
print "*" * 61
// calculate the day of the week, from 0=Sunday to 6=Saturday
dow = (daysSoFar - startingDOW) % 7
print " " * 5 + " " * (8*dow), ""
for i in range(1, monthDays[month])
print str(i).pad(8), ""
dow += 1
if dow == 7 then
dow = 0
print
if i == monthDays[month] then break
print; print " " * 5, ""
end if
end for
print
end function
// Main loop.
for month in range(0, 11)
printMonth month
print
if month < 11 and pause then input
end for

View File

@@ -19,6 +19,7 @@ http://www.vintage-basic.net/games.html
#### Porting Notes
The program makes extensive use of the assumption that a boolean expression evaluates to **-1** for true. This was the case in some classic BASIC environments but not others; and it is not the case in [JS Basic](https://troypress.com/wp-content/uploads/user/js-basic/index.html), leading to nonsensical results. In an environment that uses **1** instead of **-1** for truth, you would need to negate the boolean expression in the following lines:
- 10
- 570
- 590
- 2220

View File

@@ -2,7 +2,7 @@
BOMBARDMENT is played on two, 5x5 grids or boards with 25 outpost locations numbered 1 to 25. Both you and the computer have four platoons of troops that can be located at any four outposts on your respective grids.
At the start of the game, you locate (or hide) your four platoons on your grid. The computer does the same on its grid. You then take turns firing missiles or bombs at each others outposts trying to destroy all four platoons. The one who finds all four opponents platoons first, wins.
At the start of the game, you locate (or hide) your four platoons on your grid. The computer does the same on its grid. You then take turns firing missiles or bombs at each others outposts trying to destroy all four platoons. The one who finds all four opponents platoons first, wins.
This program was slightly modified from the original written by Martin Burdash of Parlin, New Jersey.
@@ -15,6 +15,12 @@ As published in Basic Computer Games (1978):
Downloaded from Vintage Basic at
http://www.vintage-basic.net/games.html
#### Known Bugs
- Though the instructions say you can't place two platoons on the same outpost, the code does not enforce this. So the player can "cheat" and guarantee a win by entering the same outpost number two or more times.
#### Porting Notes
- To ensure the instructions don't scroll off the top of the screen, we may want to insert a "(Press Return)" or similar prompt before printing the tear-off matrix.
(please note any difficulties or challenges in porting here)

View File

@@ -13,6 +13,10 @@ As published in Basic Computer Games (1978):
Downloaded from Vintage Basic at
http://www.vintage-basic.net/games.html
#### Known Bugs
- If you play as Japan and say it is not your first mission, it is impossible to complete your mission; the only possible outcomes are "you made it through" or "boom". Moreover, the odds of each outcome depend on a variable (R) that is only set if you played a previous mission as a different side. It's possible this is an intentional layer of complexity meant to encourage repeat play, but it's more likely just a logical error.
#### Porting Notes
(please note any difficulties or challenges in porting here)

View File

@@ -17,6 +17,14 @@ As published in Basic Computer Games (1978):
Downloaded from Vintage Basic at
http://www.vintage-basic.net/games.html
#### Known Bugs
- In the original code, scores is not kept accurately in multiplayer games. It stores scores in F*P, where F is the frame and P is the player. So, for example, frame 8 player 1 (index 16) clobbers the score from frame 4 player 2 (also index 16).
- Even when scores are kept accurately, they don't match normal bowling rules. In this game, the score for each ball is just the total number of pins down after that ball, and the third row of scores is a status indicator (3 for strike, 2 for spare, 1 for anything else).
- The program crashes with a "NEXT without FOR" error if you elect to play again after the first game.
#### Porting Notes
(please note any difficulties or challenges in porting here)
- The funny control characters in the "STRIKE!" string literal are there to make the terminal beep.

View File

@@ -2,7 +2,7 @@
This program simulates a three-round Olympic boxing match. The computer coaches one of the boxers and determines his punches and defences, while you do the same for your boxer. At the start of the match, you may specify your mans best punch and his vulnerability.
There are approximately seven major punches per round, although this may be varied. The best out if three rounds wins.
There are approximately seven major punches per round, although this may be varied. The best out of three rounds wins.
Jesse Lynch of St. Paul, Minnesota created this program.
@@ -15,6 +15,14 @@ As published in Basic Computer Games (1978):
Downloaded from Vintage Basic at
http://www.vintage-basic.net/games.html
#### Known Bugs
- The code that handles player punch type 1 checks for opponent weakness type 4; this is almost certainly a mistake.
- Line breaks or finishing messages are omitted in various cases. For example, if the player does a hook, and that's the opponent's weakness, then 7 points are silently awarded without outputting any description or line break, and the next sub-round will begin on the same line.
- When the opponent selects a hook, control flow falls through to the uppercut case. Perhaps related, a player weakness of type 2 (hook) never has any effect on the game.
#### Porting Notes
(please note any difficulties or challenges in porting here)

View File

@@ -26,6 +26,6 @@ http://www.vintage-basic.net/games.html
#### Porting Notes
(please note any difficulties or challenges in porting here)
- There is a fundamental assumption in the pre-fight subroutine at line 1610, that the Picadores and Toreadores are more likely to do a bad job (and possibly get killed) with a low-quality bull. This appears to be a mistake in the original code, but should be retained.
- There is a fundamental assumption in the pre-fight subroutine at line 1610, that the Picadores and Toreadores are more likely to do a bad job (and possibly get killed) with a low-quality bull. This appears to be a mistake in the original code, but should be retained.
- Lines 1800-1820 (part of the pre-fight subroutine) can never be reached.

View File

@@ -24,4 +24,6 @@ http://www.vintage-basic.net/games.html
#### Porting Notes
(please note any difficulties or challenges in porting here)
- While many modern environments have time/date functions that would make this program both easier and more automatic, in these ports we are choosing to do without them, as in the original program.
- Some ports choose to ask the user the starting day of week, and whether it's a leap year, rather than force changes to the code to fit the desired year.