100 lines
2.4 KiB
Go
100 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"math/rand"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
var scanner = bufio.NewScanner(os.Stdin)
|
|
|
|
var (
|
|
total = 0
|
|
quit = false
|
|
)
|
|
|
|
func itob(i int) bool {
|
|
if i == 0 {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func getChoice() {
|
|
for {
|
|
fmt.Print("Your choice 1 to 3 : ")
|
|
scanner.Scan()
|
|
if scerr := scanner.Err(); scerr != nil {
|
|
log.Fatalln(scerr, "when choosing number")
|
|
}
|
|
text := scanner.Text()
|
|
if text == "q" || text == "Q" {
|
|
quit = true
|
|
return
|
|
}
|
|
input, err := strconv.Atoi(text)
|
|
if err != nil {
|
|
fmt.Println("Invalid number, try again")
|
|
continue
|
|
}
|
|
newTotal := total + input
|
|
switch {
|
|
case input < 1 || input > 3:
|
|
fmt.Println("Out of range, try again")
|
|
case newTotal > 21:
|
|
fmt.Println("Too big, try again")
|
|
default:
|
|
total = newTotal
|
|
fmt.Println("Running total is now", total)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
computer := itob(rand.Intn(2))
|
|
fmt.Println("Enter q to quit at any time\n")
|
|
if computer {
|
|
fmt.Println("The computer will choose first")
|
|
} else {
|
|
fmt.Println("You will choose first")
|
|
}
|
|
fmt.Println("\nRunning total is now 0\n")
|
|
var choice int
|
|
for round := 1; ; round++ {
|
|
fmt.Printf("ROUND %d:\n\n", round)
|
|
for i := 0; i < 2; i++ {
|
|
if computer {
|
|
if total < 18 {
|
|
choice = 1 + rand.Intn(3)
|
|
} else {
|
|
choice = 21 - total
|
|
}
|
|
total += choice
|
|
fmt.Println("The computer chooses", choice)
|
|
fmt.Println("Running total is now", total)
|
|
if total == 21 {
|
|
fmt.Println("\nSo, commiserations, the computer has won!")
|
|
return
|
|
}
|
|
} else {
|
|
getChoice()
|
|
if quit {
|
|
fmt.Println("OK, quitting the game")
|
|
return
|
|
}
|
|
if total == 21 {
|
|
fmt.Println("\nSo, congratulations, you've won!")
|
|
return
|
|
}
|
|
}
|
|
fmt.Println()
|
|
computer = !computer
|
|
}
|
|
}
|
|
}
|