Java推箱子怎么写啊?

最好是代码,I是箱子,o是洞,k是钥匙,d是门,门我会开,但是怎么推箱子?... 最好是代码,I是箱子,o是洞,k是钥匙,d是门,门我会开,但是怎么推箱子? 展开
 我来答
米拔0g4
2019-05-25 · TA获得超过757个赞
知道小有建树答主
回答量:307
采纳率:83%
帮助的人:35.2万
展开全部

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

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

地图是这个游戏中非常重要的一部分,关于地图的存储,因为有一部分元素是可以重叠放置的,所以用了一个类似二进制的存储方式,就是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的实现,用来自动判断地图是否重复。(以此保证不重复)

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

fuyh16
2019-05-25 · TA获得超过222个赞
知道小有建树答主
回答量:462
采纳率:82%
帮助的人:117万
展开全部
真的没看懂,如果你是认真的想解决这个问题,请把问题描述的清晰一些,不要有错字,写完了自己认真读一遍问题,想想第一遍读的人能不能看懂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友77382c6
2019-05-25 · TA获得超过320个赞
知道答主
回答量:958
采纳率:37%
帮助的人:71.7万
展开全部
最好是代码,I是箱子,o是洞,k是钥匙,d是门,门我会开,但是怎么推箱子?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浩星烨煜R8
2019-05-25 · 贡献了超过388个回答
知道答主
回答量:388
采纳率:0%
帮助的人:26.6万
展开全部
😓😓😓😓😓
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式