Best way to lose a life

命を落とす最良の方法

受賞者:J. David Lowe

引用元:https://www.ioccc.org/2012/dlowe/dlowe.c

審査員・作者による説明:https://www.ioccc.org/2012/dlowe/hint.html

動作

ライフゲームをネタにしたX11ゲーム。

$ gcc -o dlowe dlowe.c -lX11

$ ./dlowe

起動するとタイトル画面。このタイトルロゴはライフゲームのルールで崩れていく。

タイトル画面
図:タイトル画面

キーを押すとゲームが始まる。

ゲーム画面
図:ゲーム画面

画面右の真ん中あたりにある小さい宇宙船が自機。 自機が勝手に右に進む(画面全体が左にスクロールしていく)。 上下キーで自機を操作し、ライフゲームに従って変化する障害物を避け続ける。 ぶつかったらゲームオーバー。 スピードは徐々に速くなっていく。

解説

hint.textに書かれた”B3/S23”は、ライフゲームのルールを表す符号。 B3は「周囲3セルが生きていたら生まれる(birth)」、S23は「周囲2セルか3セルが生きていたら生き残る(survive)」の意味。

コード形状はライフゲームの配置で、19世代でグライダーになるパターンとのこと。 難読化としては、たくさんのグローバル変数、違う意味での使いまわし、同じ識別子をstructのメンバでも使う、三項演算子や優先順位の悪用、マジックナンバーの多用などとのこと。