migl 发表于 2009-5-11 13:21:29

【献丑】推箱子程序 FinalSokoban 脱盲教程 - 有图

试写一篇脱盲教程,以方便大家在电脑上单机玩推箱子游戏。
水平有限,不足之处,请大家斧正。

推箱子软件程序的种类多种多样,现以 FinalSokoban 为例进行说明。其它软件请参考使用。
Final Sokoban 只支持扩展名为 xsb 的文本格式文件。
请点击此处下载 Final Sokoban V0.17 ( 53.36KB ) 。
或在此网页进行下载。(  发三个本人写的推箱子程序  By: sokoban )

引用楼下 6#楼 的话:
原帖由 sokoban 于 2009-5-11 16:08 发表 http://bbs.mf8-china.com/images/common/back.gif
借此机会,我要指出 FinalSokoban 有不少 Bug。其中一个就是如果解法步数太长,大概10000步以上,程序会出错。
就本人目前使用的情况来看,还没遇到过"程序出错"。:lol

本篇构架为:
一、打开文件
二、进行游戏
三、编辑游戏
四、播放保存的解法
五、其它操作

一、打开文件
双击 FinalSokoban.exe 运行 FinalSokoban 程序。
直接点击“打开”按钮,或进行 File/Open 操作,从弹出的“打开”窗口中打开相应的游戏。


二、进行游戏
用键盘上的“↑”、“↓”、“←”、“→”按键控制人的走动,或者用鼠标直接点击人或者箱子的下一个位置。
游戏的目标就是使所有的“目的地”上都有“箱子”。

万一走错了,可以选择 Game/Undo “ F7 ”后退一步,或是 Game/Fast Undo “ Backspace ”后退到上一个箱子。
另外对应的还有 Game/Redo “ F8 ”前进一步,或是 Game/Fast Redo “ Enter ”前进到下一个箱子。
如果嫌“地图”太小,可以进行 File/32×32 操作,扩大“地图” 。

简要的界面说明:


步数:即 人 走的步数( 格数 )
推数:即 箱子 被 人 推动的格数
触数:即 接触箱子的次数
换数:即 换推箱子的次数

三、编辑游戏
进行 File/New 操作,可以自定义游戏。而 Mode/Edit 操作,可以修改现有的游戏。
编辑结束后,进行 File/Save as 操作,保存“****.xsb”文件(到相应的位置)。
由于箱子的目的地在 FinalSokoban软件 里显示成“浅坑”的样子,所以在描述上,我就用“坑”取代“目的地”。

下面,我们制作一个“士兵突围”系列推箱子游戏。
各按键的功能如下图所示。


士兵突围1
进行 File/New 操作,构造如图所示的“士兵突围1”地图。然后进行 File/Save as 操作保存。
( 我用的文件名是:士兵突围1.xsb )


士兵突围2
经过上述操作,文件夹里多了个“士兵突围1.xsb”。加载该游戏,先玩玩。:lol
是不是很简单地就过关了。不过瘾的话,我们可以修改“士兵突围1”,提高游戏难度。
加载游戏后,进行 Mode/Edit 操作,进入熟悉的编辑界面。
我们加点“墙”提高一下难度。( 要记得保存。 )


士兵突围3
同样的,还可以改成这个样子。


另外的,如果你在网络上看到的推箱子关卡是这个样子表示的:(这个是 士兵突围1 的文本格式文件的内容)
#########
#       #
# $...$ #
# .$$$. #
# .$@$. #
# .$$$. #
# $...$ #
#       #
#########
则可将整个文本内容复制后,粘贴到一个“新建 文本文档.txt”中保存,再将“.txt”改成“.xsb”,即可直接用软件加载并游戏。:victory:
* 注:空格的显示是个大问题。所以有时候复制网络上文本的后,需适当调整。

这里贴个 XSB格式的推箱子源文件 通用符号:

空白为地板
# 为墙壁
$ 为箱子
.为目标
@ 为推者
* 为箱子在目标
+ 为推者在目标

blank space for floor
# for walls
$ for boxes
. for targets
@ for the pusher
* for boxes on a target
+ for pusher on a target

四、播放保存的解法
每个推箱子游戏过关后,都会自动生成一个同名解法文件(即“****.xsb”对应生成一个“****.slt”文件),文件里是过关解法。
可以用“记事本”打开“****.slt”,得到图示的解法。


反过来,如果有人上传了解法,我们就可以用来“演示”过关“动画”。
比如,士兵突围1 的解法是:
LrUdRlDLuUrRdDrrddlUruuuuLullllDlddddR
将其复制,粘贴到一个"新建 文本文档.txt"中保存,再将".txt"改成".slt",接着将"**.xsb”与"****.slt”改成相同的文件名,并将这两个同名文件放在同一个文件夹里。
加载游戏后,进行 Mode/Replay 操作,进入“Replay Mode”模式,然后用键盘上的“ F7 ”、“ F8 ”、“ Backspace ”、“ Enter ”按键即可演示“高手”的过关过程。
另外的,要说明一件东西,就是过关后显示在右下角的那串数字。


这四个数字分别对应的是当前保存的相应最优解法的对应数字。
详细说明在本帖 9# 楼。

五、其它操作
功能比较多,就不详述了。大家可以自己试试。
希望大家看到这里后,在“单机玩推箱子”的软件程序操作上基本脱盲了,可以自由运用了。

[ 本帖最后由 migl 于 2009-5-14 12:37 编辑 ]

米女文物 发表于 2009-5-11 13:23:12

沙发~                                            ·

juventus66 发表于 2009-5-11 13:24:46

好教程,谢谢分享

kexin_xiao 发表于 2009-5-11 13:38:43

好贴!加分!增加大家的参与性!

migl 发表于 2009-5-11 14:24:19

回复 4# 的帖子

嘻嘻 :lol
培养潜在的客户群

sokoban 发表于 2009-5-11 16:08:25

借此机会,我要指出 FinalSokoban 有不少 Bug。其中一个就是如果解法步数太长,大概10000步以上,程序会出错。

zhenying 发表于 2009-5-11 20:07:10

回复 1# 的帖子

添一图:士兵突围4

#########
###    ##
# $...$##
# .$$$.##
# .$@$. #
##.$$$. #
##$...$ #
##   ####
#########

migl 发表于 2009-5-12 09:37:43

回复 7# 的帖子

我把它改得简单一点。( 士兵突围4-精简版 )
#########
###    ##
# $...$##
# .$$$. #
# .$@$. #
# .$$$. #
##$...$ #
##    ###
#########

[ 本帖最后由 migl 于 2009-5-12 09:40 编辑 ]

migl 发表于 2009-5-12 15:28:19

每次过关后,程序会自动生成一个".slt"文件来保存解法。
用 记事本 打开后,会看到"四段"字母代码,分别对应"步数"、"推数"、"触数"和"换数"的解法。
http://bbs.mf8-china.com/attachment.php?aid=49816&noupdate=yes

当你尝试用多种方式重复玩同一关卡并过关后,".slt"文件里相应的"步数"、"推数"、"触数"和"换数"将相应地自动保存新的最优解法。
换言之,如果你走出了"当前最优解法",则原来*数对应的那段落后解法[字母代码]将被取代。( 如果相同,则保留原来的解法。 )
过关后显示在右下角的四个数字对应的就是当前保存的相应最优解法的对应数字。
http://bbs.mf8-china.com/attachment.php?aid=49946&noupdate=yes

以"第一期"的"累积解法"为例。
字符太多,直接上传附件给大家用。  ( 615-138-67-33 )
[ 注意:演示时,同名的".xsb"与".slt"必须在同一个文件夹里,否则将无法演示。 ]

进行 Mode/Replay 操作,进入 " Replay Mode " (演示模式)。
按下列操作可以选择演示不同的"当前最优*数"的过关方法。 ( 默认为"By Move"演示。 )
Replay/By Move 按当前最优步数演示 615-154-80-57 的解法
Replay/By Push 按当前最优推数演示 673-138-69-45 的解法
Replay/By Line 按当前最优触数演示 707-138-67-34 的解法
Replay/By Box 按当前最优换数演示 719-144-68-33 的解法
演示操作:参见“ 四、播放游戏 ”。

[以上四种解法我是在清空所有解法后按顺序依次完成的。]
打开"200901.slt"文件后,大家将发现,第三段解法(最优触数)的步数比第二段解法(最优推数)的步数多,但是得到的推数一致。这印证了“如果相同,则保留原来的解法。”

如果不信,你可以照着我下面的解法走一遍,看看推数那段解法变了没有。
这个是 795-138-66-29 的解法:
dldddLLLLddllluuuuruuullllllllluuurruuurrDullddddrrruuLLruulldDDurrrddllLulldddrrrrrUUrDldlllldddddrruurrrrrruuullLLLLLrrUdrrrrrdd
dllllllddlluuuuluuuurrdrRddrrrrrrruulllDurrrddllLLLLLLrrrrrrdddlluRdrUUddllllllddlluuuuluuuurrdrrddrrrruurrrddlLLLLrrrdddlddddrrru
uLLrrddllluUUUluRdrUUddllllllddlluuuuluuuurrdrrdrrdrrRdddlllluRdllluRdrrddRluurrdDrrrddlllUUUdlluulllddlluuuuluuuurrdrrdrrdrrrdddL
LLLLulDDurrrrruruulllullullullddddrdddddrrruLuurrruLdrrruLdrddrrrrrrruulllluRdrrruruullldDldRRluuurrrddlDDrdLLLLLLLrrddllluUUdlluu
rurrdLLLddrrrrrrrrruuuLrruullldDldRRurDDrdLLLLLLLrrddllluUUdddrrrrrrrUUUUluluurrrddLLrruullldDldRRurDDrdLLLLLLLrrddllluUlluururrdL
DDlluuRurDuruulllullullullddddrdddddrruuurRRRurruullluuLLdrrdrruurrrddLLLuurrDLulDrdddlldlluRdllluRdldddlluuuuuluuuurrurrrDururrdL
LLLLruulldDrruL
这个解法是按"138推"的方式将相应的箱子一次推到位,而不是适当地合并相同路径。所以"换数"很少,"步数"很多。

实践证明,第二段解法并没有改变。但是第四段和第三段同时"更新"。

[ 本帖最后由 migl 于 2009-5-13 11:22 编辑 ]

migl 发表于 2009-5-13 11:20:28

回复 6# 的帖子

挺好用的。
不知道还能不能再优化……
页: [1] 2
查看完整版本: 【献丑】推箱子程序 FinalSokoban 脱盲教程 - 有图