Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Last batch of MiniScript ports! #903

Merged
merged 7 commits into from
Oct 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions 00_Alternate_Languages/80_Slots/MiniScript/README.md
Original file line number Diff line number Diff line change
@@ -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 slots.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 MiniScript program and this README file. Then, at the Mini Micro command prompt, enter:

load "slots"
run
125 changes: 125 additions & 0 deletions 00_Alternate_Languages/80_Slots/MiniScript/slots.ms
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
center = function(s,n)
h = floor((n - s.len)/2)
s = " " * h + s + " " * n
return s[:n]
end function

Machine = {"symbols": ["Bar", "Bell", "Orange", "Lemon", "Plum ", "Cherry"]}
Machine.money = 0
Machine.bet = 0
Machine.playing = true
Machine.reels = [0,0,0]
Machine.results = null

Machine.reelsSpin = function(n, msg, row)
env = [1,.95,.9,.85,.25,.2,.15,.1,.05,0]
bell = new Sound
bell.init .1, 800, env, Sound.sineWave
for i in range(1,2)
s1 = new Sound
s1.init .2, i * 800 + 800, env, Sound.sineWave
bell.mix(s1, 1 / (2 ^ i))
end for
for i in range(1,n)
bell.play
ix = 0
while bell.isPlaying
text.row = row
ix = (ix + 1) % self.symbols.len
print msg + center(self.symbols[ix],8)
end while
end for
end function

Machine.makeBet = function()
while true
bet = floor(input("Your bet? ").val)
if bet > 100 then
print "House limits are $100"
else if bet < 1 then
print "Minimum bet is $1"
else
break
end if
end while
Machine.bet = bet
end function

Machine.pullHandle = function
if text.row < 3 then
print; print
text.row = text.row + 2
end if
row = text.row
msg = ""
for i in range(0,2)
self.reelsSpin(5 + 5 * (i==0), msg, row)
wait .1
symIx = floor(rnd * self.symbols.len)
msg += center(self.symbols[symIx],9)
self.reels[i] = symIx
text.row = row
print msg
end for
end function

Machine.winnings = function
bet = Machine.bet
barIdx = self.symbols.indexOf("Bar")
numBars = 0
multiples = 0
for i in range(0,2)
numBars += (self.reels[i] == barIdx)
multiples += (self.reels[i] == self.reels[(i + 1) % 3])
end for

if numBars == 3 then return {"won": bet * 101, "msg": "***Jackpot***"}
if numBars == 2 then return {"won": bet * 6, "msg": "*Double Bar*"}
if multiples == 3 then return {"won": bet * 11, "msg": "**Top Dollar**"}
if multiples == 1 then return {"won": bet * 3, "msg": "Double!!"}
return {"won": -bet, "msg": "You lost."}
end function

Machine.results = function
result = Machine.winnings
self.money += result.won
print result.msg
if result.won > 0 then
print "You Won!!"
end if
print "Your standings are $" + self.money
return
end function

Machine.playAgain = function
ans = input("Again? ") + " "
self.playing = (ans[0].lower == "y")
if self.playing then return
print
if self.money < 0 then
print "Pay up! Please leave your money on the terminal."
else if self.money == 0 then
print "Hey, you broke even."
else
print "Collect your winnings from the H&M cashier."
end if
end function

clear
print " " * 30 + "Slots"
print " " * 15 + "Creative Computing Morristown, New Jersey"
print;print;print
print "You are in the H&M Casino, in front of one of our"
print "one-arm bandits. Bet from $1 to $100."
print "to pull the arm, punch the return key after making your bet."

print
while Machine.playing
Machine.makeBet
print
Machine.pullHandle
print
Machine.results
Machine.playAgain
print
end while
16 changes: 16 additions & 0 deletions 00_Alternate_Languages/81_Splat/MiniScript/README.md
Original file line number Diff line number Diff line change
@@ -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 splat.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 MiniScript program and this README file. Then, at the Mini Micro command prompt, enter:

load "splat"
run
133 changes: 133 additions & 0 deletions 00_Alternate_Languages/81_Splat/MiniScript/splat.ms
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
within5pct = function(n)
return n * (1 + rnd / 20 - rnd / 20)
end function

splatMsg = ["Requiescat in pace.", "May the Angel of Heaven lead you into Paradise.",
"Rest in piece.", "Son-Of-A-Gun.", "#$%&&%!$",
"A kick in the pants is a boost if you're headed right.",
"Hmm. Should have picked a shorter time.", "Mutter. Mutter. Mutter.",
"Pushing up daisies.", "Easy come, easy go."]

history = []
clear
print " " * 33 + "Splat"
print " " * 15 + "Creative Computing Morristown, New Jersey"
print;print;print
print "Welcome to 'Splat' -- the game that simulates a parachute"
print "jump. Try to open your chute at the last possible"
print "moment without going splat."
ans = "y"
while ans == "y"
print;print

distance = floor(9001 * rnd) + 1000

ans = input("Select your own terminal velocity (Yes or No)? ") + " "
if ans[0].lower == "y" then
terminalVel = input("What terminal velocity (mi/hr)? ").val
else
terminalVel = floor(1000 * rnd)
print "Ok. Terminal velocity = " + terminalVel + "mi/hr"
end if

terminalVel = terminalVel * 5280/3600
velocity = within5pct(terminalVel)

ans = input("Want to select acceleration due to gravity (Yes or No)? ") + " "
if ans[0].lower == "y" then
acceleration = input("What acceleration (ft/sec/sec)? ").val
acceleration = within5pct(acceleration)
else
bodies = ["Mercury", "Venus", "Earth", "the moon", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "the Sun"]
gravity = [12.2, 28.3,32.16,5.15,12.5,85.2,37.6,33.8,39.6,896]

initialStmt = ["Fine. You're on ", "All right. You're on ", "Then you're on "]

i = floor(rnd * 10)
acceleration = gravity[i]
stmt = initialStmt[i%3] + bodies[i] + ". Acceleration=" + acceleration + " ft/sec/sec."
print stmt
end if

actAccel = within5pct(acceleration)
print
print " Altitude = " + distance + " ft"
print " Term. Velocity = " + terminalVel + " ft/sec +/-5%"
print " Acceleration = " + acceleration + " ft/sec/sec +/-5%"
print "Set the timer for your freefall."
sec = input("How many seconds? ").val

print "Here we go."; print

print "Time (sec)" + char(9) + "Dist to Fall (ft)"
print "==========" + char(9) + "================="
termVelHit = false
for i in range(0, sec, sec/8)
sec = velocity/actAccel
if i <= sec and termVelHit == false then
dist = distance - ((actAccel/2)*i^2)
else if termVelHit == false then
termVelHit = true
print "Terminal velocity reached a T plus " + velocity/actAccel + " seconds."
end if
if termVelHit then
dist = distance - ((velocity^2/(2*actAccel))+(velocity*(i-sec)))
end if

if dist <= 0 then break
print (" " + i + " " * 9)[:9] + char(9) + " " + dist
end for

if dist > 0 then
print "Chute open"
history.push(dist)
numJumps = history.len
numLowerJumps = 0
for d in history
numLowerJumps += (dist <= d)
end for

jumpDiff = numJumps - numLowerJumps
if numJumps < 4 then
ordinal = ["1st", "2nd", "3rd"]
print "Amazing!! Not bad for your " + ordinal[numJumps-1] + " successful jump!!!"
else if jumpDiff <= numJumps * 0.10 then
print "Wow! That's some jumping. Of the " + numJumps + " successful jumps"
print "before yours, only " + jumpDiff + " opened their chutes lower than"
print "you did."
else if jumpDiff <= numJumps * 0.25 then
print "Pretty good! " + numJumps + " successful jumps preceded yours and only"
print jumpDiff + " of them got lower than you did before their chute"
print "opened."
else if jumpDiff <= numJumps * 0.50 then
print "Not bad. There have been " + numJumps + " successful jumps before yours."
print "You were beaten out by " + jumpDiff + " of them."
else if jumpDiff <= numJumps * 0.75 then
print "Conservative, aren't you? You ranked only " + jumpDiff + " in the"
print numJumps + " successful jumps before yours."
else if jumpDiff <= numJumps * 0.90 then
print "Humph! Don't you have any sporting blood? There were"
print numJumps + " successful jumps before yours and you came in " + numLowerJumps + " jumps"
print "better than the worst. Shape up!!!"
else
print "Hey! You pulled the rip code much too soon. " + numJumps + " successful"
print "jumps before yours and you came in number " + jumpDiff + "! Get with it."
end if
else if dist <= 0 and not termVelHit then
print (2 * distance / actAccel) ^ .5 + " " * 5 + "Splat"
else if dist <= 0 and termVelHit then
print velocity/actAccel + ((distance - (velocity^2/(2*actAccel)))/velocity) + " " *5 + "Splat"
end if

if dist <=0 then
splatMsg.shuffle
print splatMsg[0]
print "I'll give you another chance."
end if

ans = input("Do you want to play again? ") + " "
ans = ans[0].lower
end while

print "S" * 10
print
Loading
Loading