@Tim245

Почему когда зелёный квадратик касается красного он не пропадает?

Делаю игру типо змейки но не могу понять почему не заходит в условие вот в это
if (snake_pos['x'] == food_pos["x"]
            and snake_pos['y'] == food_pos["y"]):
        print(123)
        food_eaten += 1
        snake_tails.append([food_pos["x"], food_pos["y"]])
        food_pos = {
          "x": round(random.randrange(0, widht - snake_size[0]) / 10) * 10,
          "y": round(random.randrange(0, hight - snake_size[1]) / 10) * 10,
        }

а сам код ниже
import pygame
import random
pygame.init()
widht = 640
hight = 480
display = pygame.display.set_mode((widht, hight))
pygame.display.update()
pygame.display.set_caption("Змейка по андроид ОТ тимура")
game_end = False
colors = {
  "snake_head": (0, 255, 0),
  "snake_tail": (0, 255, 0),
  "apple": (255, 0, 0)
}
snake_pos = {
  'x': widht/2-10,
  'y': hight/2-5,
  "x_change": 0,
  "y_change": 0
}

snake_size = (10, 10)

snake_tails = []

food_pos = {
    "x" : round(random.randrange(0, widht - snake_size[0]) / 10) * 10,
    "y" : round(random.randrange(0, hight - snake_size[1]) / 10) * 10
}

food_size = (10, 10)
food_eaten = 0



snake_speed = 0.01
while not game_end:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_end = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                snake_pos['x_change'] = -snake_speed
                snake_pos['y_change'] = 0
            elif event.key == pygame.K_RIGHT:
                snake_pos['x_change'] = snake_speed
                snake_pos['y_change'] = 0
            elif event.key == pygame.K_UP:
                snake_pos['x_change'] = 0
                snake_pos['y_change'] = -snake_speed
            elif event.key == pygame.K_DOWN:
                snake_pos['x_change'] = 0
                snake_pos['y_change'] = snake_speed
    display.fill((0, 0, 0))

    ltx = snake_pos['x']
    lty = snake_pos['y']


    for i, v in enumerate(snake_tails):
        _ltx = snake_tails[i][0]
        _lty = snake_tails[i][1]
        snake_tails[i][0] = ltx
        snake_tails[i][1] = lty

        ltx = _ltx
        lty = _lty
    for t in snake_tails:
        pygame.draw.rect(display, colors['snake_tail'], [
            t[0],
            t[1],
            snake_size[0],
            snake_size[1]])
    snake_pos['x'] += snake_pos['x_change']
    snake_pos['y'] += snake_pos['y_change']
    if (snake_pos['x'] < -snake_size[0]):
        snake_pos['x'] = widht
    elif (snake_pos['x'] > widht):
        snake_pos['x'] = 0
    elif (snake_pos['y'] < -snake_size[1]):
        snake_pos['y'] = hight
    elif (snake_pos['y'] > hight):
        snake_pos['y'] = 0
    pygame.draw.rect(display, colors["snake_head"], [
        snake_pos['x'],
        snake_pos['y'],
        snake_size[0],
        snake_size[1]])


    pygame.draw.rect(display, colors['apple'], [
        food_pos["x"],
        food_pos["y"],
        snake_size[0],
        snake_size[1]])

    if (snake_pos['x'] == food_pos["x"]
            and snake_pos['y'] == food_pos["y"]):
        print(123)
        food_eaten += 1
        snake_tails.append([food_pos["x"], food_pos["y"]])
        food_pos = {
          "x": round(random.randrange(0, widht - snake_size[0]) / 10) * 10,
          "y": round(random.randrange(0, hight - snake_size[1]) / 10) * 10,
        }


    pygame.display.update()





pygame.quit()
quit()
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
ScriptKiddo
@ScriptKiddo
Snake x,y: 371.97999999994363, 308.3599999999333. Fodd x,y: 370, 310
Snake x,y: 371.97999999994363, 308.36999999993327. Fodd x,y: 370, 310

Проще всего закостылить примерно так
int(snake_pos['x'])

Но змеюка бешеная и скачет по нескольким пикселям за одно нажатие. Возможно, сюда подойдет интервал
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
DIGITAL SECTOR Краснодар
от 150 000 до 250 000 ₽