我正在編寫一個簡單的貪吃蛇游戲。這將是非常基本的,但我現在被困住了。我使用“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 關注
- 121 瀏覽
添加回答
舉報
0/150
提交
取消