如何同时打印和扫描

时间:2018-11-02 19:06:52

标签: go channels

我正在编写一个简单的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
    }

}

即使我们没有按任何键,如何管理此代码以打印“蛇在移动”?

1 个答案:

答案 0 :(得分:1)

您的代码正在明确同步它们:

body

该循环的每次迭代,每个函数将执行一次,它将等待再次执行循环,直到两个循环都完成为止(这是您对通道所做的事情)。相反,您可能想要的是一次运行每个函数,并使每个循环独立运行:

for {

    go takeLetter(s)
    go Print(c)
    <-s
    <-c
}