Pygame Урок 2: Движение пушки в игре на Python

Продолжим создание игры на Python с использованием библиотеки Pygame. В прошлом уроке мы установили Pygame, инициализировали игру, создали окно и отрисовали лазерную пушку.

Размер окна

Изменим ширину окна на 700 пикселей.

Управление пушкой

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

Для улучшения структуры кода, обработку событий вынесем в отдельный файл controls.py.

Файл controls.py

Функция handle_events() обрабатывает события нажатия клавиш:

import pygame

def handle_events(gun, events):
  """Обработка событий нажатия на клавиши."""
  for event in events:
    if event.type == pygame.QUIT:
      pygame.quit()
    elif event.type == pygame.KEYDOWN:
      if event.key == pygame.K_d:  # Клавиша "D" – движение вправо
          gun.m_right = True
      elif event.key == pygame.K_a:  # Клавиша "A" – движение влево
          gun.m_left = True
    elif event.type == pygame.KEYUP:
      if event.key == pygame.K_d:
          gun.m_right = False
      elif event.key == pygame.K_a:
          gun.m_left = False

Используем pygame.KEYDOWN для отслеживания нажатия клавиш и pygame.KEYUP для отпускания. Булевы переменные m_right и m_left отслеживают состояние нажатых клавиш.

Обновление позиции пушки

Добавим функцию update() в класс пушки:

def update(self):
    if self.m_right:
        if self.rect.right < self.screen_rect.right:
            self.rect.x += 1
    if self.m_left:
        if self.rect.left > 0:
            self.rect.x -= 1

Функция проверяет состояние булевых переменных и передвигает пушку вправо или влево, если соответствующая клавиша нажата, не позволяя пушке выходить за пределы экрана.

Подключение controls.py

Импортируем модуль controls и вызываем функцию handle_events() в основном цикле:

import pygame
import controls

# ... остальной код ...

while True:
    # ... остальной код ...
    controls.handle_events(gun, pygame.event.get())
    gun.update()
    # ... остальной код ...

Мы научились обрабатывать события нажатия клавиш, улучшили структуру кода, добавив отдельный файл для обработки событий, и реализовали горизонтальное движение пушки с ограничением по границам экрана.

Что будем искать? Например,программа