Запуск игр на Python: от консоли до облачных технологий

Раздел: Разработка на Python -> Игры на Python

Способы запуска игры на Python

Основной способ: запуск через интерпретатор Python

Самый прямой путь - выполнить скрипт игры командой python main.py в терминале.

Пример простой игры на Pygame (файл simple_game.py):

import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    screen.fill((30, 30, 30))
    pygame.display.flip()
    clock.tick(60)

Run game python (запуск игры на python)

Запуск в терминале:

python simple_game.py

Типичные ошибки:

  • ModuleNotFoundError: No module named 'pygame' - модуль не установлен. Решение: pip install pygame.
  • Неверная версия Python (например, Python 2 вместо 3). Проверить: python --version.

Как запустить игру из IDE (PyCharm, VS Code)?

В PyCharm достаточно нажать зелёный треугольник возле файла с игрой. В VS Code - сочетание Ctrl+F5 (без отладки) или F5 (с отладкой).

Пример настройки конфигурации запуска в VS Code (.vscode/launch.json):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Запуск игры",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/src/main.py",
            "console": "integratedTerminal"
        }
    ]
}

Проблема: игра не видит ресурсы (изображения, звуки) при запуске из IDE.

Решение: указать рабочую директорию в конфигурации (например, "cwd": "${workspaceFolder}").

Как сделать исполняемый файл (EXE) для распространения?

Инструменты: PyInstaller, Nuitka, cx_Freeze. Самый популярный - PyInstaller.

Пример команды для упаковки игры my_game.py в один EXE:

pip install pyinstaller
pyinstaller --onefile --windowed my_game.py

Результат появится в папке dist. Файл my_game.exe можно запускать на любом Windows без установленного Python.

Частые ошибки:

  • Антивирус блокирует EXE - добавить в исключения.
  • Отсутствуют ресурсы (изображения) - указать их через --add-data.
  • Большой размер EXE (из-за включения всей библиотеки). Решение: использовать виртуальное окружение.

Как запустить игру в браузере (WebAssembly)?

Технология Pyodide позволяет запускать Python в браузере. Игра на Pygame преобразуется с помощью pygame-web или же пишется с нуля на чистом Python + HTML5 Canvas.

Пример простого Canvas-приложения (без Pygame):

<!DOCTYPE html>
<html>
<body>
<canvas id="game" width="800" height="600" style="background:black"></canvas>
<script src="https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js"></script>
<script>
  async function main() {
    let pyodide = await loadPyodide();
    await pyodide.runPythonAsync(`
        import js
        canvas = js.document.getElementById('game')
        ctx = canvas.getContext('2d')
        ctx.fillStyle = 'white'
        ctx.fillRect(10, 10, 100, 100)
    `);
  }
  main();
</script>
</body>
</html>

Проблема: Pygame не работает напрямую в Pyodide.

Решение: использовать эмуляцию (pygame-ce для web) или переписать игровую логику на чистом Python с рисованием через Canvas.

Как запустить игру на сервере (Docker, облако)?

Если игра многопользовательская (например, на Pygame Networking), её можно развернуть в контейнере.

Пример Dockerfile для игры:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "server.py"]

Сборка и запуск:

docker build -t my-game .
docker run -p 12345:12345 my-game

Ошибка: порт занят.

Решение: изменить порт в команде docker run -p 12346:12345 или освободить порт.

Выбор метода зависит от целей:

  • Для личного тестирования - запуск через IDE или терминал.
  • Для публикации друзьям - сборка EXE (PyInstaller).
  • Для веб-доступа - Pyodide или HTML5 Canvas.
  • Для серверной логики - Docker в облаке.

Расширенные примеры запуска игр на Python

Пример 1. Полная игра с использованием Pygame и её запуск

Игра «Летящий мяч». Файл ball_game.py:

Пример
import pygame
import sys

pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Ball Game')
clock = pygame.time.Clock()

ball_x, ball_y = WIDTH//2, HEIGHT//2
speed_x, speed_y = 3, 2
radius = 20

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    ball_x += speed_x
    ball_y += speed_y
    
    if ball_x - radius <= 0 or ball_x + radius >= WIDTH:
        speed_x = -speed_x
    if ball_y - radius <= 0 or ball_y + radius >= HEIGHT:
        speed_y = -speed_y
    
    screen.fill((0, 0, 0))
    pygame.draw.circle(screen, (255, 100, 0), (ball_x, ball_y), radius)
    pygame.display.flip()
    clock.tick(60)

Результат запуска (python ball_game.py):

Откроется окно с анимированным оранжевым мячом, отскакивающим от стенок.

Пример 2. Сборка игры в один EXE с дополнительными параметрами

Используем PyInstaller для упаковки ball_game.py с иконкой и без консоли:

Пример
pip install pyinstaller
pyinstaller --onefile --windowed --icon=icon.ico --add-data "resources;resources" ball_game.py

Структура проекта:

Пример
project/
├── ball_game.py
├── resources/
│   ├── image.png
│   └── sound.wav
├── icon.ico
└── dist/

Результат: в папке dist появится ball_game.exe (около 10-15 МБ). При запуске окно не содержит консоли.

Запущенный EXE-файл ведёт себя так же, как и оригинальный скрипт.

Пример 3. Запуск игры на удалённом сервере через SSH

Игра-сервер (например, многопользовательская на socket). Файл server.py:

Пример
import socket

HOST = '0.0.0.0'
PORT = 12345

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen(2)
print(f'Сервер запущен на {HOST}:{PORT}')

while True:
    conn, addr = server.accept()
    print(f'Подключился {addr}')
    conn.sendall(b'Welcome to Python Game Server!')
    conn.close()

Запуск на удалённом Linux-сервере:

Пример
# Копируем файлы на сервер
scp server.py user@server_ip:/home/user/

# Подключаемся по SSH
ssh user@server_ip

# Устанавливаем зависимости (если нужно)
pip install -r requirements.txt

# Запускаем в фоне
nohup python server.py &

Результат: сервер слушает порт 12345. Клиент может подключаться через telnet:

$ telnet server_ip 12345
Trying ...
Connected to ...
Welcome to Python Game Server!

Пример 4. Запуск игры в контейнере Docker с автоматическим перезапуском

Dockerfile с многопользовательской игрой (например, Tkinter-игра не подходит - GUI не работает в контейнере без X-сервера). Лучше консольная игра или серверная.

Пример
FROM python:3.11-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 12345
CMD ["python", "server.py"]

Запуск с политикой перезапуска:

Пример
docker build -t game-server .
docker run -d --restart=always -p 12345:12345 game-server
Контейнер стартует и автоматически перезапускается при сбоях.

Пример 5. Запуск Pygame-игры в браузере с использованием Pyodide и WebAssembly

Самый сложный вариант. Используется библиотека pygame-ce, которая поддерживает web-сборку. Упрощённый подход: загрузить готовый пакет Pygame Web.

Файл index.html с модифицированной игрой:

Пример
<!DOCTYPE html>
<html>
<head>
  <script src="https://cdn.pygame.org/archive/pygame-web-0.0.1.js"></script>
</head>
<body>
  <div id="pygame-container"></div>
  <script>
    window.loadPygame()
      .then((pygame) => {
        const main = `
          import pygame
          import sys
          pygame.init()
          screen = pygame.display.set_mode((400, 300))
          running = True
          while running:
              for event in pygame.event.get():
                  if event.type == pygame.QUIT:
                      running = False
              screen.fill((0, 0, 255))
              pygame.display.flip()
          pygame.quit()
          sys.exit()
        `;
        pygame.run(main, {container: 'pygame-container'});
      });
  </script>
</body>
</html>

Результат: в браузере отображается синее окно Pygame. Важно: не все фичи Pygame работают (например, звук, шрифты).

Веб-страница показывает синее окно 400×300 пикселей.

запуск игры на python - comments

En
Run game python (python)