В вашем коде не обрабатываются никакие события, однако событие выхода из игры работает нормально. Можете ли вы помочь выяснить, почему это происходит? Вот полный код: ```python import pygame as pg from func import * from const import * pg.init() pg.font.init() screen = pg.display.set_mode((WIDTH, HEIGHT)) font = pg.font.SysFont(pg.font.get_default_font(), 70) text_menu = text = font.render('играть' , True , BLACK) clock = pg.time.Clock() generation_happen = 1 time = None game_over = True running = True board = [ [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ] generation_2_or_4(board) generation_2_or_4(board) while running: clock.tick(60) mouse = pg.mouse.get_pos() for event in pg.event.get(): if event.type == pg.QUIT: running = False if game_over: if event.type == pg.MOUSEBUTTONDOWN: if WIDTH / 3 <= mouse[0] <= WIDTH / 3 + WIDTH_BUTT0N and HEIGHT / 2.5 <= mouse[1] <= HEIGHT / 2.5 + HEIGHT_BUTTON: game_over = False if not game_over: if time is not None: time += 1 for event in pg.event.get(): if event.type == pg.KEYDOWN and generation_happen == 1: if event.key == pg.K_LEFT: board = move_left(board) if event.key == pg.K_UP: board = move_up(board) if event.key == pg.K_DOWN: board = move_down(board) if event.key == pg.K_RIGHT: board = move_right(board) time = 0 generation_happen = 0 # if is_winning(board): # win = True # screen.fill((51, 25, 0)) if is_terminal(board): game_o ```
В вашем коде есть несколько моментов, которые могут привести к тому, что нажатия кнопок не обрабатываются. Давайте рассмотрим основные из них: 1. **Дублирование цикла обработки событий**: В вашем коде дважды вызывается `pg.event.get()`. Это приводит к тому, что вы обрабатываете события в каждом цикле отдельно, и если события между ними перекрываются (например, из-за большого количества событий), то некоторые нажатия могут не быть обработаны. Вместо этого вам следует обрабатывать все события в одном цикле. Вот как это можно сделать: ```python for event in pg.event.get(): if event.type == pg.QUIT: running = False if game_over: if event.type == pg.MOUSEBUTTONDOWN: if WIDTH / 3 <= mouse[0] <= WIDTH / 3 + WIDTH_BUTT0N and HEIGHT / 2.5 <= mouse[1] <= HEIGHT / 2.5 + HEIGHT_BUTTON: game_over = False else: # Если игра не завершена, обрабатываем нажатия клавиш if event.type == pg.KEYDOWN and generation_happen == 1: if event.key == pg.K_LEFT: board = move_left(board) if event.key == pg.K_UP: board = move_up(board) if event.key == pg.K_DOWN: board = move_down(board) if event.key == pg.K_RIGHT: board = move_right(board) time = 0 generation_happen = 0 ``` 2. **Обработка состояний игры**: Обратите внимание, что проверки на события клавиатуры происходят только, когда `game_over` равно `False`. Убедитесь, что вы правильно переключаете это состояние и что `game_over` действительно меняется, как ожидалось. 3. **Инициализация переменных**: Убедитесь также, что все функции (например, `move_left`, `move_up` и т. д.) правильно инициализированы и возвращают корректные значения для `board`. Если они возвращают ошибочные состояния, это может привести к неправильной обработке game loop. 4. **Проверка на инициализацию**: Все функции, упомянутые в коде (`move_left`, `move_up` и т. д.), должны быть определены и работать правильно, иначе ваше приложение может испытывать ошибки, и вам не будет видно соответствующих событий клавиатуры. Внесите предложенные изменения и проверьте, будет ли ваша игра обрабатывать нажатия клавиш.
splliii , у вас два цикла обработки событий:for event in pg.event.get():
, из-за этого не обрабатываются корректно нажатия на кнопки.
Перепишите логику, используя один цикл.