1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GoAdvent Calendar 2021

Day 12

【Go/TUI】使徒に侵食される気分になれるツール作ってみた

Posted at

作ってみた

ireul.gif

感謝

以下ガイドラインを参照しています。

背景・動機

  • Goの勉強
  • TUIツールの作り方の勉強
  • 楽しいことをしたかった

使い方

Linux/amd64の場合はこちらからバイナリをDLして、実行

wget [ireul_vxxx_amd64_linux.zipのURL]
unzip [zipファイル名]
chmodu u+x ireul
./ireul

それ以外の環境ではGoの動作する環境で以下のように実施

git clone git@github.com:kuredev/ireul.git
go run main.go

作り方のメモ

動き

アルゴリズムで侵食や回復の動きを作れたらかっこいいなと思いつつ、仕組みはパラパラ漫画です。
各状態のアスキーアートを1ファイルずつ準備して、それっぽくなるよう sleep させつつ順次表示しています。

1ファイル目
                          H """""""""""""""""""""" H
                          H                        H
                          H                        H
+-+-+-+-+-+ +-+-+-+       H                        H
|C|O|D|E|:| |2|6|3|       H                        H
+-+-+-+-+-+ +-+-+-+       H                        H
                          H                        H
                          H                        H
                          H                        H
                          H                        H
H (((((((((((((((((,      .W.                    .B          ((((((((((((((((( H
H                  .YJ.      7W,               .J"        .T^                  H
H                     TQ,       TN,          .H^       .J"                     H
H                       (h,        """"""""""        .T^                       H
H                         .Ta.                    .J"                          H
H                            7H,               ..T'                            H
H                              (S,            J"                               H
H                               H            H                                 H
H                               H            H                                 H
H                               H            H                                 H
H...............................H            H.................................H

2ファイル名
                          H """""""""""""""""""""" H
                          H                        H
                          H                        H
+-+-+-+-+-+ +-+-+-+       H                        H        +-+-+-+-+-+ +-+-+-+
|C|O|D|E|:| |2|6|3|       H                        H        |Under Deliberation|
+-+-+-+-+-+ +-+-+-+       H                        H        +-+-+-+-+-+ +-+-+-+
                          H                        H
                          H                        H
                          H                        H
                          H                        H
H (((((((((((((((((,      .W.                    .B          ((((((((((((((((( H
H                  .YJ.      7W,               .J"        .T^ MMMMMMMMMMMMMMMMMH
H                     TQ,       TN,          .H^       .J"MMMMMMMMMMMMMMMMMMMMMH
H                       (h,        """"""""""        .T^ MMMMMMMMMMMMMMMMMMMMMMH
H                         .Ta.                    .J"MMMMMMMMMMMMMMMMMMMMMMMMMMH
H                            7H,               ..T'MMMMMMMMMMMMMMMMMMMMMMMMMMMMH
H                              (S,            J" MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH
H                               H            H MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH
H                               H            H MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH
H                               H            H MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH
H...............................H            H.................................H

実装

表示部は tcell というツールを使っています。

ファイルの内容を1Byteずつ表示しつつ、侵食されている部分は M で表示しているため、そこだけ色を変えるようにしています。

主な表示処理部抜粋
bytes, err := files.ReadFile(fileName)
if err != nil {
	panic(err)
}
s := string(bytes)
x := 1
y := 1
for _, c := range s {
	if string(c) == "\n" {
		x = 1
		y = y + 1
	} else {
		if string(c) == "M" {
			screen.SetContent(x, y, c, nil, tcell.StyleDefault.Foreground(tcell.ColorRed))
		} else {
			screen.SetContent(x, y, c, nil, tcell.StyleDefault.Foreground(tcell.ColorDarkCyan))
		}
		x = x + 1
	}
}
screen.Show()

その他

  • 推しはマヤ、日向、青葉のオペレーターズ
  • 感謝:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?