为了账号安全,请及时绑定邮箱和手机立即绑定

如何同时打印和扫描

如何同时打印和扫描

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 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信