Rules Current Competition Submit a solution Submission table - ALL Submission table - Main Submission table - Ext Submission table - Ext2 Submission table - Ext3 Competition results Hall of Fame Past Competitions About
比赛规则 本期比赛关卡 提交答案 提交列表(全部) 提交列表 - 1 提交列表 - 2 提交列表 - 3 提交列表 - 4 比赛结果 荣誉殿堂 往期比赛 比赛简介 比赛诗选
歪推箱子 推箱子加加 睿斗推箱子 推箱快手(安卓版) 推箱快手(Windows) SokoPlayer SokoPlayer HTML5 USokoban [Linux] SokoFind LURD2XSB 推箱子工具 [Utilities] 推箱子变种 [Variants]
关卡平台 sokoban.org 字母表 [alphabet] 十二生肖 [zodiac] 2012精选 [bestof2012] 2013精选 [bestof2013] 关卡答案
MF8论坛推箱子版 QQ群:92017135
XSB2MF8 [中文] XSB2MF8 [English] XSB2MF8 [sokojava] 关卡旋转工具 LURD2XSB工具 LURD转换工具 推箱子GIF动画制作教程 [skyivben] XSB2image [skyivben] image2XSB
推箱子常见问答 [FAQ] 推箱子格式 [XSB & Lurd] 推箱子基本概念:空位 推箱子游戏中半位空间的奇偶属性与磁铁效应 推箱子新手之路 “信以为真”关卡诞生记 推箱子GIF动画制作教程 逆推教程 推箱子文档下载
SokoPlayer HTML5 SokoPlayer JavaApplet USokoban [Linux] sokoban.py Sokoban.WS Tools SokoFind SokoLines HTML5
推箱子常见问答 [FAQ] 关于推箱子 [XSB & Lurd] 推箱子文档下载 关于比赛 墙纸下载 [Wallpaper] 友情链接 [Links] 推箱子博客 [Blog] Credits

带你去“穿越”

策划:anian
执笔:愉翁
顾问:麦英

网站发布时间:2021-1-13

几年前,无意间读到一本关于“穿越”的小说——《极品家丁》,之后,便一发而不可收拾,《最强弃少》、《仙逆》等等,一本一本,不知多少,读的我都已经坚信真的有“穿越”了,更对宇宙的神秘充满了好奇。

所以,当听到推箱大佬们也在不停的念叨“穿越”之时,我立马明白了是怎么回事,在求教了杨超教授后,信誓旦旦的把“在线推箱子”的相关代码移植到了“推箱快手”,让“推箱快手”耳目一新。

那么,推箱子是怎么“穿越”的呢?让我们一起来探究一番吧。

上面的关卡图没有任何实战意义,它只是我随意画出的例子,在“点推”世界(关于“点推”,想必不用在这里多做解释的吧,若不明白,请您到“贴吧”或推箱子群里问一声,相信您会得到许多人的帮助)里,当我们点击一下“人”,程序就会给出“人”的可达位置的提示,左图是没有开启“穿越”功能的情况,右图是开启后的情况。 白色的圆点,是在告诉我们,“人”在不需要穿越的情况下,可以随意活动的范围,而右侧黑色的小方块,则提示我们,这些地方是“人”通过一个小小的“穿越”能够达到的地方,而那个画上了黑色小圆点的“箱子”,则是提示我们,这个箱子就是“穿越点”。

您看到了吧,左图中,“人”只能在左侧房间活动,右侧的房间被一个“箱子”阻挡住了。右图因为开启了“穿越”,“人”的活动范围一下子就增加了许多。

通过一个小小的“穿越”动作,就增加了这么多的活动空间,这不是有点蒙蒙的酸爽吗?那是当然的了,当下,很多优秀的推箱子程序都支持了这一功能,“推箱快手”就是其中之一。

那么,这种类似“穿越”的功能是怎么实现的呢?请您继续往下看。

看右图的提示,有人不禁会问,“人”怎么就能够跑到箱子的右边呢?箱子不是拦着路呢吗?是的,“穿越”也是要求“人”移动位置后,关卡的整体“样子”不能改变,即在保持“箱子都没动”的情况下,“人”到达了箱子的右侧。这怎么可能?其实,也难怪您不相信,我自己也不相信! 因为,若“箱子不动”,“人”是绝对不可能达到箱子的右侧的,而为什么我又说可以呢?其实,这仅仅是一个概念上的转换而已,我前面说的“箱子不动”并不是真正意义上的不动,它仅仅是一个“箱子未动”的假象,是不是越听越糊涂了?没关系,下面用几个图来演示一下我所说的“箱子不动”的含义:

“图1”是原始状态,请记住“人”和箱子的位置,“图2”是把箱子向右推了一格,“图3”是告诉我们,此时让“人”沿着箭头移动,就可以达到“图4”,而达到“图4”后,我们若是再向左推一下箱子呢,会不会看到“图5”的情形?而这时,“人”不是已经到了箱子的右侧,而“箱子好像是没有动过的样子”呢?

此时,再看看“图1”和“图5”,这不就是“箱子未动”,而“人”从箱子的左侧到了右侧吗?对,这就是推箱子游戏中所谓的“穿越”,您明白了吗?

推箱子游戏中所谓的“穿越”,就是关卡中的所有箱子都“好像未动”,而“人”却到了常规方法不能到达的地方。

下面,让我们用几幅图例。了解一下更多的“穿越”情形:

上面两图中的“穿越”,“推箱快手”都能够支持,“推箱快手”支持的穿越情形,是被穿越的“箱子”先沿着某条“直线”推动,再沿着这条“直线”推回原位,类似情形太多,不必一一列举。

而下面几种复杂的情形的“穿越”,“推箱快手”就不再支持了。

左图的“穿越”箱子需要拐弯,右图的“穿越”包含了另一个“穿越”。等等,还有不少更复杂的情形,“推箱快手”也没有提供支持,不支持的原因是,穿越算法会增加“路径计算”(计算“人”或箱子被点击后可以达到的位置)的时间,当关卡比较大的时候,即使关卡里面没有需要“穿越”的情形,程序也会去检查是否可以“穿越”,这时,“路径计算”就会造成变得很慢很慢。

庆幸的是,“推箱快手”在计算“箱子”的可达位置时,也支持“穿越”。

正当我“穿越”附身,一边推箱子一边爽歪歪的时候,anian先生说,“穿越”这个想法是西北天狼先建议的,哇,大神就是大神,让我们为天狼大神点赞吧!

___#################____
___#---##--#---##--#____
___#--$----#--$----#____
#####-###$-##-###$-#____
#---#$-##-###$-##-####__
#--$---#--$----#--$--#__
##-##--#---##--#-@-#-#__
##-#################-###
#--$-$-$-$-$-$-$-$-$-$-#
#-...................--#
########################
Author: 西北天狼


本网页创建于2021年1月13日