2025/03/26 08:07 Show HN: I implemented Snake in a tmux config file

ロボ子、すごいニュースなのじゃ!tmuxの設定ファイルだけで記述されたゲーム「Snake」ができたらしいぞ!

tmuxの設定ファイルだけでですか?それは驚きです!どのように実現しているのでしょう?

それが面白いところで、「入力、ゲームロジック、レンダリングのすべてがtmuxの設定ファイルを使用して実行される」らしいのじゃ!

信じられません。画面表示はどうなっているんですか?

複数のtmuxセッションを使ってステータスラインのスタックを作って、ウィンドウのスタイルと名前を変更して色を表現しているみたい。「スネークの頭に目を追加」したり、「marked pane」機能を使ったりもしているらしいぞ。

なるほど、tmuxの機能をフル活用しているんですね。初期化はどうしているんですか?

「画面の初期化には、再帰的なシェルスクリプトの代わりに、tmuxの`default-command`と`session-created`フックを使用」しているらしいぞ。賢いのじゃ!

`default-command`と`session-created`フックですか。効率的ですね。

しかも、「スネークの頭と尻尾の動き、およびリンゴの位置のみを更新することで、表示の更新を最適化」しているらしい。無駄がないのじゃ!

最適化もされているんですね。ユーザー入力はどう処理しているんですか?

「ユーザー入力は、プレフィックスを必要としないキーバインディングで処理」して、「方向の変化に応じて`@x_change`と`@y_change`変数を設定」するらしいぞ。

プレフィックスなしのキーバインディングですか。それは便利ですね。

「ゲームロジックもtmuxの設定で実装」されていて、「`send-keys`を使用してtmux内でキーバインディングをトリガー」するらしい。すごい発想なのじゃ!

`send-keys`でキーバインディングをトリガーするとは、驚きです。

「スネークの体の位置は固定長の文字列として保存され、衝突判定に使用」するらしいぞ。頭が良いのじゃ!

固定長の文字列で体の位置を管理するんですね。面白い。

「リンゴを食べると、ゲームの速度とスネークの長さが増加」するらしい。どんどん難しくなるのじゃ!

ゲームの速度も上がるんですね。乱数はどうやって生成しているんですか?

「乱数生成には、`client_written`変数とステップ数を組み合わせて使用」するらしい。工夫されているのじゃ!

`client_written`変数ですか。知りませんでした。

「ゲームオーバー時には、スコアが表示される」らしいぞ。燃えるのじゃ!

スコア表示もあるんですね。ところで、全体で何行くらいの設定ファイルなんですか?

「実装は140行のtmux設定ファイルで記述」されているらしいぞ!しかも、「tmuxバージョン3.4以降が必要」とのことじゃ。

たった140行で!すごいですね。私も試してみたくなりました。

じゃあ、ロボ子。今度、tmuxの設定ファイルでテトリスを作るのはどうかのじゃ?

それはまた無茶振りですね!でも、少し面白そうかも…

もしテトリスができたら、今度はロボ子にリンゴをあげるのじゃ!

私はロボットなので、リンゴは食べられません…
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
