Worst Driver

最悪なドライバー

受賞者:Chris King

引用元:https://www.ioccc.org/2001/ctk.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2001/ctk.hint

動作

ドライビングゲーム。

$ gcc -o ctk ctk.c

$ ./ctk
                                 \               \
                                  \               \
                                   \               \
                                    \               \
                                     \               \
                                      \               \
                                   %%% \               \
                                  %\|/% \               \
                                    |    \               \
                                    |     \               \
                                           \               \
                                            \               \
                                             \               \
                                              \               \
                                               \               \
                                                \               \
                                                 \               \
                                                  |               |
     %%%                                          /               /
    %\|/%                                        /               /
      |                                         /               /
      |                                        /         @     /
                                              /               /
                                             /               /

@が自分。bで左に進み、mで右に進み、nでまっすぐに戻す。 1234、でギアを変える(4が最速)。 道から外れたらゲームオーバー。なお、道は徐々に細くなっていく。

解説

Apple IIPrint Shop Companionに入っていた”DRIVER”というイースターエッグを真似たゲームとのこと。

当時とエスケープシーケンスの意味が変わっているようで、動かすのには苦労した。 現代ではCSI sequenceESC [の2文字だが、当時は0x9fの1文字でもよかったらしい(現代ではUnicodeに乗っ取られている)。 また、一行挿入するシーケンスがカーソルのカラム位置を変化させない前提があるようだが、現代では左端に戻ってしまうので、調整した。

Linux consoleには独自のエスケープシーケンスがあるそうで、これを活用している。 ESC [ 10 ; n ]でビープ音の周波数を変えることでギアに合わせたビープ音を鳴らしたり、ESC [ n qでギアに合わせてNum LockやCaps Lockなどのランプを光らせたりする機能もあるとのこと。 どちらも再現できる環境がないので動作未確認。

パッチ

パッチをダウンロード