Python — Pygame, Tkinter и SDL
В Python нет встроенного игрового холста, как <canvas> в браузере. Окно, события и flip() приходят из SDL — библиотеки, на которой построен Pygame.
SDL (Simple DirectMedia Layer)
Кроссплатформенная C-библиотека для мультимедиа:
- создание окна ОС
- поверхность или GPU renderer
- очередь событий (клавиатура, мышь, quit)
- таймеры и аудио
- контекст OpenGL или Vulkan
На SDL работают Pygame, многие эмуляторы, indie на C++, часть движков.
Цикл SDL (псевдокод)
создать окно и renderer
пока running:
пока есть событие:
если QUIT → running = false
если KEYDOWN → обновить модель ввода
update(модель)
clear + draw
present / flip
Те же три слоя, что в главе 1: события → update → render → swap.
Pygame
Pythonic-обёртка над SDL2.
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((15, 23, 42))
pygame.draw.circle(screen, (239, 68, 68), (int(x), int(y)), 18)
pygame.display.flip()
clock.tick(60)
| Модуль | Назначение |
|---|---|
pygame.draw | линии, круги, rect |
pygame.image | load, blit спрайтов |
pygame.sprite | Sprite, Group, collide |
pygame.Rect | прямоугольники, colliderect |
pygame.mixer | звук |
pygame.time | Clock, таймеры |
display.flip() — двойная буферизация.
Код ITЗагрузка примера кода…
Sprite groups
all_sprites = pygame.sprite.Group()
enemies = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
all_sprites.update(dt)
hits = pygame.sprite.spritecollide(player, enemies, False)
Группы — структура сцены поверх массива.
Tkinter
Встроенный GUI Python. Виджет Canvas рисует овалы, линии, изображения; события <Button-1>, <Motion>.
| Pygame | Tkinter Canvas | |
|---|---|---|
| FPS | 60+ в играх | десятки, для UI |
| Цикл | while + tick | root.after(ms, callback) |
| Задачи | игры, симуляции | формы, графики, простые UI |
def tick():
update_logic()
canvas.delete('all')
canvas.create_oval(x-r, y-r, x+r, y+r, fill='red')
root.after(16, tick)
Для аркад берите Pygame. Tkinter — для форм и лёгкой графики.
Практика: Lab Tkinter, десктоп на Python.
Другие стеки
| Библиотека | Назначение |
|---|---|
| Matplotlib | научные 2D/3D графики |
| Pillow | обработка файлов изображений |
| Arcade | лёгкие 2D-игры |
| Panda3D | 3D |
| ModernGL | тонкий OpenGL из Python |
SDL и OpenGL
Pygame может создать GL-контекст. Для серьёзного 3D чаще Panda3D, Ursina или C++ движок. Логика та же: контекст + цикл + swap — глава 11.