引用元:https://www.ioccc.org/2004/vik1.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2004/vik1.hint
動作
レースゲーム。
$ gcc -o vik1 vik1.c -lX11
$ ./vik
左右の矢印でハンドル操作。
スペースでアクセルを踏む。離すと徐々に減速する。
次のように実行すると冬になる。
$ ./vik1 a
次は夏の夜。
$ ./vik1 d
次は冬の夜。
$ ./vik1 ad
トラックの選択もでき、2
とすると夏の昼のトラック2、ad3
とすると冬の夜のトラック3など。
作者自身によるYouTube動画。
解説
短いコードにもかかわらず、信じられないほど作り込まれている。次はvik1.hintのFeatureの翻訳。
- 道は左右に曲がるだけでなく、丘を登ったり降りたりする
- 地平線の向こうに山がある
- 昼は空に太陽がある
- 夜は空が暗くなり遠くの視界がなくなる
- 冬は雪が降る
- 冬はスリップする
- 車が道を外れると遅くなり、止まる
- 約1分程度のトラックが3種類ある
- スピードメーター
- コンピュータ操作の他の車がいる
- 他の車との衝突判定もする
- ラップ時間を計測する
- 最短ラップ時間を記憶する
struct timeval
をint*
として扱っている部分が壊れていた(現代ではtime_t
が64ビット)ので、そこだけ修正した。
定数は奇妙に使い回されている(トラックの長さと色など)。
パッチ
パッチをダウンロード