我可以使用“to”扩展坐标吗? (10,0) 至 (-10,0)

问题描述 投票:0回答:1

我对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) :
python if-statement python-turtle
1个回答
0
投票

您可以创建一个更通用的函数来检查与墙的碰撞,方法是定义墙段的坐标,然后检查蛇的头部是否与任何这些段碰撞。具体方法如下:

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 作为阈值)。如果是,则认为蛇头与该墙段碰撞。 这样,您不需要分别手动检查每个坐标,并且代码保持干净且易于维护。根据您的游戏需要调整阈值。

如果这是错误的,抱歉!我已经尽力了。不过我很确定这是对的。

© www.soinside.com 2019 - 2024. All rights reserved.