2021.08.23
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
お久しぶりです。たなしょです。
コーディングしていたり、資料を作成していたりする時に本の一息つきたい時に大好きなキャラクターに癒されたいなと思いまして、
ターミナルで起動できるツールがあれば休憩の時間が楽しくなるのではないかと思い作ることにしました。
TL;DR
・ウマ娘のキャラクターがたくさん出てきて癒されたました。
・エスケープシーケンスを用いた画面の入出力制御を学びました。
・https://github.com/gobuffalo/packr/tree/master/v2を使うとテキストを高速で読み込むことが可能であることがわかりました。
機能詳細
file, err := packr.NewBox("./text").Open("umamusume.txt")
https://github.com/gobuffalo/packr
上記を使用することでウマ娘テキストを高速で読み込ませています。
メインの処理を開始する前に画面の初期化とカーソルの座標を初期化します。
この処理はウマ娘のキャラクターを出力する際も実行されます。
func clear() {
?fmt.Fprintln(out, "x1b[2J")
?fmt.Fprintln(out, "x1b[H")
}
エスケープシーケンスの詳細は下記サイトがわかりやすいです。
https://www.mm2d.net/main/legacy/c/c-06.html
おまけ機能としてウマ娘のキャラクターを出力する際にランダムで色を変化させるようにcolor関数を作成しました。
全部で7色出力されるように作成しました。
func color() {
?rand.Seed(time.Now().UnixNano())
?rand_num := rand.Intn(7)
?switch rand_num {
?case 0:
??fmt.Print("x1b[31m")
?case 1:
??fmt.Print("x1b[32m")
?case 2:
??fmt.Print("x1b[33m")
?case 3:
??fmt.Print("x1b[34m")
?case 4:
??fmt.Print("x1b[35m")
?case 5:
??fmt.Print("x1b[36m")
?case 6:
??fmt.Print("x1b[37m")
?}
}
今後の改良点
- helpがついていなかったのでhelpを追加したいです。
- 現在5秒間隔でキャラクターが変更されるのを引数で変更時間を制御できるようにしたいです。
- 色もランダムで出力されるようになっているので引数で色を制御できるようにしたいです。
- VimScriptにバイナリを取り入れてVim上で動作させるようにしたいです。
おわりに
息抜きでジョークツールを作成するのは楽しいですね。
今後もいろいろとGo言語やPHPを使ってものを作っていきたいです。
最近ウマ娘のゲームがなかなかできてないですが、やっぱりキャラクターはかわいいですね!
GitHubにソースコードをありますので気になった人はぜひ見ていただけばと思います!