我做了一个有4个房间的随机房间计划。我试图获取每个房间的属性并将它们传递给其他功能。每个房间都有一个姓名和年龄属性的人。我试图传递这些属性来测试if语句以产生额外的响应。如何传递这些值?
//the random maze room game
package main
//All imports can be combined into ()
import ("fmt"
//Import needed for random operation
"math/rand"
//Import requied to call upon current time
"time"
)
type Person struct {
Name string
Age int
}
func main(){
// These two lines are designed to reset the random Seed every time the program is run
// Unless the randomizer is seeded, Golang 1.6 is pseudo-random,
// always defaulting to Seed(1)
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
switch r1.Intn(4){
case 0:
westRoom()
case 1:
eastRoom()
case 2:
northRoom()
case 3:
southRoom()
default:
lostRoom()
}
p := Person{}
p.Name = Avatarname
p.Age = Avatarage
avatar(&p)
appearance(&p)
}
func westRoom(){
fmt.Println("You find yourself in a room with three walls, and a door behind you.")
fmt.Println("The opposite wall is a window, overlooking the sea")
Avatarname := "Bill"
Avatarage := 25
return
}
func eastRoom(){
fmt.Println("You find yourself in a room with a door on the walls to your left, right, and behind you")
fmt.Println("on the wall across from you is a painting of a mountain scene")
Avatarname := "Mary"
Avatarage := 33
return
}
func northRoom(){
fmt.Println("You find yourself in a room with a door on the wall behind you")
fmt.Println("You see several statues of people standing around the room")
Avatarname := "Joe"
Avatarage := 58
return
}
func southRoom(){
fmt.Println("You find yourself in a room with a door on the wall in front and behind you")
Avatarname := "Abagail"
Avatarage := 67
return
}
func lostRoom(){
fmt.Println("You are unable to find a room in a maze filled only with rooms")
fmt.Println("It's almost like the programmer didn't know what he was doing")
}
func avatar(p.Name, p.Age){
if p.Name == "Bill" || "Joe" {
fmt.Println("You see a man standing in the middle of the room")
} else {
fmt.Println("You see a woman standing in the middle of the room")
}
}
func appeareance(p.Name, p.Age) {
if p.Age > 50 {
fmt.Println("They look old")
} else {
fmt.Println("They look young")
}
}
答案 0 :(得分:0)
为什么房间功能没有返回Person
?例如:
func main() {
// These two lines are designed to reset the random Seed every time the program is run
// Unless the randomizer is seeded, Golang 1.6 is pseudo-random,
// always defaulting to Seed(1)
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
var p Person
switch r1.Intn(4) {
case 0:
p = westRoom()
case 1:
p = eastRoom()
case 2:
p = northRoom()
case 3:
p = southRoom()
default:
lostRoom()
}
p.printAvatar()
p.printAppeareance()
}
func westRoom() Person {
fmt.Println("You find yourself in a room with three walls, and a door behind you.")
fmt.Println("The opposite wall is a window, overlooking the sea")
return Person{
Name: "Bill",
Age: 25,
}
}
答案 1 :(得分:0)
执行此操作的一种方法是更改房间功能,以返回Person
结构或Person
结构的属性。
点击此处的实时代码: The Go Playground
例如,
func northRoom() *Person{
fmt.Println("You find yourself in a room with a door on the wall behind you")
fmt.Println("You see several statues of people standing around the room")
return &Person{"Joe", 58}
}
现在,switch
语句中的函数调用可能会返回Person
结构。
var p *Person
switch r1.Intn(4){
case 0:
p = westRoom()
case 1:
p = eastRoom()
case 2:
p = northRoom()
case 3:
p = southRoom()
default:
p = lostRoom()
}
avatar(p)
appearance(p)
请注意,您需要更改avatar()
和appearance()
功能的签名才能接受*Person
参数。