Java 编写推箱子报告_Java推箱子怎么写啊?
展開全部
這是我之前寫的一篇java實現(xiàn)推箱子算法的文章,簡單的給你看一下:
《推箱子游戲》是一款益智32313133353236313431303231363533e59b9ee7ad9431333431353364游戲,游戲目標是搬運工自己來找出到某個位置的最短路徑,然后自己走過去。
地圖是這個游戲中非常重要的一部分,關于地圖的存儲,因為有一部分元素是可以重疊放置的,所以用了一個類似二進制的存儲方式,就是4種物件分別有是否存在狀態(tài),使得用一個數(shù)字可以表示多個物件。
1、是否存在目的地
2、是否存在箱子
3、是否存在人
4、是否存在墻壁
這樣就解決了地圖存儲問題。使用short[][]就存下了。
一、在不移動箱子的情況下其實無論人在哪里對于map來說是沒有影響的,所以填充可移動區(qū)域可以讓需要存儲地圖的數(shù)量有一個大的下降。例如之前那副地圖:
8888888
8103018
8002008
8320238
8012108
8403008
8888888
經(jīng)過變換之后就成了:
8888888
8103018
8002008
8320238
8452108
8443008
8888888
這樣就把存儲量縮小了四分之三。至于怎樣填充,相信對圖論有一點了解的都可以隨便想出方案,我這里用的是BFS。
話不多說,實現(xiàn)代碼如下:
二、關于箱子的移動方式,直接用整幅地圖的BFS搜索會比較靠譜。因為可以確定箱子的位置和在不移動箱子情況下人能到的位置,所以箱子可移動的位置也就能確定了,再加上之前存儲的所有箱子的位置,這樣就能計算出箱子每動作一次地圖能更新的情況,一次BFS就是每個箱子往不同可移動位置進行一次移動。
三、結束搜索分為三種情況:
所有目的地被填充完畢-------計算完成退出程序。
有箱子被推到角落并且不是在目的地--------說明不是正確的路線,搜索不再往下走。
當前地圖在以前已經(jīng)被達成過--------說明是重復路線,搜索不再往下走。
四、關于地圖的存儲,用的是hashSet,并重寫了equals和hashCode的實現(xiàn),用來自動判斷地圖是否重復。(以此保證不重復)
最后完成地圖顯示問題,每個節(jié)點存儲自己父親節(jié)點的地址,當節(jié)點發(fā)現(xiàn)自己已經(jīng)完成之后根據(jù)地址向上查找直到樹頂,望采納,謝謝。
總結
以上是生活随笔為你收集整理的Java 编写推箱子报告_Java推箱子怎么写啊?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [云炬学英语]每日一句2020.9.5
- 下一篇: [云炬小程序实战笔记] 第1章 全新版: