Печать нескольких строк параллельно Golang - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь написать симулятор скачек с несколькими рядами.Каждая строка будет представлять местоположение одной лошади, рассчитанное с помощью программы.

По какой-то причине код при запуске на игровой площадке Go не выводит числа случайным образом, как это происходит на моей машине.

package main

import (
    "math/rand"
    "os"
    "strconv"
    "time"
)

var counter = 0

func main() {
    i := 1
    horses := 9
    for i <= horses {
        go run(i)
        i++
    }
    time.Sleep(5000 * time.Millisecond)
    print("\ncounter: " + strconv.Itoa(counter))
    print("\nEnd of main()")
}

func run(number int) {
    var i = 1
    var steps = 5
    for i <= steps {
        print("[" + strconv.Itoa(number) + "]")
        rand.Seed(time.Now().UnixNano())
        sleep := rand.Intn(10)
        time.Sleep(time.Duration(sleep) * time.Millisecond)
        i++
        counter++
    }
    if i == steps {
        println(strconv.Itoa(number) + " wins")
        os.Exit(1)
    }
}

Детская площадка: https://play.golang.org/p/pycZ4EdH7SQ

Мой неупорядоченный вывод:

[1][5][8][2][3][4][7][9][6][7][9][9][4][3]...

Но мой вопрос: как мне напечатать цифры наподобие

[1][1]
[2][2][2][2][2][2][2][2]
[3][3][3]
...
[N][N][N][N][N]

1 Ответ

1 голос
/ 08 апреля 2019

вы можете захотеть проверить этот ответ стекопотока , который использует goterm , чтобы переместить курсор терминала и позволить вам перезаписать его часть.

Идея состоит в том,что как только вы доберетесь до бита терминала, который вы хотите быть «динамическим» (во многом как очистка экрана видеоигры + перерисовка), вы всегда перемещаете курсор и «рисуете» свою позицию «лошадей».

Обратите внимание, что сдля этого вам нужно где-то хранить свои позиции, чтобы затем «рисовать» их позиции в каждом «кадре».

С помощью этого упражнения вы приближаетесь к тому, как работают видеоигры, и для этого вы можете захотеть установитьдо goroutine с заданной частотой обновления, чтобы очистить ваш терминал и сделать то, что вы хотите.

...