mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 23:26:40 -08:00
Merge pull request #878 from unquietwiki/main
Two more Nim ports + minor cleanup
This commit is contained in:
@@ -4,66 +4,68 @@ var
|
||||
bet, cardA, cardB, cardC, stash: int
|
||||
retry: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
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 +74,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!"
|
||||
|
||||
@@ -10,6 +10,8 @@ var
|
||||
prompt: string
|
||||
stillplaying: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
# Seed 3 unique random numbers; indicate if they're all unique
|
||||
proc genSeed(): bool =
|
||||
for i in 1..3:
|
||||
@@ -24,19 +26,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 +53,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."
|
||||
|
||||
68
00_Alternate_Languages/29_Craps/nim/craps.nim
Normal file
68
00_Alternate_Languages/29_Craps/nim/craps.nim
Normal file
@@ -0,0 +1,68 @@
|
||||
import std/[random,strutils]
|
||||
|
||||
var
|
||||
wager, winnings, rollResult: int
|
||||
stillplaying: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
proc tryAgain(): bool =
|
||||
echo "WANT TO PLAY AGAIN? (YES OR NO)"
|
||||
var answer = readLine(stdin).normalize()
|
||||
result = (answer == "y") or (answer == "yes")
|
||||
|
||||
proc takePoint(point: int) =
|
||||
var flag = true
|
||||
while flag:
|
||||
var pointRoll: int = (rand 1..6) + (rand 1..6) # roll dice, then add the sum
|
||||
if pointRoll == 7:
|
||||
echo pointRoll, "- CRAPS. YOU LOSE."
|
||||
echo "YOU LOSE ", wager, " DOLLARS."
|
||||
winnings -= wager
|
||||
flag = false
|
||||
if pointRoll == point:
|
||||
echo point, "- A WINNER.........CONGRATS!!!!!!!!"
|
||||
echo "AT 2 TO 1 ODDS PAYS YOU...LET ME SEE... ", 2*wager, " DOLLARS"
|
||||
winnings += (2*wager)
|
||||
flag = false
|
||||
if flag:
|
||||
echo pointRoll, " - NO POINT. I WILL ROLL AGAIN"
|
||||
|
||||
echo spaces(33), "CRAPS"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "2,3,12 ARE LOSERS; 4,5,6,8,9,10 ARE POINTS; 7,11 ARE NATURAL WINNERS."
|
||||
winnings = 0
|
||||
|
||||
# play the game
|
||||
while stillplaying:
|
||||
echo ""
|
||||
echo "INPUT THE AMOUNT OF YOUR WAGER."
|
||||
wager = readline(stdin).parseInt()
|
||||
echo "I WILL NOW THROW THE DICE"
|
||||
rollResult = (rand 1..6) + (rand 1..6) # roll dice, then add the sum
|
||||
case rollResult:
|
||||
of 7, 11:
|
||||
echo rollResult, "- NATURAL....A WINNER!!!!"
|
||||
echo rollResult, " PAYS EVEN MONEY, YOU WIN ", wager, " DOLLARS"
|
||||
winnings += wager
|
||||
of 2:
|
||||
echo rollResult, "- SNAKE EYES....YOU LOSE."
|
||||
echo "YOU LOSE ", wager, " DOLLARS."
|
||||
winnings -= wager
|
||||
of 3, 12:
|
||||
echo rollResult, "- CRAPS...YOU LOSE."
|
||||
echo "YOU LOSE ", wager, " DOLLARS."
|
||||
winnings -= wager
|
||||
else:
|
||||
echo rollResult, " IS THE POINT. I WILL ROLL AGAIN"
|
||||
takePoint(rollResult)
|
||||
if winnings < 0: echo "YOU ARE NOW UNDER $", winnings
|
||||
if winnings > 0: echo "YOU ARE NOW AHEAD $", winnings
|
||||
if winnings == 0: echo "YOU ARE NOW EVEN AT 0"
|
||||
stillplaying = tryAgain()
|
||||
|
||||
# done playing
|
||||
if winnings < 0: echo "TOO BAD, YOU ARE IN THE HOLE. COME AGAIN."
|
||||
if winnings > 0: echo "CONGRATULATIONS---YOU CAME OUT A WINNER. COME AGAIN!"
|
||||
if winnings == 0: echo "CONGRATULATIONS---YOU CAME OUT EVEN, NOT BAD FOR AN AMATEUR"
|
||||
@@ -6,17 +6,19 @@ 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.")
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
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 +27,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")
|
||||
|
||||
38
00_Alternate_Languages/91_Train/nim/train.nim
Normal file
38
00_Alternate_Languages/91_Train/nim/train.nim
Normal file
@@ -0,0 +1,38 @@
|
||||
import std/[random,strutils]
|
||||
|
||||
var
|
||||
carSpeed, diff, err, guess, trainSpeed, carTime: int
|
||||
stillplaying: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
# Return a tuple that'll be carSpeed, diff, trainSpeed
|
||||
proc randomNumbers(): (int,int,int) =
|
||||
result = (rand(41..65), rand(6..20), rand(21..39))
|
||||
|
||||
# Do we want to play again?
|
||||
proc tryAgain(): bool =
|
||||
echo "ANOTHER PROBLEM (YES OR NO)"
|
||||
var answer = readLine(stdin).normalize()
|
||||
result = (answer == "y") or (answer == "yes")
|
||||
|
||||
echo spaces(33), "TRAIN"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "TIME - SPEED DISTANCE EXERCISE"
|
||||
|
||||
while stillplaying:
|
||||
echo ""
|
||||
(carSpeed, diff, trainSpeed) = randomNumbers() # Get random numbers for prompt
|
||||
echo "A CAR TRAVELING ", carSpeed, " MPH CAN MAKE A CERTAIN TRIP IN"
|
||||
echo diff, " HOURS LESS THAN A TRAIN TRAVELING AT ", trainSpeed, " MPH."
|
||||
echo "HOW LONG DOES THE TRIP TAKE BY CAR?"
|
||||
guess = readLine(stdin).parseInt() # Get guess
|
||||
carTime = (diff * trainSpeed / (carSpeed - trainSpeed)).toInt() # Calculate answer
|
||||
err = (((carTime - guess) * 100) / guess).toInt().abs() # Calculate error to an absolute value
|
||||
if err > 5: # Error within 5%?
|
||||
echo "SORRY. YOU WERE OFF BY ", err, " PERCENT."
|
||||
else:
|
||||
echo "GOOD! ANSWER WITHIN ", err, " PERCENT."
|
||||
echo "CORRECT ANSWER IS ", carTime, " HOURS."
|
||||
stillplaying = tryAgain()
|
||||
Reference in New Issue
Block a user