add go for Acey Ducey

This commit is contained in:
Troy Campbell
2022-10-12 08:48:08 +10:00
parent c7ed271201
commit dc18b29aef

View File

@@ -0,0 +1,112 @@
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"sort"
"strconv"
"strings"
"time"
)
var welcome = `
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
`
func main() {
rand.Seed(time.Now().UnixNano())
scanner := bufio.NewScanner(os.Stdin)
fmt.Println(welcome)
for {
play(100)
fmt.Println("TRY AGAIN (YES OR NO)")
scanner.Scan()
response := scanner.Text()
if strings.ToUpper(response) != "YES" {
break
}
}
fmt.Println("O.K., HOPE YOU HAD FUN!")
}
func play(money int) {
scanner := bufio.NewScanner(os.Stdin)
var bet int
for {
// Shuffle the cards
cards := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
rand.Shuffle(len(cards), func(i, j int) { cards[i], cards[j] = cards[j], cards[i] })
// Take the first two for the dealer and sort
dealerCards := cards[0:2]
sort.Ints(dealerCards)
fmt.Printf("YOU NOW HAVE %d DOLLARS.\n\n", money)
fmt.Printf("HERE ARE YOUR NEXT TWO CARDS:\n%s\n%s", getCardName(dealerCards[0]), getCardName(dealerCards[1]))
fmt.Printf("\n\n")
//Check if Bet is Valid
for {
fmt.Println("WHAT IS YOUR BET:")
scanner.Scan()
b, err := strconv.Atoi(scanner.Text())
if err != nil {
fmt.Println("PLEASE ENTER A POSITIVE NUMBER")
continue
}
bet = b
if bet == 0 {
fmt.Printf("CHICKEN!\n\n")
goto there
}
if (bet > 0) && (bet <= money) {
break
}
}
// Draw Players Card
fmt.Printf("YOUR CARD: %s\n", getCardName(cards[2]))
if (cards[2] > dealerCards[0]) && (cards[2] < dealerCards[1]) {
fmt.Println("YOU WIN!!!")
money = money + bet
} else {
fmt.Println("SORRY, YOU LOSE")
money = money - bet
}
fmt.Println()
if money <= 0 {
fmt.Printf("%s\n", "SORRY, FRIEND, BUT YOU BLEW YOUR WAD.")
return
}
there:
}
}
func getCardName(c int) string {
switch c {
case 11:
return "JACK"
case 12:
return "QUEEN"
case 13:
return "KING"
case 14:
return "ACE"
default:
return strconv.Itoa(c)
}
}