引用元:https://www.ioccc.org/1993/rince.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1993/rince.hint
動作
セルオートマトンに基づいたゲーム詰め合わせ。次のようにコンパイル・実行する。
$ gcc -o rince rince.c -lncurses
$ ./rince
デフォルトではシューティング。j
で左、l
で右、k
でミサイル発射。連射できないよう、1回撃ったら1度動かないと次が発射できない。
########################################
# #
# > > > >< > > > > #
# < < < < < < < #
# > > > v> > > > #
# < < < < < < <v> < #
# > > > v> > > #
# < < < < < < ><v < #
#v v v #
# vv #
#v v vv #
#v vv #
#v v v vv #
# v v vv #
#v v v ^ #
#v v v v#
# v v #
#v v v v v #
#v v v x v#
########################################
./rince rince.data1
で起動するとブロック崩し。,
で左、/
で右、.
でボール発射。
###################################
# #
#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#
#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#
#$$$$$$$$$$$$$#$$$#$$$$$$$$$$$$$$$#
#$$$$$$$$$$$$$#$$$#$$$$$$$$$$$$$$$#
#$$$$$$$$$$$$$#$$$#$$$$$$$$$$$$$$$#
# #
# #
# # # # \ #
# # # #
# # # #
# #
# #
# #
# ==== #
# #
-----------------------------------
./rince rince.data2
では[[1991/rince]]と同じパズルゲームができる。
######################
#do#.......#..o.o.#..#
#oo#.#K###.#j.#.#.#h.#
#.@..#..H.....hh#.#od#
#oo..H..####k#d...#.o#
#######J#o.#..o#.##.o#
#dd##oo.#o.###ddo#...#
#.Od###.#.o####do#..d#
#.o.H........#####o..#
#.oo##..#O....O.O.O.o#
#d..#ooooO.o#...O....#
######################
./rince rince.data3
は倉庫番のステージ11、./rince rince.data4
はステージ13。
. ####
#### # #
### o###m #
## m #
## m mm## ##
# #m## #
# # m mm # ###
# m # # m #####
#### # mm # #
#### ## m #
#. ### ########
#.. ..# ####
#...#.#
#.....#
#######
解説
データファイルはセルオートマトンのルールを書いたもので、これによってゲームをエンコードしているとのこと。
コードは、先頭にシューティングのマップがあることを除けば、細かい難読化テクニックが中心で、わりと普通に見える。
#define I )malloc(sizeof(
として(j*I*a(Q--,--Q))
と書くのは小洒落ててちょっと面白かった。
現代で動かすには2点の修正が必要だった。
SGTTY
という型は現代では消滅しているようなので単にint
に置き換えた。
- rince.hintによると、
select
の挙動にSunOSとLinuxで互換性の問題があるようで、hintにあるとおりに修正した。
パッチ
パッチをダウンロード