我正在使用Pygame在Python中進行冒險遊戲。我的主要問題是我如何定義房間的邊界,讓主角走路時不會碰到邊界。可悲的是,我從來沒有研究算法,所以我不知道如何計算路徑。我知道這個問題相當普遍,很難回答,但正確方向的一點非常值得讚賞。謝謝!冒險遊戲 - 在房間內走動
回答
我建議您閱讀A*搜索算法,因爲它是遊戲中常用的路徑問題。
如果這個遊戲是二維(或2.5),我建議你使用瓷磚系統作爲檢查碰撞會更容易。網上有大量的信息可以讓你開始使用這些。
非常感謝。我目前正在尋找這個http://www.pygame.org/project-astar-195-.html – kallepersson
不幸的是,我從來沒有研究算法,所以我不知道如何計算路徑。
在你開始編寫遊戲之前,你應該對自己進行教育。這需要在開始時花費更多的精力,但會爲您節省很多時間。
謝謝!我目前正在研究A *算法。 – kallepersson
我對pygame並不熟悉,但許多應用程序通常使用bounding volumes來定義某個區域的邊緣。這個想法是,當你的角色走路時,你會檢查角色的體積是否與牆體的體積相交。然後您可以調整速度或停止移動角色。使用不同的形狀來獲得光滑的牆壁,使角色不會卡在尖角邊緣。
這些概念可以用於需要快速邊界和邊界檢測的任何應用。
有兩個簡單的方法來定義適合這種遊戲的邊界。
更簡單的方法是將您的區域劃分爲網格,並使用2D數組來跟蹤網格中的哪些方格是可通過的。通常情況下,這個數組也存儲你的地圖信息,所以在每個位置都有一個數字,表示該廣場是否包含草地或牆壁或道路或山脈等(以及因此顯示的圖片)。爲了給你一個粗略的畫面:
######
#.# #
# ## #
# #
######
一個更復雜的方法,如果你想有一個排序的「迷宮」看這是必要的,以薄壁,是使用二維數組,表示是否有網格方塊之間的垂直壁,以及網格方塊之間是否有水平壁。粗略圖像(它看起來ASCII中的拉伸,但希望你會得到點):
- - - -
| | |
- -
| |
- - - -
接下來的事情來決定是什麼方向你的性格可能在移動(上/下/左/右是最容易,但對角線太難得多)。然後,該計劃基本上必須「從精神上」探索該地區,從目前的位置開始,希望能夠通過目的地。
一個簡單的搜索,很容易實現上/下/左/右,並會找到你的最短路徑,如果有的話,被稱爲Breadth-First search。下面是一些僞代碼:
queue = new Queue #just a simple first-in-first-out
queue.push(startNode)
while not queue.empty():
exploreNode = queue.pop()
if isWalkable(exploreNode): #this doesn't work if you use
#"thin walls". The check must go
#where the pushes are instead
if isTarget(exploreNode):
#success!!!
else:
#push all neighbours
queue.push(exploreNode.up)
queue.push(exploreNode.down)
queue.push(exploreNode.left)
queue.push(exploreNode.right)
這種算法是針對大型地圖慢,但是它可以把你用一些圖搜索和尋路的概念。一旦你確認它可以正常工作,你可以嘗試用A *或類似的東西替換它,這應該在更短的時間內得到相同的結果!
A *和許多其他搜索算法使用優先隊列而不是FIFO隊列。這可以讓他們首先考慮「更可能」的路徑,但如果事實證明更直接的路徑被阻止,則繞過迂迴路徑。
感謝LOT這個徹底的描述。它幫助我更好地理解算法!我可能正在爲A *算法做出決定,因爲它爲我做了大部分的思考:) 儘管我使用的是當前實現(http:// www。 pygame.org/project-AStar-195-.html)使用1024x768的地圖非常緩慢。也許我應該讓每個地圖塊更大,並減少總塊數。 – kallepersson
爲什麼你的地圖如此之大? 1像素的圖塊太小了。如果你希望你的遊戲世界是「手繪的」,而不是從瓷磚上畫的,一個合理的解決方案是繪製一張(不可見的)可通過/不可通過區域的地圖,在這張地圖上的每個正方形都有4x4像素。您還可以通過各種方式使A *變得更加「智能」,例如區分「本地」旅行和「全球」旅行。或者,您可以限制A *願意看多遠,否則會強制用戶點擊更容易進入的地方。 – Artelius
是的,1像素貼圖太小。爲了澄清,我正在使我的地圖適合2.5D視角的世界(例如猴島3)。即使如此,你是對的,我不需要1px的瓷磚。 4甚至10個像素的瓷磚就足夠了。瓷磚將不可見。謝謝你的建議。 – kallepersson
- 1. 檢查冒險遊戲中的空房間?
- 2. 冒險類基於文本的冒險遊戲
- 3. 在python中製作冒險遊戲
- 4. scala基於文本的冒險遊戲
- 5. 文本冒險遊戲收到AttributeError
- 6. 基於文本的冒險遊戲
- 7. Python文本冒險遊戲不工作
- 8. 爲文字冒險遊戲設計和建築忠告
- 9. 在SIMPLE冒險遊戲名單中遇到問題
- 10. Python文本冒險 - 與遊戲世界互動的物品
- 11. 冒險遊戲構造方法問題Java
- 12. 用PyGame設計冒險遊戲的正確方法是什麼?
- 13. 在Javascript畫布中簡單尋路 - 想想冒險遊戲
- 14. Java中基於文本的冒險遊戲的庫存系統
- 15. 滾動網絡冒險遊戲中的敘述文字
- 16. 如何在我的冒險遊戲中分配玩家
- 17. C++錯誤:=!不在文本冒險遊戲中編譯
- 18. JAVA:2D遊戲冒險。碰撞檢測問題
- 19. 基於選擇的冒險遊戲的數據結構?
- 20. 如何讓房間遊戲逃生
- 21. 創建android冒險遊戲的好方法是什麼?
- 22. 基於文本的冒險遊戲的庫存問題蟒蛇
- 23. 精靈套件中的接口冒險遊戲
- 24. (Java)文本冒險:如果輸入輸入,關閉遊戲
- 25. Python中的參數錯誤 - 文本冒險遊戲
- 26. 用戶提示選擇你自己的冒險遊戲
- 27. 文本冒險遊戲戰鬥系統的方法
- 28. 關於基於類的文本冒險遊戲設計的查詢。
- 29. 創建一個面向對象的非圖形/文本冒險遊戲
- 30. 文本冒險遊戲是否真的需要數百種不同的活動?
你是否在控制自己的主角?或者它是一種自動移動的AI? –