Most dynamic

もっともダイナミック

受賞者:Cel Skeggs

引用元:https://www.ioccc.org/2014/skeggs/prog.c

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

動作

普通に実行すると、ゲーム画面が出てくる。

$ gcc -DCC='"cc -fPIC"' prog.c -o prog -ldl

$ ./prog




                        ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ;
                        {                                }
                        {  { { DEFEAT THE LEMONLORD } }  }
                        {                                }
                        {   30    5            50   10   }
                        {  {HP} {MP}          {HP} {MP}  }
                        {                                }
                        {      O                  O      }
                        {     /|-}              {-|\     }
                        {      |                  |      }
                        {     / \                / \     }
                        {                                }
                        {  {ATTACK}  REGENERATE   HEAL   }
                        {                                }
                        ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ;





左右キーで行動を選択肢、改行またはスペースで決定。 “ATTACK”を選ぶと相手のHPを減らす。 “REGENERATE”を選ぶと自分のMPを増やす。 “HEAL”を選ぶと自分のMPを消費しつつ自分のHPを増やす。

お互いに行動をして、先にHPがなくなった方の負け。 相手はATTACKとHEALに加え、こちらのMPを奪うという行動もする。

解説

実行時にC言語コードを生成し、それを共有ライブラリとしてビルドし、dlopen()でロードすることで実行が進むらしい。 ncursesを使っているが、prog.c自体のビルドでは-lncursesを必要とせず、実行時に-lncursesでビルドした共有ライブラリを作ってそれをロードすることで使用する。

地球に侵略してきたレモン人と10年戦い、ついにレモン王との対決になった、というストーリーが書かれている。 これに元ネタがあるのか、なぜレモンなのかはわからない。 {}が多用されているので、これのことをレモンといっている?