Python turtle:带位置的if语句有时有效,有时无效

Python turtle:带位置的if语句有时有效,有时无效,python,if-statement,boolean,global,turtle-graphics,Python,If Statement,Boolean,Global,Turtle Graphics,我正在制作一个冒险/棋盘游戏,玩家可以在上面收集物品。所以我做了函数检查项来检查: def check_is_inside_screen(check_x, check_y): if check_x < -450 or check_x > 450 or check_y < -350 or check_y > 300: return False return True def check_item(player_x, player_y):

我正在制作一个冒险/棋盘游戏,玩家可以在上面收集物品。所以我做了函数检查项来检查:

def check_is_inside_screen(check_x, check_y):
    if check_x < -450 or check_x > 450 or check_y < -350 or check_y > 300:
        return False
    return True

def check_item(player_x, player_y):

    global pick_armor, pick_key, pick_sword

    if not pick_armor and -395 < player_x < -405 and 270 < player_y < 280:
        armor.hideturtle()
        pick_armor = True
    elif not pick_sword and 395 < player_x < 405 and 270 < player_y < 280:
        sword.hideturtle()
        pick_sword = True
    elif not pick_key and 395 < player_x < 405 and -320 < player_y < -330:
        key.goto(400, 325)
        pick_key = True

def move(move_x, move_y):
    player.forward(-100)
    px, py = player.pos()
    if not check_is_inside_screen(px, py):
        player.forward(100)
        return
    check_item(px, py)

def movePlayer():
    player.onclick(move, 1)
问题是,有时有效,有时无效。我玩游戏测试,有时甲鱼被成功隐藏,有时就是没有。此外,剑的物体通常不隐藏,钥匙也不起作用。我试着去掉布尔参数,但没有任何效果。知道该函数是在move函数内部调用的也是很有用的,move函数是从onclick事件调用的。基本上,每当我点击播放器对象时,它就会移动,然后检查位置

首先,海龟爬行浮点平面,这样的测试有时有效,有时失败:

x == -400 and y == 275
因为x可以返回为-400.0001。可以将点强制为整数:

int(x) == -400 and int(y) == 245
或测试位置是否在数值范围内

其次,移动函数中的此代码可疑:

    player.forward(100)
    return
    tx, ty = player.pos()
    check_item(tx, ty)
在同一缩进级别的返回之后不应该有代码——它永远不会被执行。我希望您的代码更像:

def check_item(x, y):

    global pick_armor, pick_key, pick_sword

    x = int(x)
    y = int(y)

    if not pick_armor and x == -400 and y == 275:
        armor.hideturtle()
        pick_armor = True
    elif not pick_sword and x == 400 and y == 275:
        sword.hideturtle()
        pick_sword = True
    elif not pick_key and x == 400 and y == -325:
        key.goto(400, 300)
        pick_key = True

def move(x, y):

    player.forward(-100)

    tx, ty = player.pos()

    if not -450 <= tx <= 450 or not -375 <= ty <= 325:
        player.backward(-100)
        return

    check_item(tx, ty)

def movePlayer():

    player.onclick(move, 1)

如果没有更多的代码可供使用,我无法测试上述内容,但希望您能理解。

请不要将代码作为图像。也不要比较布尔值==True或==False,并避免使用全局变量。坐标是整数还是浮点型?我对这张图片很抱歉,我是新来的,我只是在发布后才看到它的指示。至于布尔值,我需要一个变量来存储玩家拾取项目的信息,这样之后就不会考虑if语句了。我从pos方法中获得玩家坐标,当我打印出来时,它们似乎是整数。试着创建一个和后代码作为文本。如果这样做,我可能会重新打开问题阅读有关调试代码的提示。感谢您的回答,但仍然存在一些问题。事实证明,pos函数的近似值太差了,我不得不检查一系列值。但它仍然不起作用。我将编辑这个问题,以便您可以看到更新的代码。再次感谢您抽出时间@Teolul,在你更新的代码中,这是一个错误:-320