作者:杨超
本文地址:http://sokoban.ws/blog/?p=217
今天成功编译并运行 XSokoban. XSokoban的下载地址:http://www.cs.cornell.edu/andru/xsokoban.html
XSokoban 是早期Unix/Linux下的一个开源的推箱子程序,93年发布3.0版,到97年3.3c版后停止更新,是比较有影响的推箱子程序之一,早在94年就实现了箱子的智能拖放。XSokoban的作者Andrew C. Myers现为康奈尔大学(Cornell University)计算机科学教授,这个程序是他在博士毕业之前的作品。XSokoban用X Window System (又称X11)来处理图像界面,故称XSokoban.
我是在Ubuntu 10.04下编译并运行XSokoban的。因为年代久远,README文件语焉不详,我还是颇费了一番功夫才把这14多年前的代码成功编译。现把其中一些细节记下来备忘。
1. 修改config.h文件并用命令 ./configure –with-CC=cc 生成 Makefile 。其中 config.h里面把WWW设为0,并设定路径(ROOTDIR),用户(OWNER)和密码(PASSWORD)等信息。可根据命令 ./configure –with-CC=cc的错误提示来修改。
(2013年3月23日补充:系统升级到Ubuntu 12.04后重新编译了一次XSokoban,这里直接运行./configure脚本生成 Makefile即可,默认用gcc编译。另config.h中的目录一定要正确设置,否则编译后也会因为路径不正确在运行中无法创建scores文件而退出)
2. 用命令make编译。编译前,我手动在Makefile里设定了头文件路径INCS = -I/usr/include/X11(头文件xpm.h的路径),并把score.c里的getline 函数重命名为 getline2(和系统函数有冲突)之后才编译成功。
3.运行时要用 ./xsokoban -u <user>来输入用户名,在输入密码正确后才能运行。第一次还要用./xsokoban -c来创建scores文件。用./xsokoban -<xx>选关。
之后才能看到下面的截图。XSokoban对关卡大小有限制,大概20 x 20左右。
最后说一下我为什么说XSokoban是一个比较重要和有影响的推箱子版本,主要有以下几个原因。
1.XSokoban 自带90关,是以screen.1到screen.90为文件名的文本文件储存,其中用来表示关卡的符号(如#表示墙,$表示箱子等)成为现在推箱子程序最广泛支持的标准。最典型的就是以xsb为扩展名的关卡文件。其他的如以txt或sok为扩展名的关卡文件也都是以XSB格式来记录关卡本身,只是元关卡的数据(即关卡题目,作者等)的格式有所不同。
2. XSokoban的90关并非原创,而是来自最早由日本Thinking Rabbit 发行的《仓库番》程序,但可能是由于XSokoban是自由软件的缘故,这90关常被用来作智能搜索算法的研究对象,和用来比较不同算法程序的优劣的参照。但是这90关其实并不难,目前最好的求解程序Sokoban Automatic Solver 在个人电脑上已经能解出其中的86关。