mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
241 lines
5.8 KiB
Go
241 lines
5.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type PROBLEM_TYPE int8
|
|
|
|
const (
|
|
SEX PROBLEM_TYPE = iota
|
|
HEALTH
|
|
MONEY
|
|
JOB
|
|
UKNOWN
|
|
)
|
|
|
|
func getYesOrNo() (bool, bool, string) {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
scanner.Scan()
|
|
|
|
if strings.ToUpper(scanner.Text()) == "YES" {
|
|
return true, true, scanner.Text()
|
|
} else if strings.ToUpper(scanner.Text()) == "NO" {
|
|
return true, false, scanner.Text()
|
|
} else {
|
|
return false, false, scanner.Text()
|
|
}
|
|
}
|
|
|
|
func printTntro() {
|
|
fmt.Println(" HELLO")
|
|
fmt.Println(" CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
|
|
fmt.Print("\n\n\n")
|
|
fmt.Println("HELLO. MY NAME IS CREATIVE COMPUTER.")
|
|
fmt.Println("\nWHAT'S YOUR NAME?")
|
|
}
|
|
|
|
func askEnjoyQuestion(user string) {
|
|
fmt.Printf("HI THERE %s, ARE YOU ENJOYING YOURSELF HERE?\n", user)
|
|
|
|
for {
|
|
valid, value, msg := getYesOrNo()
|
|
|
|
if valid {
|
|
if value {
|
|
fmt.Printf("I'M GLAD TO HEAR THAT, %s.\n", user)
|
|
fmt.Println()
|
|
} else {
|
|
fmt.Printf("OH, I'M SORRY TO HEAR THAT, %s. MAYBE WE CAN\n", user)
|
|
fmt.Println("BRIGHTEN UP YOUR VISIT A BIT.")
|
|
}
|
|
break
|
|
} else {
|
|
fmt.Printf("%s, I DON'T UNDERSTAND YOUR ANSWER OF '%s'.\n", user, msg)
|
|
fmt.Println("PLEASE ANSWER 'YES' OR 'NO'. DO YOU LIKE IT HERE?")
|
|
}
|
|
}
|
|
}
|
|
|
|
func promptForProblems(user string) PROBLEM_TYPE {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
fmt.Println()
|
|
fmt.Printf("SAY %s, I CAN SOLVE ALL KINDS OF PROBLEMS EXCEPT\n", user)
|
|
fmt.Println("THOSE DEALING WITH GREECE. WHAT KIND OF PROBLEMS DO")
|
|
fmt.Println("YOU HAVE? (ANSWER SEX, HEALTH, MONEY, OR JOB)")
|
|
for {
|
|
scanner.Scan()
|
|
|
|
switch strings.ToUpper(scanner.Text()) {
|
|
case "SEX":
|
|
return SEX
|
|
case "HEALTH":
|
|
return HEALTH
|
|
case "MONEY":
|
|
return MONEY
|
|
case "JOB":
|
|
return JOB
|
|
default:
|
|
return UKNOWN
|
|
}
|
|
}
|
|
}
|
|
|
|
func promptTooMuchOrTooLittle() (bool, bool) {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
scanner.Scan()
|
|
|
|
if strings.ToUpper(scanner.Text()) == "TOO MUCH" {
|
|
return true, true
|
|
} else if strings.ToUpper(scanner.Text()) == "TOO LITTLE" {
|
|
return true, false
|
|
} else {
|
|
return false, false
|
|
}
|
|
}
|
|
|
|
func solveSexProblem(user string) {
|
|
fmt.Println("IS YOUR PROBLEM TOO MUCH OR TOO LITTLE?")
|
|
for {
|
|
valid, tooMuch := promptTooMuchOrTooLittle()
|
|
if valid {
|
|
if tooMuch {
|
|
fmt.Println("YOU CALL THAT A PROBLEM?!! I SHOULD HAVE SUCH PROBLEMS!")
|
|
fmt.Printf("IF IT BOTHERS YOU, %s, TAKE A COLD SHOWER.\n", user)
|
|
} else {
|
|
fmt.Printf("WHY ARE YOU HERE IN SUFFERN, %s? YOU SHOULD BE\n", user)
|
|
fmt.Println("IN TOKYO OR NEW YORK OR AMSTERDAM OR SOMEPLACE WITH SOME")
|
|
fmt.Println("REAL ACTION.")
|
|
}
|
|
return
|
|
} else {
|
|
fmt.Printf("DON'T GET ALL SHOOK, %s, JUST ANSWER THE QUESTION\n", user)
|
|
fmt.Println("WITH 'TOO MUCH' OR 'TOO LITTLE'. WHICH IS IT?")
|
|
}
|
|
}
|
|
}
|
|
|
|
func solveHealthProblem(user string) {
|
|
fmt.Printf("MY ADVICE TO YOU %s IS:\n", user)
|
|
fmt.Println(" 1. TAKE TWO ASPRIN")
|
|
fmt.Println(" 2. DRINK PLENTY OF FLUIDS (ORANGE JUICE, NOT BEER!)")
|
|
fmt.Println(" 3. GO TO BED (ALONE)")
|
|
}
|
|
|
|
func solveMoneyProblem(user string) {
|
|
fmt.Printf("SORRY, %s, I'M BROKE TOO. WHY DON'T YOU SELL\n", user)
|
|
fmt.Println("ENCYCLOPEADIAS OR MARRY SOMEONE RICH OR STOP EATING")
|
|
fmt.Println("SO YOU WON'T NEED SO MUCH MONEY?")
|
|
}
|
|
|
|
func solveJobProblem(user string) {
|
|
fmt.Printf("I CAN SYMPATHIZE WITH YOU %s. I HAVE TO WORK\n", user)
|
|
fmt.Println("VERY LONG HOURS FOR NO PAY -- AND SOME OF MY BOSSES")
|
|
fmt.Printf("REALLY BEAT ON MY KEYBOARD. MY ADVICE TO YOU, %s,\n", user)
|
|
fmt.Println("IS TO OPEN A RETAIL COMPUTER STORE. IT'S GREAT FUN.")
|
|
}
|
|
|
|
func askQuestionLoop(user string) {
|
|
for {
|
|
problem := promptForProblems(user)
|
|
|
|
switch problem {
|
|
case SEX:
|
|
solveSexProblem(user)
|
|
case HEALTH:
|
|
solveHealthProblem(user)
|
|
case MONEY:
|
|
solveMoneyProblem(user)
|
|
case JOB:
|
|
solveJobProblem(user)
|
|
case UKNOWN:
|
|
fmt.Printf("OH %s, YOUR ANSWER IS GREEK TO ME.\n", user)
|
|
}
|
|
|
|
for {
|
|
fmt.Println()
|
|
fmt.Printf("ANY MORE PROBLEMS YOU WANT SOLVED, %s?\n", user)
|
|
|
|
valid, value, _ := getYesOrNo()
|
|
if valid {
|
|
if value {
|
|
fmt.Println("WHAT KIND (SEX, MONEY, HEALTH, JOB)")
|
|
break
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
fmt.Printf("JUST A SIMPLE 'YES' OR 'NO' PLEASE, %s\n", user)
|
|
}
|
|
}
|
|
}
|
|
|
|
func goodbyeUnhappy(user string) {
|
|
fmt.Println()
|
|
fmt.Printf("TAKE A WALK, %s.\n", user)
|
|
fmt.Println()
|
|
fmt.Println()
|
|
}
|
|
|
|
func goodbyeHappy(user string) {
|
|
fmt.Printf("NICE MEETING YOU %s, HAVE A NICE DAY.\n", user)
|
|
}
|
|
|
|
func askForFee(user string) {
|
|
fmt.Println()
|
|
fmt.Printf("THAT WILL BE $5.00 FOR THE ADVICE, %s.\n", user)
|
|
fmt.Println("PLEASE LEAVE THE MONEY ON THE TERMINAL.")
|
|
time.Sleep(4 * time.Second)
|
|
fmt.Print("\n\n\n")
|
|
fmt.Println("DID YOU LEAVE THE MONEY?")
|
|
|
|
for {
|
|
valid, value, msg := getYesOrNo()
|
|
if valid {
|
|
if value {
|
|
fmt.Printf("HEY, %s, YOU LEFT NO MONEY AT ALL!\n", user)
|
|
fmt.Println("YOU ARE CHEATING ME OUT OF MY HARD-EARNED LIVING.")
|
|
fmt.Println()
|
|
fmt.Printf("WHAT A RIP OFF, %s!!!\n", user)
|
|
fmt.Println()
|
|
} else {
|
|
fmt.Printf("THAT'S HONEST, %s, BUT HOW DO YOU EXPECT\n", user)
|
|
fmt.Println("ME TO GO ON WITH MY PSYCHOLOGY STUDIES IF MY PATIENTS")
|
|
fmt.Println("DON'T PAY THEIR BILLS?")
|
|
}
|
|
return
|
|
} else {
|
|
fmt.Printf("YOUR ANSWER OF '%s' CONFUSES ME, %s.\n", msg, user)
|
|
fmt.Println("PLEASE RESPOND WITH 'YES' or 'NO'.")
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
printTntro()
|
|
scanner.Scan()
|
|
userName := scanner.Text()
|
|
fmt.Println()
|
|
|
|
askEnjoyQuestion(userName)
|
|
|
|
askQuestionLoop(userName)
|
|
|
|
askForFee(userName)
|
|
|
|
if false {
|
|
goodbyeHappy(userName) // unreachable
|
|
} else {
|
|
goodbyeUnhappy(userName)
|
|
}
|
|
|
|
}
|