Nim code more idiomatic; fix errors

This commit is contained in:
Michael Adams
2023-08-04 16:58:25 -07:00
parent 2edcce2288
commit 168e072615
3 changed files with 87 additions and 90 deletions

View File

@@ -5,65 +5,65 @@ var
retry: bool = true
proc printGreeting() =
echo(spaces(26),"ACEY DUCEY CARD GAME")
echo(spaces(15),"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
echo("\n")
echo("ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER ")
echo("THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP")
echo("YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING")
echo("ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE")
echo("A VALUE BETWEEN THE FIRST TWO.")
echo("IF YOU DO NOT WANT TO BET, INPUT A 0")
echo("")
echo spaces(26),"ACEY DUCEY CARD GAME"
echo spaces(15),"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
echo """
ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER
THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP
YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING
ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE
A VALUE BETWEEN THE FIRST TWO.
IF YOU DO NOT WANT TO BET, INPUT A 0
"""
proc printBalance() =
echo("YOU NOW HAVE ", stash," DOLLARS.")
echo("")
echo "YOU NOW HAVE ", stash," DOLLARS."
echo ""
proc printCard(aCard: int) =
case aCard:
of 11: echo("=== JACK ===")
of 12: echo("=== QUEEN ===")
of 13: echo("=== KING ===")
of 14: echo("=== ACE ===")
else: echo("=== ", aCard, " ===")
of 11: echo "=== JACK ==="
of 12: echo "=== QUEEN ==="
of 13: echo "=== KING ==="
of 14: echo "=== ACE ==="
else: echo "=== ", aCard, " ==="
proc drawDealerCards() =
echo("HERE ARE YOUR NEXT TWO CARDS: ")
echo "HERE ARE YOUR NEXT TWO CARDS: "
cardA = rand(2..14)
cardB = cardA # Copy cardA, so we can test cardB to be different
while cardB == cardA:
cardB = rand(2..14)
if cardA > cardB: # Make sure cardA is the smaller card
swap(cardA, cardB)
echo("")
printCard(cardA)
echo("")
printCard(cardB)
echo("")
swap cardA, cardB
echo ""
printCard cardA
echo ""
printCard cardB
echo ""
proc drawPlayerCard() =
cardC = rand(2..14)
printCard(cardC)
echo("")
cardC = rand 2..14
printCard cardC
echo ""
proc getBet(): int =
result = stash + 1 #ensure we enter the loop
while (result < 0) or (result > stash):
echo("WHAT IS YOUR BET: ")
echo "WHAT IS YOUR BET: "
result = readLine(stdin).parseInt()
if result > stash:
echo("SORRY, MY FRIEND, BUT YOU BET TOO MUCH.")
echo("YOU HAVE ONLY ", stash," DOLLARS TO BET.")
if bet == 0:
echo("CHICKEN!!")
echo "SORRY, MY FRIEND, BUT YOU BET TOO MUCH."
echo "YOU HAVE ONLY ", stash, " DOLLARS TO BET."
if result == 0:
echo "CHICKEN!!"
proc tryAgain(): bool =
echo("TRY AGAIN (YES OR NO)")
echo "TRY AGAIN (YES OR NO)"
var answer = readLine(stdin).normalize()
case answer:
of "yes", "y": result = true
else: result = false
result = (answer == "y") or (answer == "yes")
printGreeting()
while retry:
@@ -72,15 +72,15 @@ while retry:
printBalance()
drawDealerCards()
bet = getBet()
echo("")
echo ""
drawPlayerCard()
if (cardC >= cardA) and (cardC <= cardB):
echo("YOU WIN!!!")
echo "YOU WIN!!!"
stash += bet
else:
echo("SORRY, YOU LOSE")
echo "SORRY, YOU LOSE"
stash -= bet
echo("SORRY, FRIEND, BUT YOU BLEW YOUR WAD.");
echo("")
echo "SORRY, FRIEND, BUT YOU BLEW YOUR WAD."
echo ""
retry = tryAgain()
echo("O.K., HOPE YOU HAD FUN!");
echo "O.K., HOPE YOU HAD FUN!"

View File

@@ -24,19 +24,19 @@ proc playGame() =
# We want 3 unique random numbers: loop until we get them!
while unique == false:
unique = genSeed()
echo("O.K. I HAVE A NUMBER IN MIND.")
echo "O.K. I HAVE A NUMBER IN MIND."
for i in 1..20:
var c, d: int = 0
echo("GUESS #", i)
echo "GUESS #", i
prompt = readLine(stdin).normalize()
if (prompt.len() != 3):
echo("TRY GUESSING A THREE-DIGIT NUMBER.")
echo "TRY GUESSING A THREE-DIGIT NUMBER."
continue
for z in 1..3:
b[z] = prompt.substr(z-1, z-1).parseInt() # Convert string digits to array ints
if (b[1] == b[2]) or (b[2] == b[3]) or (b[3] == b[1]):
echo("OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND")
echo("HAS NO TWO DIGITS THE SAME.")
echo "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND"
echo "HAS NO TWO DIGITS THE SAME."
# Figure out the PICOs
if (a[1] == b[2]): c += 1
if (a[1] == b[3]): c += 1
@@ -51,45 +51,45 @@ proc playGame() =
if (d != 3):
if (c != 0):
for j in 1..c:
echo("PICO")
echo "PICO"
if (d != 0):
for j in 1..d:
echo("FERMI")
echo "FERMI"
if (c == 0) and (d == 0):
echo("BAGELS")
echo "BAGELS"
# If we have 3 FERMIs, we win!
else:
echo("YOU GOT IT!!!")
echo("")
echo "YOU GOT IT!!!"
echo ""
wincount += 1
youwin = true
break
# Only invoke if we've tried 20 guesses without winning
if (youwin == false):
echo("OH WELL.")
echo("THAT'S TWENTY GUESSES. MY NUMBER WAS ", a[1], a[2], a[3])
if not youwin:
echo "OH WELL."
echo "THAT'S TWENTY GUESSES. MY NUMBER WAS ", a[1], a[2], a[3]
# main program
echo(spaces(33), "BAGELS")
echo(spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
echo("\n\n")
echo("WOULD YOU LIKE THE RULES (YES OR NO)")
echo spaces(33), "BAGELS"
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
echo "\n\n"
echo "WOULD YOU LIKE THE RULES (YES OR NO)"
prompt = readLine(stdin).normalize()
if (prompt.substr(0, 0) == "y"):
echo("I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS")
echo("MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:")
echo(" PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION")
echo(" FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION")
echo(" BAGELS - NO DIGITS CORRECT")
echo("")
if prompt.substr(0, 0) == "y":
echo "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS"
echo "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:"
echo " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION"
echo " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION"
echo " BAGELS - NO DIGITS CORRECT"
echo ""
while(stillplaying == true):
playGame()
echo("PLAY AGAIN (YES OR NO)")
echo "PLAY AGAIN (YES OR NO)"
prompt = readLine(stdin).normalize()
if (prompt.substr(0, 0) != "y"):
if prompt.substr(0, 0) != "y":
stillplaying = false
if wincount > 0:
echo("")
echo("A ", wincount, " POINT BAGELS BUFF!!")
echo("")
echo("HOPE YOU HAD FUN. BYE.")
echo ""
echo "A ", wincount, " POINT BAGELS BUFF!!"
echo ""
echo "HOPE YOU HAD FUN. BYE."

View File

@@ -6,17 +6,17 @@ var
z: string
retry: bool = true
echo(spaces(34), "DICE")
echo(spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
echo("\n")
echo("THIS PROGRAM SIMULATES THE ROLLING OF A PAIR OF DICE.")
echo("YOU ENTER THE NUMBER OF TIMES YOU WANT THE COMPUTER TO")
echo("'ROLL' THE DICE. WATCH OUT, VERY LARGE NUMBERS TAKE")
echo("A LONG TIME. IN PARTICULAR, NUMBERS OVER 5000.")
echo spaces(34), "DICE"
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
echo "\n"
echo "THIS PROGRAM SIMULATES THE ROLLING OF A PAIR OF DICE."
echo "YOU ENTER THE NUMBER OF TIMES YOU WANT THE COMPUTER TO"
echo "'ROLL' THE DICE. WATCH OUT, VERY LARGE NUMBERS TAKE"
echo "A LONG TIME. IN PARTICULAR, NUMBERS OVER 5000."
while(retry):
echo("\n")
echo("HOW MANY ROLLS")
echo "\n"
echo "HOW MANY ROLLS"
x = readLine(stdin).parseInt()
for v in 2..12:
f[v] = 0 # Initialize array to 0
@@ -25,14 +25,11 @@ while(retry):
b = rand(1..6) # Die 2
r = a + b # Sum of dice
f[r] += 1 # Increment array count of dice sum result
echo()
echo("TOTAL SPOTS: ", "NUMBER OF TIMES")
echo ""
echo "TOTAL SPOTS: ", "NUMBER OF TIMES"
for v in 2..12:
echo(v, ": ", f[v]) # Print out counts for each possible result
echo("\n")
echo("TRY AGAIN?")
echo v, ": ", f[v] # Print out counts for each possible result
echo "\n"
echo "TRY AGAIN?"
z = readLine(stdin).normalize()
if (z=="yes") or (z=="y"):
retry = true
else:
retry = false
retry = (z=="yes") or (z=="y")