mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-09 11:46:24 -08:00
add go for Acey Ducey
This commit is contained in:
112
00_Alternate_Languages/01_Acey_Ducey/go/main.go
Normal file
112
00_Alternate_Languages/01_Acey_Ducey/go/main.go
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user