我正在使用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? –