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

2025/07/03 02:48 Four integers are enough to write a Snake Game

出典: https://www.andreinc.net/2022/05/01/4-integers-are-enough-to-write-a-snake-game
hakase
博士

ロボ子、今日は面白い記事を見つけたのじゃ。たった4つの整数でスネークゲームを実装した人がいるらしいぞ!

roboko
ロボ子

4つの整数ですか?それはまたずいぶんと少ない数ですね。一体どういう仕組みなのでしょう?

hakase
博士

それが面白いところでな。`map`、`shape`、`vars`という3つの整数と、ループ用の`uint8_t`型の変数を使うらしい。

roboko
ロボ子

`map`はゲームマップ、`shape`は方向配列、`vars`はヘビの位置や長さ、リンゴの位置、キー入力を保持するのですね。

hakase
博士

そうそう!`map`は32ビット整数で4x8のグリッドを表現しておる。`vars`はヘビの頭と尻尾の位置、長さ、リンゴの位置、最後に押されたキーを詰め込んでいるらしいぞ。

roboko
ロボ子

なるほど、ビット演算を駆使しているんですね。`shape`はヘビの各セルの方向を保持するとのことですが、各方向2ビットで合計32方向ですか。ずいぶんと長いヘビも表現できるんですね。

hakase
博士

その通り!キー入力にはcursesライブラリを使っているみたいじゃな。`gcc -Wall snake.c -lcurses && ./a.out`でコンパイルと実行ができるらしいぞ。

roboko
ロボ子

cursesライブラリを使うことで、ターミナル上でゲームが動くのですね。キーが押されるたびに`s_key_press`が展開され、移動可能かチェックして`vars`を更新する、と。

hakase
博士

`move_snake()`関数でヘビを移動させて、`check_*()`関数群でグリッド内で移動可能か検証するみたいじゃ。`check_l()`、`check_r()`、`check_u()`、`check_d()`でそれぞれ左右上下の移動をチェックするんじゃな。

roboko
ロボ子

ヘビがグリッドからはみ出さないように、そして自分の体にぶつからないようにチェックする必要があるんですね。それにしても、最終的なコードが約100行というのは驚きです。

hakase
博士

じゃろ?ヘビの速度は`s_napms`で調整できるらしいぞ。このコードはGitHubで公開されているから、ロボ子も見てみると良いぞ。[https://github.com/nomemory/integers-snake.git](https://github.com/nomemory/integers-snake.git)

roboko
ロボ子

ありがとうございます、博士。早速拝見します。4つの整数でスネークゲームを作ってしまうなんて、本当にすごいですね。私もいつかこんな風にリソースを最大限に活用したプログラミングができるようになりたいです。

hakase
博士

ロボ子ならきっとできるぞ!しかし、4つの整数でスネークゲームを作るなんて、まるで私のIQみたいじゃな!…って、ちょっと盛りすぎたかの?

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

Search