微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查某项内容是否在列表中多个项目的范围内?

如何解决如何检查某项内容是否在列表中多个项目的范围内?

import pygame
display_width = 600
display_height = 600
snake_List = [[120.0,180.0],[120.0,240.0],300.0],360.0],[180.0,[240.0,[300.0,420.0],420.0]]
food_placed = False
snake_block_size = 60

def Food(snake_List,food_placed,foodX,foodY):
    while food_placed == False:
        foodX = round(random.randrange(0,display_width))
        foodY = round(random.randrange(0,display_height))
        food_pos = [foodX,foodY]
        if food_pos in snake_List:
            food_placed = False
        else:
            food_placed = True

我正在制作一个蛇游戏,但食物生成有问题,因为它生成在蛇身上。我想出的解决方案不起作用,因为如果它恰好在被绘制的蛇的位置产生,它就不会在蛇中产生。 所以我需要它来检查它是否在 60 块范围内。

def Food(snake_List,foodY):
    foodX = round(random.randrange(0,display_width))
    foodY = round(random.randrange(0,display_height))
    food_pos = [foodX,foodY]
    if food_pos[1] + 60  < snake_List[0::2] and food_pos[2] + 60 < snake_List[1::2]:
        food_placed = False
    elif food_pos[1] - 60  > snake_List[1::2] and food_pos[1] - 60 > snake_List[0::2]:
        food_placed = False
    else:
        food_placed = True

这是我尝试的解决方案,但它说“'int'和'list'的实例之间不支持'

解决方法

将蛇转换为 pygame.Rect 对象列表:

snake_block_size = 60
snake_List = [[120.0,180.0],[120.0,240.0],300.0],360.0],[180.0,[240.0,[300.0,420.0],420.0]]
snake_rect_list = [pygame.Rect(x,y,snake_block_size,snake_block_size) for x,y in snake_List]

使用collidelist检查脚是否与蛇相交。见collidelist

测试矩形是否与矩形序列中的任何一个发生碰撞。返回找到的第一个碰撞的索引。如果未发现冲突,则返回索引 -1。

函数Food

def Food(snake_List):
    
    foodX = round(random.randrange(0,display_width))
    foodY = round(random.randrange(0,display_height))
    fodd_size = 60

    food_rect = pygame.Rect(foodX,foodY,fodd_size,fodd_size)
    snake_rect_list = [pygame.Rect(x,snake_block_size)
        for x,y in snake_List]

    if food_rect.collidelist(snake_rect_list) >= 0:
        return None 

    return foodX,foodY

请注意,Python 没有输入输出参数的概念。因此,您必须返回函数的结果。使用函数如下:

food_pos = Food(snake_List)
while food_pos == None:
    food_pos = Food(snake_List)

foodX,foodY = food_pos 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。