--------------------------------------------------------- 通称“明治大プログラム”「Solving Sokoban」 patch level 5 --------------------------------------------------------- [オリジナル] 作者: 上野篤、中山康、疋田輝雄 日付: 1994.1.31 --------------------------------------------------------- [パッチ] 貢献者:高橋謙一郎、平松真里、村瀬芳生 (五十音順) 責任者:村瀬芳生 日付: 1997.10.18 / 1998.1.31 --------------------------------------------------------- === 1 どんなファイルなのか solving-sokoban.PL5.tgz は、オリジナルのプログラムに パッチがあたったものです。新たにパッチをあてる必要は ありません。UNIX上で動作を確認しています。 UNIX で tar して gzip して、ftpの binaryモードで Windows 95 に移して、ファイル名の最後を tar.gz から tgz に変更しました。 よって、展開すると改行コードは LF です。 Windows で使う場合、改行コードを CR+LF にする必要があります。 Winzip で展開するならば、Options → Configuration で 「TAR File Smart CR/LF Conversion」をチェックしておけば、 改行コード変換を自動的にしてくれます。バイナリファイルは 入っていないので、誤変換の心配はありません。この方法が いちばん楽でしょう。 Winzip の使えない方は変換ツールや「秀丸エディタ」などを 利用して変換する必要があります。あるいはネットスケイプで 開いて見るとか。 === 2 変更点の説明 主な変更点は以下の通りです。 (1) キャラクタの形式をXSokoban形式に変更。 (2) 初期配置でプレイヤとゴールが重なっていても良いようにした。 (3) soukobestf.c の open_out_sub() での記述ミス(`='と`+='の 間違い)を修正。 (4) Makefile に clean と install の記述を入れた。 (5) 閉路形成荷物数が総荷物数の半分以上なら「袋小路探索をしない」 ようにした。 (6) open_cell, close_cell のあふれをチェックするようにした。 (7) 荷物数の上限をチェックするようにした。また、上限を40から90に増やした。 これによって倉庫番リベンジの305面でコアダンプしなくなった。 (8) soukobesstf.c の is_to_start(), get_goal_p_sub() を修正。 これによって elisp版 4面でコアダンプしなくなった。 (9) initialize() 内での hash_head[] の初期化を修正。 これによってSunOS5.5.1 で動作するようになった。 (10) fgetc() での返り値が char型の変数に代入されていたのを int型に修正。 これによって AIX1 で動作するようになった。 (11) main.c の movable_bags[] の大きさの間違いを修正。 (12) (11)に伴い soukomove.c の mb_sub[] の大きさを修正。 (13) value() による評価値の出し方を修正。解いた状態で評価値 MAXPOINT、 それ以外ではそれ未満になるようにした。 (14) soukosim4.c の movable_bags_local[] の大きさを修正。 倉庫番のフリーソフトとしてUNIXでは `XSokoban' や `sokoban.el' など、 Macintosh では 'Sokoban for the Macintosh` など、たくさんあります。 特に今挙げた3つは、マップデータに同じキャラクタを使用しています。 === 3 実行方法 % solve [-s] filename1 [filename2] ただしfilename1は入力ファイル、filename2は結果を書き込むファイルです。 filename2を省略すると、端末に結果が出力されます。 オプション`-s'を指定すると、解の出力時に動かした荷物の座標のみが出力され、 何も指定しないと、解答の様子が後述するキャラクタで出力されます。 === 4 入力ファイル キャラクタの対応は以下の様になっています。 これは XSokoban などと互換があります。 ------------------------------ ブロック # ゴール . 荷物 $ ゴールと荷物 * プレイヤ @ プレイヤとゴール + スペース (空白) ------------------------------ 以下はマップのファイルの例です。(ファイル"map1")。 ######### ## @...## ## #### ###$ # # #$# # # $ # # # ##### ######### このように、マップは長方形である必要があります。余計な空白は ブロックで埋めなければなりません。 === end of file