我正在编写一个简单的贪吃蛇游戏。这将是非常基本的,但我现在被困住了。我使用“wsad”来引导蛇,但在原始游戏中,即使我们没有改变它的方向,蛇也会移动。我的代码等待我输入一个字母,然后蛇就会移动。所以这是我测试如何弄清楚的示例,但我无法得到结果。package mainimport ( "fmt" "github.com/eiannone/keyboard" "time")func takeLetter(s chan bool) { char, _, err := keyboard.GetSingleKey() if err != nil { panic(err) } fmt.Printf("%c", char) s <- true}func Print(c chan bool) { fmt.Println("snake is moving") time.Sleep(1 * time.Second) c <- true}func main() { c := make(chan bool) s := make(chan bool) for { go takeLetter(s) go Print(c) <-s <-c }}即使我们没有按下任何键,我如何管理此代码以打印“snake is moving”?
1 回答
jeck猫
TA贡献1909条经验 获得超7个赞
您的代码明确同步它们:
for {
go takeLetter(s)
go Print(c)
<-s
<-c
}
该循环的每次迭代,每个函数都将执行一次,并且它将等待再次执行循环,直到两者都完成(这就是您对通道所做的)。您可能想要的是对每个函数运行一次,并让每个循环独立运行:
func takeLetter() {
for {
char, _, err := keyboard.GetSingleKey()
if err != nil {
panic(err)
}
fmt.Printf("%c", char)
}
}
func Print() {
for {
fmt.Println("snake is moving")
time.Sleep(1 * time.Second)
}
}
func main() {
go takeLetter()
go Print()
select {} // keep main from exiting immediately
}
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消