您的位置 首页 java

程序员用Java实现推箱子算法,网友:这绝对不是一般的推箱子!

推箱子 游戏》是一款益智游戏,游戏目标是搬运工自己来找出到某个位置的最短路径,然后自己走过去。

​地图是这个游戏中非常重要的一部分,关于地图的存储,因为有一部分元素是可以重叠放置的,所以用了一个类似二进制的存储方式,就是4种物件分别有是否存在状态,使得用一个数字可以表示多个物件。

小编整理了一份java学习资料,私信回复【01】,获取源码。

1、是否存在目的地

2、是否存在箱子

3、是否存在人

4、是否存在墙壁

这样就解决了地图存储问题。使用 short [][]就存下了。

一、在不移动箱子的情况下其实无论人在哪里对于map来说是没有影响的,所以填充可移动区域可以让需要存储地图的数量有一个大的下降。例如之前那副地图:

8888888

8103018

8002008

8320238

8012108

8403008

8888888

经过变换之后就成了:

8888888

8103018

8002008

8320238

8452108

8443008

8888888

这样就把存储量缩小了四分之三。至于怎样填充,相信对 图论 有一点了解的都可以随便想出方案,我这里用的是BFS。

话不多说,实现代码如下:

​二、关于箱子的移动方式,直接用整幅地图的BFS搜索会比较靠谱。因为可以确定箱子的位置和在不移动箱子情况下人能到的位置,所以箱子可移动的位置也就能确定了,再加上之前存储的所有箱子的位置,这样就能计算出箱子每动作一次地图能更新的情况,一次BFS就是每个箱子往不同可移动位置进行一次移动。

​三、结束搜索分为三种情况:

所有目的地被填充完毕——-计算完成退出程序。

有箱子被推到角落并且不是在目的地——–说明不是正确的路线,搜索不再往下走。

当前地图在以前已经被达成过——–说明是重复路线,搜索不再往下走。

四、关于地图的存储,用的是hashSet,并重写了equals和 hashCode 的实现,用来自动判断地图是否重复。(以此保证不重复)

​最后完成地图显示问题,每个节点存储自己父亲节点的地址,当节点发现自己已经完成之后根据地址向上查找直到树顶。

文章来源:智云一二三科技

文章标题:程序员用Java实现推箱子算法,网友:这绝对不是一般的推箱子!

文章地址:https://www.zhihuclub.com/198630.shtml

关于作者: 智云科技

热门文章

网站地图