Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vimライクなキーバインドで動くライフゲームを作った

$
0
0

Vimライクといってもただ hjkl で動かせるよってだけなので、Vimmerの方々に怒られると思いますが…
勢いで作った。

https://github.com/penguing27/lifevim

モチベーション

  • コンソール画面で、画面をクリアして何かが動く、みたいなソフトの仕組みを知りたかった (それこそVimみたいな)
  • ライフゲームの動画を眺めていて、作ってみたくなった。

コンソール画面制御

※ 大事なのはこの2つ (Cの場合)

  • termios
    • tcgetattr()で現在のターミナル情報を保存しておいて、tcsetattr()で使いたいターミナルへ変更する。
    • エンターキーを押さなくてもキーを押した瞬間に出力される「非カノニカルモード」にするとか。アプリを終了させる前にちゃんと設定を戻さなければ、その後も変なことになるので注意が必要。
  • エスケープシーケンス (printf)
    • 画面を制御する制御文字を標準出力へ出力することで、画面をクリアする、カーソルを移動させる、みたいな処理が可能。
printf("\033[2J");// 画面をクリアするprintf("\033[%d;%dH",y,x);// カーソル位置を移動する

結果物

Macのターミナルでは動くことを確認した。

https://github.com/penguing27/lifevim

  • 操作方法
    • h,j,k,l: カーソル移動
    • 0,$,gg,G,M: 一番上へ移動したりとか
    • v: ライフを作ったり消したり
    • Space: 1ステップ進める
    • Enter: 膠着状態になるまで自動で進める
    • :q: 終了

output.gif

もうちょっとやりたいこと

  • Shift+vCtrl+vで行単位や矩形単位でライフを作ったり消したりできるようにしたい
  • マクロとか使えるようにするとおもしろそう
  • コマンドラインモードが弱すぎるのでちゃんと構文解析とかやりたい

Viewing all articles
Browse latest Browse all 5608

Trending Articles