我对Python很陌生,我正在用乌龟制作一个蛇游戏,但我必须添加一堵墙/障碍物。我已经造好了墙,但问题是我的蛇撞墙时怎么会死呢?
def obstacle():
obs = turtle.Turtle()
obs.speed(0)
obs.shape("square")
obs.color("white")
obs.penup()
obs.goto(-400,235)
obs.shapesize(stretch_wid=15,stretch_len=1)
#obs coords(-400,90) to (-410,90) to (-390,390) to (-410,390)
while keys_enabled:#from while true to keys_enebled
window.update()
if snek_head.xcor() > 480 or snek_head.xcor() < -480 or snek_head.ycor() > 480 or snek_head.ycor() < -480 or collision() or wallCollision() or obstacle():
我已经尝试使用 if 语句手动使用我为墙角输入的坐标
def wallCollision():
if (
-400 < snek_head.xcor() < -390 and 90 < snek_head.ycor() < 380 or
390 < snek_head.xcor() < 400 and -405 < snek_head.ycor() < -90 or
100 < snek_head.xcor() < 410 and -405 < snek_head.ycor() < -390):
return True
return False
但它无法正常工作。只有当头部碰撞到我放置的确切坐标时它才会死亡。那么有没有什么方法可以简单地拉伸坐标,使代码看起来干净且易于工作,例如。
if snek_head.distance() < (-410, 390) to (-400 , 390) to (-400, 90) to ( -410,90) to (-410, 390) :
您可以创建一个更通用的函数来检查与墙的碰撞,方法是定义墙段的坐标,然后检查蛇的头部是否与任何这些段碰撞。具体方法如下:
def wallCollision():
wall_segments = [
((-410, 390), (-400, 390)), # Top horizontal segment
((-400, 390), (-400, 90)), # Right vertical segment
((-400, 90), (-410, 90)), # Bottom horizontal segment
((-410, 90), (-410, 390)) # Left vertical segment
]
for segment in wall_segments:
start, end = segment
if (start[0] <= snek_head.xcor() <= end[0] or end[0] <=
snek_head.xcor() <= start[0]) and \
(start[1] <= snek_head.ycor() <= end[1] or end[1] <=
snek_head.ycor() <= start[1]):
return True
return False
在此功能中:
wall_segments 包含每个墙段端点的坐标。 我们迭代每个线段,并检查从蛇头到线段两个端点的距离是否小于阈值(这里,我使用 10 作为阈值)。如果是,则认为蛇头与该墙段碰撞。 这样,您不需要分别手动检查每个坐标,并且代码保持干净且易于维护。根据您的游戏需要调整阈值。
如果这是错误的,抱歉!我已经尽力了。不过我很确定这是对的。