月归档:二月 2012

推箱子关卡文件和正则表达式

作者:杨超 本文地址:http://sokoban.ws/blog/?p=225 正则表达式(Regular Expressions)在编写计算机程序中有广泛和重要的作用。无论是编译器把源程序编译成可执行文件,还是浏览器把HTML文件渲染成可视化的页面,其中第一步都是在做类似一个的工作,那就是有一个通称为词法分析器(Lexer)的组成部分把源程序或是HTML文件分离成一个个最小的单位,称为单词(Token)。这一过程中,词法分析器所作的事情就是通过正则表达式的匹配,把单词逐一识别出来。 正则表达式的匹配有非常成熟的通用算法,很多时候并不需要手动编写。很多编译器或是浏览器(如 webkit )的词法分析器都用一个叫 flex 的程序自动生成的。使用 flex 程序,先把需要分析的词法用正则表达式写到一个.l文件中,然后 flex 程序根据.l文件的描述生成c文件。flex 程序也可以用来读取 XSB 格式的推箱子关卡文件。XSB 的基本格式可以参看这里的介绍。除了用 #@$*+. 等字符来表示推箱子关卡中的不同元素之外,很多关卡文件还在每个关卡后面用 Title, Author, Comment 等关键词来标识关卡的标题、作者和注释等信息。下面是一个例子: ######### # # # # #***# # ######### * * # ## # * * # ## … 继续阅读

发表在 推箱子, 编程 | 一条评论

XSokoban

作者:杨超 本文地址: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>选关。 … 继续阅读

发表在 推箱子 | 留下评论