我正在编写一个简单的SNAKE游戏。
这将是非常基本的,但是我现在陷入困境。我使用“ wsad”操纵蛇,但是在原始游戏中,即使我们没有改变蛇的方向,蛇也会移动。我的代码等待我输入字母,然后蛇移动。所以这是我正在测试如何找出答案的样本,我无法获得结果。
package main
import (
"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
}
}
即使我们没有按任何键,如何管理此代码以打印“蛇在移动”?
答案 0 :(得分:1)
您的代码正在明确同步它们:
body
该循环的每次迭代,每个函数将执行一次,它将等待再次执行循环,直到两个循环都完成为止(这是您对通道所做的事情)。相反,您可能想要的是一次运行每个函数,并使每个循环独立运行:
for {
go takeLetter(s)
go Print(c)
<-s
<-c
}