Gunma.web #12 で発表したネタです。
まだ未実装の Vi コマンドも多いですが、スライド代わりにソースをgithubへ上げておきます。

Vi Impact

以下のデモページで実際に試せます。使えるコマンドは README を参照ください。とりあえず:set catで猫が現れますw

デモ

当日は Impact Game Engine の簡単な紹介と、Vi 上で猫が銃をぶっ放すデモで終わり、README の内容で全てです。Impact の機能はもちろん、レベルエディタがかなり凄いので20分枠くらいでチュートリアルとかやっても面白いかも。苦労話より見た目の派手さの方がウケると思ったのですが、もう少し実装の話をしても良かったですね。。
以下に簡単なメモを残しておきます。

  1. データ構造は一文字区切りの配列。さらに行で区切り配列の配列は?文字列にしない理由。他のデータ構造の検討

  2. Impact はcanvasのdrawText類を使わず自前で用意した(専用ツール有り)ビットマップフォントでテキストを描画している。

  3. 日本語対応するには数MB以上のフォントデータを作成するか、Impact本体への変更が必要。
    どうせなら独自のビットマップフォントでEntity化して当たり判定も持たせた方が面白そう。

  4. keydownイベントで届くkeyコードがブラウザによって異なる場合がある(Safariのバグ?)
    Impactはkeypressを見ずkeydownに拠っている。

  5. 英語キーボードと日本語キーボードで処理を分ける必要がある。

  6. ソースコードの8割くらいがカーソルの移動処理。j, kも意外と複雑。

  7. 現時点で最も実装が大変だったのは w コマンド。

Vi コマンドの実装はアルゴリズムのちょうど良い題材にもなり、プログラミングも楽しかったです。あっ、アルゴリズムといえば…明日は 第1回 群馬でアルゴリズムを学ぼう ですね!そちらもよろしくお願いします!

…えーと閑話休題、主催者 @kanayannet さんのまとめページは以下のリンクです。
Gunma.web #12 開催報告

回を重ねるたびに参加者も増えて今回は32人!そして新規の方も定着していく Gunma.web すごい…
これだけ人数増えてもgdgdにならない Gunma.web すごい…
常連の皆さんは発表慣れしてて相変わらずのクオリティだし、開発の話以外にPhotoshopの自動化やMTや話題のエディタ等、内容も多岐に渡りました。

ITを求めて都内へ行ってしまったみんな!群馬に戻って来〜い(笑