Go에서 스타워즈.

7913 단어 GoStarWars
안녕하세요.
나는 고릴라다.
며칠 전에 나는 트위터에서 이 트위터를 보았다.

나는 Vim에서 스타워즈를 보기로 결정했다.https://t.co/kTp3HqcLis pic.twitter.com/dM6c9WqVWA — mattn (@mattn_jp) 2019년 1월 23일
역시 mattn.
다만 유감스럽게도 이것은 Vim의 플러그인이기 때문에 Vim에서만 사용할 수 있습니다.
없는 것은 할 수밖에 없다.
그래서 이 Go판을 만들었어요.
Go는 교차 컴파일이 가능하기 때문에 어떤 환경에서도 2진법으로 이동할 수 있으며 언제든지 볼 수 있다.

만든 물건



저장소 여기 있습니다.

이 그림은 @po3rin 씨가 만든 이 도구를 사용했습니다.
아주 좋아요. 꼭 한번 써 보세요.

Qiita의 경우 URL을 직접 사용할 수 없으므로 이미지를 복사하여 URL 붙여넣기만 변경하십시오.
<a href="https://github.com/skanehira/go-starwars"><img src="https://qiita-image-store.s3.amazonaws.com/0/66178/0ef750bc-03ed-1eb8-2b3b-cfdb9801f3b9.png" width="460px"></a>

사용 방법


읽으세요README.
하면, 만약, 만약...
docker run --rm -it skanehira/go-starwars
에서 설명한 대로 해당 매개변수의 값을 수정합니다.

구조


텍스트 파일만 읽고 출력합니다.

라이브러리 사용


  • packr
    바이너리 파일에 텍스트를 포함할 수 있습니다.
    자주 보도에서 보실 수 있습니다 go-bindata우리 쪽은 이미 정비를 하지 않았기 때문에packr를 다시 사용하기로 결정했다.
    사용 방법은 README 를 참조하십시오. 그러나 바이너리 파일을 구축할 때packr build.
    간단하고 알기 쉽다.

  • go-colorable
    화면 지우기에는 이스케이프 시퀀스가 사용되지만 Windows에서는 사용할 수 없습니다.
    따라서 mattn 씨가 만든 라이브러리를 사용하면 윈도우즈도 화면을 지울 수 있습니다.
    역시 mattn.
  • 프로세스

    sw1.txt의 내용은 단순한 텍스트일 뿐 for분으로 읽고 출력할 뿐이다.
    45 및 30은 대기 시간으로, 그 외 13줄의 컨텐트는 프레임 1입니다.
    45
    
    
      Original Work: Simon Jansen ( http://www.asciimation.co.nz/ )   
      Inspiration  : Martin W. Kirst
                     https://github.com/nitram509/ascii-telnet-server 
      Httpification: Martin Raison
                     https://twitter.com/braizh
    
      The hard work was done by Simon,                                
      I just wrote the http player                                  
      and placed it online using Simon's movie sources.               
    
    
    30
    
    
    
    
                           WWW.ASCIIMATION.CO.NZ
    
    
                                 presents
    
    
    
    
    
    
    한 줄 한 줄 읽고, 시간 줄은string을 int로 해석하고, 결합된 문자를 출력합니다.
    지정된 시간을 기다린 후 화면 지우기와 값 초기화를 진행합니다.
    이외에 문자열만 결합하면 됩니다.
    아주 간단해요.
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        if i%height == 0 {
            // get duration from text line
            duration, err = strconv.Atoi(scanner.Text())
            if err != nil {
                continue
            }
    
            // print buffered line
            fmt.Println(buffer)
    
            time.Sleep(time.Duration((*speed)*duration) * time.Millisecond)
    
            // clear terminal screen, init buffer and duration
            clear()
            buffer = ""
            duration = 0
        } else {
            // text line into buffer
            buffer += fmt.Sprintln(scanner.Text())
        }
        i++
    }
    

    화면 지우기 처리 정보

    func clear() {
        // https://www.grapecity.com/developer/support/powernews/column/clang/047/page02.htm
        fmt.Fprint(stdOut, "\x1b[2J")
        fmt.Fprint(stdOut, "\x1b[0;0H")
        stdOut.Flush()
    }
    
    이스케이프 시퀀스를 사용하여 화면을 지울 수 있습니다.\x1b[2J 화면을 지우지만 커서가 변하지 않기 때문에 커서 중 하나를 왼쪽 위로 돌려야 합니다.\x1b[0;0H 커서를 좌표 0, 0으로 다시 이동합니다.
    이것에 맞추면 화면을 지울 수 있다.

    마지막


    단락이지만 이런 걸 하니 즐겁죠.
    엔지니어는 공부할 필요가 없다고 생각하는데, 중요한 것은 자신을 찾아 기뻐하며 껑충껑충 뛰면서 식견과 경험을 깊이 있게 하는 것이다
    앞으로도 즐거울 거예요.

    좋은 웹페이지 즐겨찾기