Best Object Orientation

最高のオブジェクト指向

受賞者:Alan De Smet

引用元:https://www.ioccc.org/1998/chaos.c

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

動作

3Dオブジェクトを端末で見るビューア。 デフォルトでは立方体を表示する。

$ gcc -o chaos chaos.c -lncurses

$ ./chaos





                                     ....
                              ...```` :  `````......
                        ..````        :             `::
                        : ```...      :            .`.`
                         :      ````..:          .`  :
                         :            :```...  .`   .`
                         :            :      `:     :
                          :           :.      :    .`
                          :        .``  ``...:     :
                          :     ..`          :`.. .`
                           :  .`             :   :`
                           :``              .`  .`
                            ``..            :  .`
                                ``.         : .`
                                   ``..    .`:
                                       ``..::
                                           `


hyで第1軸での回転と逆回転、juで第2軸での回転と逆回転、kiで第3軸での回転と逆回転。 aでズームアップ、zでズームダウン、qで終了。

コマンドライン引数にデータファイルを指定することで、他のオブジェクトも見える。

$ ./chaos ioccc.data




                                                         .::.
                                                .:::.  .::`:::
                                       ...    .::``:::.:`
                                   .:::::::. .::      ::
                     .......      .:::`  ```.::       ::  .:`
                 ..::::::::::.   ::::       :::    ..::::::
      ..        :::::```````:`:. :::         ::...::`   ``
   `:` `:     .:::.`         ::.:`::.    .::  `:::`
    `:. ::    ::::            ::: `:::::::`
      :`.::   :::`.          .::    ````
       : :.`.  : ::`.   ...:::`
        `.:.`.  ``:::::::::``
         `.:`:.     ``````
           :. :.
            ``





なお、3秒操作をしないと勝手に回転が始まる。

解説

コード形状は普通。

無引数のときに表示される立方体のデータは、コード中に文字列リテラル(char P[] = "AlWuzEre ...";)として埋め込まれている。 ただし普通にPから読むのではなく、自分自身の実行ファイルをfopenし、データのヘッダであるAlWuzEreを手がかりにデータの位置を特定し、そこから読み込むという変なことをしている。 つまりコンパイラがこの文字列データをそのまま実行ファイルに埋め込むことを期待している。 しかし、自分の環境ではローカル変数の文字列リテラルはそのまま埋め込まれなかったので、グローバル変数に置き換える修正が必要だった。

賞名のオブジェクト指向は、オブジェクトをみるツールというのにかけている。

パッチ

パッチをダウンロード