gpt4 book ai didi

python - python中的碰撞检测算法

转载 作者:行者123 更新时间:2023-11-28 18:46:03 31 4
gpt4 key购买 nike

我正在写一个小游戏,包括一个迷宫、一个玩家角色和一定数量的敌人。 PC 和敌人都属于一个给定的类,他们根据我指定的标准每隔几毫秒更新一次 Action 。 (所有这些限制都是作业的一部分)。现在,我正在尝试编写一个标准,以便敌人和 PC 都不会移动到被迷宫墙占据的正方形。为此,我使用了以下方法(所有这些都在我制作的 Game 类中):

def isNotWall(self,x,y):

self.wallXI = 0
self.wallXF = 0
self.wallYI = 0
self.wallYF = 0
for wall in self.wallList:
self.wallXI = wall[0]*self.grid + 1
self.wallXF = (wall[0]+1)*self.grid
self.wallYI = wall[1]*self.grid + 1
self.wallYF = (wall[1]+1)*self.grid
if self.wallXI < x < self.wallXF and self.wallYI < y < self.wallYF:
return False


return True

其中 wallList 是一个列表,其中包含数组坐标中每个墙的 x 和 y 坐标,grid 是每个网格正方形的大小(在本例中为 32 像素)。

现在,举例说明我是如何实现的:

if snake[1] > self.heroe_x:
if self.isNotWall(snake[1] - 30,snake[2]):
snake[1] = snake[1] - 30 * segundos

其中 snake[1] 是以像素为单位的 x 坐标,snake[2] 是 y,segundos 是经过了多少毫秒,以便敌人移动适当的像素数。

据此,如果蛇(和角色)在移动结束时的位置被墙占据,则它们不应朝某个方向移动。然而,这只是部分有效,行为不稳定,一些墙只能在一个方向上起作用,而且角色经常无缘无故地卡在墙内或停止不动。

如果您能帮助修复这些缺陷,我们将不胜感激。我意识到这个问题不是很简洁,但由于我对这门语言缺乏经验,我想不出一种使问题更具体的方法,而且以前的答案对我没有帮助。提前致谢!

最佳答案

如果只看最终位置,那蛇挡路不就撞墙了吗?说墙离蛇只有 15 平方?

另外,蛇移动了 30*segundos 但你只是检查 30 平方以外是否有墙

if snake[1] > self.heroe_x:
next_position_x = snake[1] - (30 * segundos)
if self.isNotWall(next_position_x,snake[2]):
snake[1] = next_position_x

如果我是你,我会实现一个真正的寻路算法,让通过墙壁的成本无限大,这样它就永远不会越过一个。

http://en.wikipedia.org/wiki/Pathfinding

同时检查这个库

http://lib2dp.sourceforge.net/

关于python - python中的碰撞检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19982564/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com