如何解决如何检查某项内容是否在列表中多个项目的范围内?
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 举报,一经查实,本站将立刻删除。