You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
1 year ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// shorter declaration option
|
||
|
// type Animal struct {
|
||
|
// food, locomotion, sound string
|
||
|
// }
|
||
|
|
||
|
type Animal struct {
|
||
|
food string
|
||
|
locomotion string
|
||
|
noise string
|
||
|
}
|
||
|
|
||
|
var cow Animal = Animal{"grass", "walk", "moo"}
|
||
|
var bird Animal = Animal{"worms", "fly", "peep"}
|
||
|
var snake Animal = Animal{"mice", "slither", "hiss"}
|
||
|
|
||
|
func (a Animal) Eat() {
|
||
|
fmt.Println(a.food)
|
||
|
}
|
||
|
|
||
|
func (a Animal) Move() {
|
||
|
fmt.Println(a.locomotion)
|
||
|
}
|
||
|
|
||
|
func (a Animal) Speak() {
|
||
|
fmt.Println(a.noise)
|
||
|
}
|
||
|
|
||
|
func ParseUserInput(s string) []string {
|
||
|
noNewLine := strings.Trim(s, "\n")
|
||
|
return strings.Split(noNewLine, " ")
|
||
|
|
||
|
}
|
||
|
|
||
|
func ProcessCommand(cmd []string) {
|
||
|
switch cmd[0] {
|
||
|
case "cow":
|
||
|
PerformAction(cow, cmd[1])
|
||
|
case "bird":
|
||
|
PerformAction(bird, cmd[1])
|
||
|
case "snake":
|
||
|
PerformAction(snake, cmd[1])
|
||
|
default:
|
||
|
fmt.Println("Invalid animal. Options {cow, bird, snake}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func PerformAction(v Animal, action string) {
|
||
|
switch action {
|
||
|
case "eat":
|
||
|
v.Eat()
|
||
|
case "move":
|
||
|
v.Move()
|
||
|
case "speak":
|
||
|
v.Speak()
|
||
|
default:
|
||
|
fmt.Println("Invalid action. Options: {eat, move, speak}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
fmt.Println("Welcome to Animal Farm! We have a \"cow\", \"bird\", and \"snake\".")
|
||
|
fmt.Println("You can ask eat animal to \"eat\", \"move\", or \"speak\".")
|
||
|
fmt.Println("Example: >cow move")
|
||
|
|
||
|
inputReader := bufio.NewReader(os.Stdin)
|
||
|
|
||
|
for {
|
||
|
fmt.Printf(">")
|
||
|
userInput, _ := inputReader.ReadString('\n')
|
||
|
splitInputs := ParseUserInput(userInput)
|
||
|
|
||
|
if len(splitInputs) > 2 {
|
||
|
fmt.Println("Error user input contains more values than the expected \"<animal> <action>\"")
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if len(splitInputs) < 2 {
|
||
|
fmt.Println("Error user input contains less values than the expected \"<animal> <action>\"")
|
||
|
continue
|
||
|
}
|
||
|
ProcessCommand(splitInputs)
|
||
|
}
|
||
|
}
|