Курс из 11 уроков (папки 1–11): от базового сетевого обмена до полноценной мини-игры, лобби, декораторов @Command / @NetEvent и продвинутых тем в уроке 10.
Обновлён под SpritePro 3.8.0: рекомендуемый запуск через s.run(..., multiplayer=True).
- Идите по порядку: папки
1→11(урок 10 — продвинутые темы, 11 — сетевые декораторы). - В каждом уроке сначала прочитайте
lesson.md. - Запустите
example_*.py— увидите эталонный пример. - Выполните задания в
practice_*.py. - Сверяйтесь с
solution_*.pyтолько после попытки.
| Файл | Назначение |
|---|---|
lesson.md |
Теория, примеры кода, задания |
example_*.py |
Рабочий пример по теме |
practice_*.py |
Практика с TODO для самостоятельной работы |
solution_*.py |
Эталонное решение |
python multiplayer_course/2/example_sync_positions.pySpritePro автоматически запустит 2 окна (хост + клиент). Для 3+ окон:
s.run(multiplayer=True, multiplayer_entry=main, multiplayer_clients=3)С отладочным логом сети:
python multiplayer_course/2/example_sync_positions.py --net_debug| Уровень | Что изучается | Уроки |
|---|---|---|
| Low-level | NetServer, NetClient, ctx.send(), poll(), JSON |
1–4 |
| App-level | Scene, Button, s.run(), архитектура проекта, декораторы |
5–11 |
Ручной цикл while True: s.update(...) допустим в учебных low-level примерах. Для полноценных игр используйте s.run(...).
| # | Тема | Ключевой навык |
|---|---|---|
| 1 | Сетевой слой: сообщения и очередь | NetServer, NetClient, send(), poll() |
| 2 | Синхронизация позиций | send_every(), троттлинг, «свой» vs «чужой» |
| 3 | Готовность и старт | Флаги ready_map, authority хоста |
| 4 | Лобби и список игроков | join, roster, client_id |
| 5 | Сцены и UI | Scene, Button, синхронный переход |
| 6 | Зона захвата и счёт | Authority счёта, кулдаун, валидация |
| 7 | Результаты и перезапуск | Передача данных между сценами, recreate=True |
| 8 | Структура проекта | game_config.py, модули, хелперы |
| 9 | Финальный мини-экзамен | Всё вместе: лобби → игра → результат |
| 10 | Продвинутые темы | LERP, роутинг, снапшоты, dedicated server |
| 11 | Сетевые декораторы | @s.NetEvent, @s.Command, @s.ClientRpc |
import spritePro as s
# Запуск мультиплеера (app-level)
s.run(multiplayer=True, setup=setup_scenes)
# Или с учебной entry-функцией (low-level)
s.run(multiplayer=True, multiplayer_entry=multiplayer_main)
# Контекст мультиплеера
ctx = s.multiplayer_ctx
ctx.is_host # bool — я хост?
ctx.client_id # int — мой ID
ctx.id_assigned # bool — ID получен?
ctx.send(event, data) # Отправить сообщение
ctx.poll() # Получить входящие
ctx.send_every(event, data, 0.1) # С троттлингомВ папке tictactoe_example/ — готовая пошаговая сетевая игра:
- Turn-based логика (хост = X, клиент = O)
- Синхронизация доски, перезапуск
- UI: Layout, Sprite, Button, TextSprite, Scene
python multiplayer_course/tictactoe_example/example_tictactoe_multiplayer.py
python multiplayer_course/tictactoe_example/example_tictactoe_multiplayer.py --quickДля продакшен-проектов используйте готовое лобби SpritePro:
s.run(
scene=GameScene,
multiplayer=True,
multiplayer_use_lobby=True, # готовый UI лобби
title="My Game",
)