推箱子软件简史

作者:杨超

本文地址:http://sokoban.ws/blog/?p=384

三年前我在魔方吧论坛发过《推箱子简史》的贴子。之后我又千方百计的尝试运行了更多的推箱子软件,涉及的平台包括 Linux 和 Mac 系统、功能手机、智能手机和数字电视机顶盒等等,所以我打算重新梳理一下推箱子的历史,主要着重在软件的发展。

一、源于日本

1981春,今林宏行编写出世界上第一个推箱子程序“仓库番”,并于1982年商业发行《仓库番》[1]。这个版本有20关,其中只有前10关是标准的推箱子关卡[2]。后来84年发行《仓库番2》,89和91年分别发行《仓库番Perfect》和《仓库番Revenge》。日本国内发行的各种版本很多,但是有国际影响的主要是这几款,因为被移植到其他国家了。

推箱子诞生在个人电脑迅猛发展的初期,最初的《仓库番》是运行在 NEC PC-8801系统。

二、传遍世界

推箱子最早是由 Spectrum Holobyte 公司获得授权把“仓库番”移植到 DOS 平台在欧美地区发行。Spectrum Holobyte 发行的名为《Soko-Ban》的软件主要基于日本的《仓库番2》,有50关。这款软件在美国的发行面市时间估计在1988年,因为有两本杂志,《Computer Gaming World》和《Dragon》,都是在这一年介绍了《Soko-Ban》[3,4]。

而最早把推箱子介绍到中国的,应该是台湾的大宇公司了。很多老推箱子迷都是最先接触到大宇1990年发行的 DOS 版《仓库世家精彩篇》。这是一款带颜色的游戏,就是过几关出一张照片那种。后来95年大宇又正式代理发行了《仓库番之史上完美篇》和《仓库番之玩家复仇篇》[5]。

三、自由时代

最初的推箱子游戏主要以游戏公司商业发行推广的形式出现。但最迟从1992年起,推箱子软件逐渐地由个人开发的自由软件、共享软件和免费软件等占主导地位。主要原因我想有这么几个:推箱子规则简单但又让人上瘾,个人程序员有能力又有强烈的愿望编写自己的推箱子程序;而游戏公司则更在乎开发和发行大型的更能赚钱游戏。

独立开发者们基本形成了一个跨越推箱子软件的较弱的标准:xsb 关卡格式和 lurd 答案格式,有利于推箱子的交流和发展。也是这些独立开发者们把推箱子软件的功能发展到极致。

这一时期比较有影响的推箱子软件有以下一些,这些程序大都可以追溯到2000年左右或更早。

Unix/Linux 平台

XSokoban: Andrew C. Myers 编写的 XSokoban 是一个开源软件,最早的Unix/Linux推箱子之一。已经具有智能路径搜索鼠标操作,广泛使用的xsb格式很有可能就是XSokoban最先引入的。但97年后就停止开发了,程序易用性还欠缺。我之前写过一篇博文介绍 XSokoban

Mac 平台

Sokoban for Macintosh: 我试过的Mac平台上最好的推箱子。但作者 Scott Lindhurst 没有完全地移植到 Mac OS X,导致Mac平台上目前我没有发现特别好的推箱子软件。

Windows 平台

BoxWorld: 1992年 Jeng-Long Liang 写的在 Windows 3.1 运行的 BoxWorld ,有100关。最早的Windows版推箱子之一。

SokoFun (1995): 德国人开发的共享软件,设计了大量优秀原创关卡。

WinSoko: WinSoko 也是一个比较有影响的版本,作者 Robert Vasicek 来自斯洛伐克。其Windows 3.1版本从1995年就开始了,2002年起基本停止更新。WinSoko 的关卡格式在很长一段时间内还被后来的程序所兼容。国内曾经比较有名的一款由 20603 发布的推箱子软件“仓库大师”就是基于 WinSoko 内核。

SokoMind: 免费软件,1996年起由Gerald Holler 写得 Sokoban97, 后来改名 SokoMind。SokoMind 有关卡作者 Kevin 的支持,在其网站 http://www.sokomind.de 独家发布这些原创关卡。不过 SokoMind 已经目前停止更新了。

老封推箱子(supersoko,freesoko):国产推箱子的优秀代表,国内很多推箱子迷都是用它。

Sokoban YASC: 开源软件,作者是丹麦人 Brian Damgaard 。这是目前综合性能最好的推箱子游戏,它集成的关卡编辑,求解和优化等功能是其他程序无法比美的。

YSokoban: 由保加利亚人 George Petrov 开发。YSokoban 有两大特色:强大的路径搜索和快捷的答案管理,就游戏功能来说是有史以来最强的。本站提供 YSokoban 安装包下载

Windows 平台上值得一提的还有:Sokoban for Windows, Sokoban++, Sokofan等等。Windows 下的优秀推箱子程序极大丰富,和其垄断地位吻合。

Java 平台

JSoko:德国人 Matthias Meger 的开源软件,基于 Java 技术,可在多个操作系统运行。

以上推箱子软件还在维护更新中的只有 Sokoban YASC, YSokoban 和 JSoko 。

我的介绍基本只限于个人电脑系统,因为只有通用的个人电脑上的推箱子软件才实现了开放性(可自由导入导出关卡答案)和鼠标操作(智能搜索路径)等基本功能。本节介绍的推箱子软件除了BoxWorld外都或多或少地具备了上述两大基本功能。其他系统如电子词典、功能手机、有线电视机顶盒甚至任天堂的掌上游戏机3DS等等上的推箱子程序,极大的推广了推箱子游戏,但由于这些系统过于封闭和局限,它们的推箱子程序从功能上乏善可陈。如NDS和3DS上有一款推箱子游戏,利用了游戏机的双屏,上屏3D展示,下屏为2D俯视图,但除此之外,就没有其他特色了。

四、展望未来

在 Windows 称霸了近20年之后,如今的个人电脑市场正发生着激烈的变化。以苹果的 iPhone 和 iPad 和 Google 的 Android 为代表的触摸屏智能手机和平板电脑有可能改变人们使用电脑的习惯。基于 Web 的应用的发展使得操作系统变得不那么重要了。Windows 8 引入的 Metro 界面和新的 WinRT 编程接口让人们对微软是否还继续支持兼容 Win32 产生担忧。

于是我不得不思考这样一个问题:随着电脑技术和产业的不断发展,我们如何能够继续拥有开放的优秀推箱子软件?推箱子软件必须不断地在新的平台被重写吗?

下面介绍几个也许能够代表未来的推箱子软件。

Android 平台

Soko++: 目前智能手机和平板电脑主要由苹果的 iOS 和 Google 的 Android 两大系统竞争。有意思的是,推箱子软件作者似乎偏爱更开放一些的 Android 系统。Windows 软件 Sokoban++ 的作者荷兰人Joris Wit 就在 Android 上发布了他的新软件 Soko++ ,这是我目前见到的最好触摸屏推箱子,本站提供镜像下载。前面提到过的 Sokoban for Windows 的作者也开发了一个 Sokoban for Android。苹果的 iOS 系统上我还没有见到能和 Soko++ 媲美的推箱子软件。

Linux 平台

USokoban: Linux 在桌面系统一直没有太大作为,但最近后起的 Ubuntu 发行版在把 Linux 推向大众方面还是小有成效的。我过去两年以使用 Ubuntu 10.04 系统为主。于是我用 C 写了一个基于 GTK+ 的自由软件 USokoban 。USokoban具有非常丰富的功能:支持标准的XSB关卡格式,可以直接复制或粘贴关卡和答案,自动保存最佳答案,可以更换皮肤,支持有智能路径搜索的鼠标操作,带有简单求解功能等等。

Web 平台 (JavaScript+HTML5)

SokoPlayer HTML5: Web 技术的发展使得 Web 应用丝毫不逊色于本地应用,并且有跨机器跨平台的特点。利用了 HTML5 的 canvas 等新的技术,我用 JavaScript 编写了一个在浏览器里面运行的 SokoPlayer HTML5 ,具有较为完善的游戏和关卡编辑功能。

参考文献

[1] 今林宏行,《ごあいさつ》,http://www.sokoban.jp/greeting.html 中文翻译: http://bbs.mf8-china.com/forum.php?mod=viewthread&tid=31783

[2] Edward Hordern,Chapter 10, Sliding Piece Puzzles (Recreations in Mathematics, No 4) (Hardcover),Oxford University Press ,1986 http://bbs.mf8-china.com/forum.php?mod=viewthread&tid=28792

[3] Wagner, Roy (May 1988). “Puzzling Encounters”. Computer Gaming World: 42–43.

[4] Lesser, Hartley, Patricia, and Kirk (April 1988). “The Role of Computers”. Dragon (132): 80–85.

[5] 大宇资讯股份有限公司,历年作品,http://www.softstar.com.tw/about/About/about_04.aspx

此条目发表在 推箱子 分类目录。将固定链接加入收藏夹。