В вашем коде не обрабатываются никакие события, однако событие выхода из игры работает нормально. Можете ли вы помочь выяснить, почему это происходит? Вот полный код:
```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():, из-за этого не обрабатываются корректно нажатия на кнопки.
Перепишите логику, используя один цикл.