Питон проблема с равенством

Ребята,помогите пожалуйста,пишу змейку дошел до такого момента,что когда координат головы(head) будут равны координате еды(food),то координаты еды должны меняться на другие.Но почему то ,хотя и выполняется равенство,но координаты не меняются

условие равенства для созданного мною класса Python

def __eq__(self, other):
        return isinstance(other, snakeblock) and self.x == other.x and self.y == other.y

условие,меняющее координаты еды при равенстве координат головы змейки и еды

if food == head:
    food = snakeblock(10, 15)

Сам код программы :

import pygame
import sys
 
size_of_block = 20
background_color = (59,153,0)
color_1 = (255,254,255)
color_2= (204,255,204)
color_snake = (204,255,0)
red = (255, 0, 0)
head = 100
head_color = (51,255,102)
size = [625, 800]
screen = pygame.display.set_mode(size)
pygame.display.set_caption('Snake')
fps = 5
 
class snakeblock:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def is_in(self):
        return 0 < self.x < 30 and 0 < self.y < 28
    def __eq__(self, other):
        return isinstance(other, snakeblock) and self.x == other.x and self.y == other.y
 
time = pygame.time.Clock()
 
def draw_snake(color_snake,stroka,stolb):
    pygame.draw.rect(screen, color_snake, [(stolb-1)*21+10, (stroka-1)*21+140, size_of_block, size_of_block])
 
def draw_block(color_snake,stroka,stolb):
    pygame.draw.rect(screen, color_snake, [(stolb-1)*21+10, (stroka-1)*21+140, size_of_block, size_of_block])
 
snake_blocks = [snakeblock(5,5),snakeblock(5,6),snakeblock(5 ,7)]
food = snakeblock(2,5)
d_1 = 1
d_2 = 0
 
while True:
    snake_coordinates = [[],[]]
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            print('Вышли')
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                if (d_2 != 1 and d_1 != 0):
                    d_2 = -1
                    d_1 = 0
            elif event.key == pygame.K_DOWN:
                if (d_2 != -1 and d_1 != 0):
                    d_2 = 1
                    d_1 = 0
            elif event.key == pygame.K_LEFT:
                if (d_1 != 1 and d_2 != 0):
                    d_1 = -1
                    d_2 = 0
            elif event.key == pygame.K_RIGHT:
                if (d_1 != -1 and d_2 != 0):
                    d_1 = 1
                    d_2 = 0
            elif event.key == pygame.K_SPACE:
                if fps == 5:
                    fps = 0.0000001
                else:
                    fps = 5
 
 
 
    screen.fill(background_color)
    for number_stroka in range(10, 600, 42):
        for number_stolb in range(20+head+20, 700, 42):
            pygame.draw.rect(screen, color_1, [number_stroka, number_stolb, size_of_block, size_of_block])
    for number_stroka_2 in range(31, 600, 42):
        for number_stolb_2 in range(41+head+20, 700, 42):
            pygame.draw.rect(screen, color_2, [number_stroka_2, number_stolb_2, size_of_block, size_of_block])
    for number_stroka in range(31, 600, 42):
        for number_stolb in range(20+head+20, 700, 42):
            pygame.draw.rect(screen, color_1, [number_stroka, number_stolb, size_of_block, size_of_block])
    for number_stroka_2 in range(10, 600, 42):
        for number_stolb_2 in range(41+head+20, 700, 42):
            pygame.draw.rect(screen, color_1, [number_stroka_2, number_stolb_2, size_of_block, size_of_block])
    pygame.draw.rect(screen, head_color, [0, 0, 625, 120])
 
    head_snake = snake_blocks[-1]
 
    if not head_snake.is_in():
        print('Врезались')
        pygame.quit()
        sys.exit()
 
    for block in snake_blocks:
        draw_snake(color_snake, block.y, block.x)
        print (block.y, block.x)
 
    if food == head:
        food = snakeblock(10, 15)
 
    draw_block(red, food.x, food.y)
 
 
 
    new_head_snake = snakeblock(head_snake.x + d_1, head_snake.y + d_2)
    snake_blocks.append(new_head_snake)
    snake_blocks.pop(0)
 
    pygame.display.flip()
    time.tick(fps)

Ответы (1 шт):

Автор решения: Xander

С равенством у вас здесь всё в порядке, у вас другие ошибки:

if food == head:
    food = snakeblock(10, 15)

У вас head - это число 100. Похоже, здесь должно быть не head, а head_snake

Кроме того, блоки змеи вы отрисовываете так:

draw_snake(color_snake, block.y, block.x)

а блок еды так:

draw_block(red, food.x, food.y)

обратите внимание, что в этих двух случаях порядок аргументов с x и y перепутаны. Поменяйте порядок для отрисовки блока еды и будет вам счастье.

→ Ссылка