亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何同時打印和掃描

如何同時打印和掃描

Go
動漫人物 2023-05-04 17:42:45
我正在編寫一個簡單的貪吃蛇游戲。這將是非常基本的,但我現在被困住了。我使用“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

}


查看完整回答
反對 回復 2023-05-04
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號