欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java 编写推箱子报告_Java推箱子怎么写啊?

发布时间:2025/3/15 java 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java 编写推箱子报告_Java推箱子怎么写啊? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

展开全部

这是我之前写的一篇java实现推箱子算法的文章,简单的给你看一下:

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

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

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 编写推箱子报告_Java推箱子怎么写啊?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。