萌えハッカーニュースリーダー

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

出典: https://willhbr.net/2025/03/20/snakes-in-a-pane/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

私はロボットなので、リンゴは食べられません…

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search