> For the complete documentation index, see [llms.txt](https://pygame.gitbook.io/razrabotchiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pygame.gitbook.io/razrabotchiki/teoriya/obrabotka-sobytii.md).

# Обработка событий

В Pygame поддерживается множество различных событий, которые позволяют реагировать на разные виды ввода и взаимодействия с пользователем. Вот основные категории событий, с которыми можно работать в Pygame:

## События клавиатуры

* **KEYDOWN:** Происходит при нажатии клавиши.
* **KEYUP:** Происходит при отпускании клавиши.

Пример обработки событий клавиатуры:

```python
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            print("Left arrow key pressed")
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT:
            print("Left arrow key released")
```

## События мыши

* **MOUSEBUTTONDOWN:** Происходит при нажатии кнопки мыши.
* **MOUSEBUTTONUP:** Происходит при отпускании кнопки мыши.
* **MOUSEMOTION:** Происходит при перемещении мыши.

Пример обработки событий мыши:

```python
for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:  # левая кнопка мыши
            print("Left mouse button clicked at", event.pos)
    elif event.type == pygame.MOUSEBUTTONUP:
        if event.button == 1:
            print("Left mouse button released at", event.pos)
    elif event.type == pygame.MOUSEMOTION:
        print("Mouse moved to", event.pos)
```

## Системные события

* **QUIT:** Происходит при попытке закрыть окно приложения (например, нажатие на кнопку закрытия окна).

Пример обработки системных событий:

```python
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
```

## События таймера и Пользовательские события

События таймера в Pygame позволяют генерировать события через определенные интервалы времени. Это полезно для выполнения повторяющихся задач, таких как обновление анимации, проверка состояния игры или выполнение других периодических действий. Вот подробное объяснение работы с событиями таймера в Pygame.

#### Основные шаги работы с таймерами в Pygame

1. **Инициализация таймера:** Используйте `pygame.time.set_timer(event_type, interval)` для создания таймера. Таймер будет генерировать событие указанного типа через каждые `interval` миллисекунд.
2. **Обработка событий таймера:** В основном игровом цикле обрабатывайте события таймера так же, как и любые другие события, используя `pygame.event.get()`.

**USEREVENT:** Пользовательские события, которые можно создавать с помощью таймера.

Пример создания и обработки пользовательского события:

```python
import pygame
import sys

# Определение пользовательского события
CUSTOM_EVENT = pygame.USEREVENT + 1

pygame.init()

# Устанавливаем таймер для генерации пользовательского события каждые 1000 миллисекунд (1 секунду)
pygame.time.set_timer(CUSTOM_EVENT, 1000)

# Создание окна
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Custom Event Example")

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == CUSTOM_EVENT:
            # Обработка пользовательского события
            print("Custom event received!")

    pygame.display.flip()

pygame.quit()
sys.exit()
```

## Полный список событий

Для получения полного списка событий, поддерживаемых Pygame, можно обратиться к официальной документации Pygame или использовать следующие атрибуты модуля `pygame`:

* **pygame.event.event\_name(event\_type):** Возвращает имя события для заданного типа события.
* **pygame.event.get():** Возвращает все события из очереди событий.

Пример использования:

```python
print(pygame.event.event_name(pygame.KEYDOWN))  # "KeyDown"
print(pygame.event.event_name(pygame.MOUSEMOTION))  # "MouseMotion"
```

## Пример обработки всех событий

Этот пример показывает, как обработать все перечисленные выше события:

```python
import pygame
import sys

# Инициализация Pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Pygame Events Example")

# Основной игровой цикл
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            print(f"Key pressed: {pygame.key.name(event.key)}")
        elif event.type == pygame.KEYUP:
            print(f"Key released: {pygame.key.name(event.key)}")
        elif event.type == pygame.MOUSEBUTTONDOWN:
            print(f"Mouse button {event.button} pressed at {event.pos}")
        elif event.type == pygame.MOUSEBUTTONUP:
            print(f"Mouse button {event.button} released at {event.pos}")
        elif event.type == pygame.MOUSEMOTION:
            print(f"Mouse moved to {event.pos}")
        elif event.type == pygame.USEREVENT:
            print("User event occurred")

    # Отрисовка и обновление экрана (если требуется)
    screen.fill((255, 255, 255))
    pygame.display.flip()

# Закрытие Pygame
pygame.quit()
sys.exit()
```

Этот код инициализирует Pygame, создает окно и запускает основной игровой цикл, в котором обрабатываются различные события. После обработки событий окно перерисовывается, и, наконец, при выходе из цикла игра корректно завершает работу.
