Added MiniScript versions of 35_Even_Wins.

This commit is contained in:
JoeStrout
2023-08-02 12:29:53 -07:00
parent 2c2b1996ed
commit 42c780dbb2
3 changed files with 258 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
Conversion to [MiniScript](https://miniscript.org).
Note that this folder (like the original BASIC programs) contains TWO different programs based on the same idea. evenwins.ms plays deterministically; gameofevenwins.ms learns from its failures over multiple games.
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 evenwins.ms
or
miniscript gameofevenwins.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 "evenwins"
run
or
load "gameofevenwins"
run

View File

@@ -0,0 +1,140 @@
print " "*31 + "Digits"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print
y1 = 0
m1 = 0
print " This is a two person game called 'Even Wins.'"
print "To play the game, the players need 27 marbles or"
print "other objects on a table."
print
print
print " The 2 players alternate turns, with each player"
print "removing from 1 to 4 marbles on each move. The game"
print "ends when there are no marbles left, and the winner"
print "is the one with an even number of marbles."
print
print
print " The only rules are that (1) you must alternate turns,"
print "(2) you must take between 1 and 4 marbles each turn,"
print "and (3) you cannot skip a turn."
print
print
print
while true
print " Type a '1' if you want to go first, and type"
print "a '0' if you want me to go first."
c = input.val
print
if c != 0 then
t = 27
print
print
print
print "Total=" + t
print
print
print "What is your first move?"
m = 0
else
t = 27
m = 2
print
print "Total= " + t
print
m1 += m
t -= m
end if
while true
if m then
print "I pick up " + m + " marbles."
if t == 0 then break
print
print "Total=" + t
print
print " And what is your next move, my total is " + m1
end if
while true
y = input.val
print
if y < 1 or y > 4 then
print
print "The number of marbles you must take be a positive"
print "integer between 1 and 4."
print
print " What is your next move?"
print
else if y > t then
print " You have tried to take more marbles than there are"
print "left. Try again."
else
break
end if
end while
y1 += y
t -= y
if t == 0 then break
print "Total=" + t
print
print "Your total is " + y1
if t < 0.5 then break
r = t % 6
if y1 % 2 != 0 then
if t >= 4.2 then
if r <= 3.4 then
m = r + 1
m1 += m
t -= m
else if r < 4.7 or r > 3.5 then
m = 4
m1 += m
t -= m
else
m = 1
m1 += m
t -= m
end if
else
m = t
t -= m
print "I pick up " + m + " marbles."
print
print "Total = 0"
m1 += m
break
end if
else
if r < 1.5 or r > 5.3 then
m = 1
m1 += m
t -= m
else
m = r - 1
m1 += m
t -= m
if t < 0.2 then
print "I pick up " + m + " marbles."
print
break
end if
end if
end if
end while
print "That is all of the marbles."
print
print " My total is " + m1 + ", your total is " + y1
print
if m1 % 2 then
print " You won. Do you want to play"
else
print " I won. Do you want to play"
end if
print "again? Type 1 for yes and 0 for no."
a1 = input.val
if a1 == 0 then break
m1 = 0
y1 = 0
end while
print
print "OK. See you later"

View File

@@ -0,0 +1,90 @@
print " "*28 + "Game Of Even Wins"
print " "*15 + "Creative Computing Morristown, New Jersey"
print
print
yesNo = input("Do you want instructions (yes or no)? ").lower
if not yesNo or yesNo[0] != "n" then
print "The game is played as follows:"
print
print "At the beginning of the game, a random number of chips are"
print "placed on the board. The number of chips always starts"
print "as an odd number. On each turn, a player must take one,"
print "two, three, or four chips. The winner is the player who"
print "finishes with a total number of chips that is even."
print "The computer starts out knowing only the rules of the"
print "game. It gradually learns to play well. It should be"
print "difficult to beat the computer after twenty games in a row."
print "Try it!!!!"
print
print "To quit at any time, type a '0' as your move."
print
end if
l = 0
b = 0
r = [[4]*6, [4]*6]
while true
a = 0
b = 0
e = 0
l = 0
p = floor((13 * rnd + 9) / 2) * 2 + 1;
while true
if p == 1 then
print "There is 1 chip on the board."
else
print "There are " + p + " chips on the board."
end if
e1 = e
l1 = l
e = a % 2
l = p % 6
if r[e][l] < p then
m = r[e][l]
if m <= 0 then
m = 1
b = 1
break
end if
p -= m
if m == 1 then
prompt = "Computer takes 1 chip leaving " + p + "... Your move? "
else
prompt = "Computer takes " + m + " chips leaving " + p + "... Your move? "
end if
b += m
while true
m = input(prompt).val
if m == 0 then break
if 1 <= m <= p and m <= 4 then break
prompt = m + " is an illegal move ... Your move? "
end while
if m == 0 then break
if m == p then break // <-- Really? Before we've done the math?
p -= m
a += m
else
if p == 1 then
print "Computer takes 1 chip."
else
print "Computer takes " + p + " chips."
end if
r[e][l] = p
b += p
break
end if
end while
if m == 0 then break
if b % 2 != 0 then
print "Game over ... you win!!!"
if r[e][l] != 1 then
r[e][l] -= 1
else if (r[e1][l1] != 1) then
r[e1][l1] -= 1
end if
else
print "Game over ... I win!!!"
end if
print
end while