我正在使用python和pygame进行蛇类游戏,但是在检查蛇类是否穿过食物时遇到了问题。这里有人可以帮我吗?

我尝试将食物的位置设为10的倍数,因为我的蛇的宽度和高度也是10,并且窗口(宽度和高度)也是10的倍数。

food_x = random.randrange(0, displayWidth-foodWidth, 10)
food_y = random.randrange(0, displayHeight-foodHeight, 10)


我希望这样做可以使食物定位,使不会发生碰撞,而蛇和食物直接重叠,这将使编码更容易。但是,也有碰撞。

最佳答案

因此,鉴于您的蛇数据结构是一组矩形,并且蛇仅从头部矩形“吃掉”,确定碰撞例程非常简单。

PyGame rect library在矩形之间具有用于checking collisions的功能。

因此,假设head_rect是具有蛇头坐标和大小的rect,而food_rect是要检查的项目:

if ( head_rect.colliderect( food_rect ) ):
    # TODO - consume food


food_rect中是否有food_list列表:

def hitFood( head_rect, food_list ):
    """ Given a head rectangle, and a list of food rectangles, return
        the first item in the list that overlaps the list items.
        Return None for a no-hit """
    food_hit = None
    collide_index = head_rect.collidelist( food_list )
    if ( collide_index != -1 ):
        # snake hit something
        food_hit = food_list.pop( collide_index )
    return food_hit


使用PyGame的库矩形重叠功能要比自己制作要容易得多。

10-01 21:30