Лекция · 5.1

PyGame кітапханасы. Ойын терезесі

Осы бөлімнің соңында сенде ӨЗ ОЙЫНЫҢ болады — кейіпкері жүгіретін, ұпайы саналатын, нағыз 2D ойын! Оны Python-ның PyGame кітапханасымен жасаймыз. Бүгін алғашқы қадам: ойынның «сахнасын» — терезені жасап, оның «жүрегін» — ойын циклін іске қосамыз. Осы құрылымды бір рет түсінсең, кез келген ойын соның үстіне салынады: Марио да, Flappy Bird та осы қаңқада тұр.

PyGame деген не
Анықтама
PyGame — Python тілінде 2D ойындар мен мультимедиялық қосымшалар жасауға арналған кітапхана: терезе, сурет, дыбыс, пернетақта/тінтуір — бәрі дайын.

Кітапхана — басқа біреу жазып қойған дайын код жинағы. Орнату (бір рет, терминалда): pip install pygame. Программада қосу: import pygame. Барлық PyGame командалары pygame. префиксімен басталады.

🎬
Аналогия: ойын жасау — қуыршақ театры: PyGame саған дайын сахна (терезе), қуыршақтар ілетін жіптер (командалар) және шамдар (графика) береді. Сценарийді — ойын логикасын — өзің жазасың.

PyGame Python-ның стандартты кітапханасына КІРМЕЙДІ, сондықтан оны бөлек орнату керек. Ішінде PyGame SDL (Simple DirectMedia Layer) деген кітапхана негізінде жасалған — дәл сол себепті PyGame бірнеше платформада (Windows, macOS, Linux) бірдей жұмыс істейді. Кітапхана өз ішінде кішкентай «ішкі кітапханаларға» (модульдерге) бөлінген:

МодульМақсаты
pygame.displayЭкранға кіру
pygame.drawФигураларды, сызықтарды, нүктелерді сызу
pygame.eventСыртқы оқиғаларды басқару
pygame.fontЖүйелік қаріптерді қолдану
pygame.imageКескінді жүктеу және сақтау
pygame.keyПернетақтада басылған пернені оқу
pygame.mixerДыбыстарды жүктеу және ойнату
pygame.mouseТінтуірмен басқару
pygame.timeУақыт пен кадр жиілігін басқару
Ойын терезесі
import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Менің ойыным")
Анықтама
pygame.init() — кітапхананы іске қосу (әрқашан бірінші команда). set_mode((ені, биіктігі)) — терезе жасайды; өлшемдер пикселмен. set_caption — терезенің тақырыбын қояды.

Назар аудар: set_mode-қа өлшем ҚОС жақшамен беріледі — (800, 600) бұл бір бүтін жұп (кортеж). screen айнымалысы — «кенеп»: кейін бәрін соған саламыз.

pygame.init() нақты не істейді? Ол PyGame ішіндегі БАРЛЫҚ ішкі модульді іске қосады: драйверлерді жүктейді, дыбыс, экран, пернетақта/тінтуір сияқты құрылғыларды пайдалануға дайындайды. set_mode() функциясы жай терезе ашып қана қоймай, Surface (бет) типті объект қайтарады — screen айнымалысы дәл осы Surface объектісі, кейін сурет салатын «парақ».

Ойын циклі — ойынның жүрегі
Анықтама
Ойын циклі — ойын біткенше үздіксіз қайталанатын while циклі. Әр айналымда үш іс: 1) оқиғаларды оқу, 2) ойын күйін жаңарту, 3) экранды қайта салу.
running = True
while running:
    # 1. Оқиғалар
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # 2. Жаңарту (әзірге бос)
    # 3. Салу
    screen.fill((0, 0, 0))
    pygame.display.update()

pygame.quit()

8-сыныптағы while циклі есіңде ме? Ойын циклі — соның «ұзын өмірлі» түрі: шарты running айнымалысы, ол False болғанда (терезе жабылғанда) ғана тоқтайды. Экрандағы «қозғалыс» — шын мәнінде секундына ондаған рет қайта салынған суреттер.

🎞️
Аналогия: ойын циклі — кино проекторы: секундына 30–60 кадр көрсетеді. Әр кадрда: «не өзгерді?» (оқиғалар) → «кейіпкерлер қайда?» (жаңарту) → «көрсет!» (салу). Кадрлар тез ауысқанда көз қозғалысты көреді.

Циклдің жылдамдығын БАҚЫЛАУ керек — компьютер қуатты болса, цикл секундына мыңдаған рет айналып, ойын тым тез жүруі мүмкін. Сондықтан pygame.time.Clock() объектісі қолданылады:

FPS = 60
clock = pygame.time.Clock()

running = True
while running:
    clock.tick(FPS)   # циклді 1/60 секундқа кідіртеді
    # ...

FPS (frames per second) — секундына салынатын кадр саны. clock.tick(FPS) — әр айналымды FPS шамасына сай кідіртіп, ойынды барлық компьютерде БІРДЕЙ жылдамдықпен жүргізеді (мыс. FPS=60 — секундына тұрақты 60 кадр).

Оқиғалар (events)
Анықтама
Оқиға (event) — пайдаланушының немесе жүйенің әрекеті: терезені жабу (QUIT), перне басу (KEYDOWN), тінтуір қозғалысы (MOUSEMOTION). pygame.event.get() — жиналған оқиғалар тізімін қайтарады.

Оқиғалар ТІЗІМГЕ жиналады (4-бөлімдегі тізімдер!): for event in pygame.event.get() — соларды бір-бірлеп қараймыз. event.type — оқиғаның түрі; QUIT түрін көрсек — running = False, цикл аяқталады.

⚠️
Жиі қате: QUIT өңдеуді жазбау — терезе жабылмай «қатып қалады». Тағы бірі: pygame.display.update()-ты ұмыту — бәрін салсаң да экранда ЕШТЕҢЕ көрінбейді: update() — «дайын кадрды көрсет» командасы.
RGB түстері
Анықтама
RGB — түсті үш санмен беру: (Red, Green, Blue), әрқайсысы 0-ден 255-ке дейін. screen.fill((R, G, B)) — терезені сол түспен бояйды.
ТүсRGB коды
Қара(0, 0, 0)
Ақ(255, 255, 255)
Қызыл(255, 0, 0)
Жасыл(0, 255, 0)
Көк(0, 0, 255)
Сары(255, 255, 0)

7-сыныптағы ақпаратты кодтау есіңде ме? Әр канал 0–255 — дәл бір байт: түс 3 байтпен кодталады, барлығы 256³ ≈ 16,7 млн түс.

Фигуралар салу
Анықтама
pygame.draw модулі геометриялық фигураларды (шеңбер, тіктөртбұрыш, түзу) экранға салуға арналған.
КомандаСинтаксисіПараметрлері
Шеңберpygame.draw.circle(screen, color, pos, radius, width)pos=[x,y] — центр, radius — радиус, width=0 болса — толық боялған дөңгелек
Тіктөртбұрышpygame.draw.rect(screen, color, rect, width)rect=[x,y,ені,биіктігі] — сол жақ жоғарғы бұрыш пен өлшемдер
Түзуpygame.draw.line(screen, color, start, end, width)start=[x1,y1], end=[x2,y2] — түзудің басы мен соңы
pygame.draw.circle(screen, [93, 68, 255], [170, 60], 50, 0)
pygame.draw.rect(screen, [255, 0, 0], [80, 130, 180, 180], 0)
pygame.draw.line(screen, [0, 255, 33], [50, 100], [50, 300], 5)

Әр команданың бірінші параметрі — қай бетке (screen) салу керектігі, екіншісі — түс (RGB тізім). Фигураларды screen.fill()-ден КЕЙІН, ал pygame.display.update()-тен БҰРЫН шақыру керек — цикл ішінде дәл осы ретпен.

🎯 ҰБТ байланысы
PyGame тікелей ҰБТ-да аз, бірақ оның ұғымдары басқа блоктарда бар.
1
RGB кодтау — «Ақпаратты кодтау» блогының тұрақты сұрағы (3 байт = 16,7 млн түс).
2
Ойын циклі — while циклінің қолданбалы мысалы: шарт, тоқтау белгісі.
3
Кітапхана/модуль ұғымы, import командасы.
Сабақ қорытындысы
  • PyGame — 2D ойын кітапханасы: pip install pygame → import pygame.
  • Бастау: pygame.init() → set_mode((ені, биіктігі)) → set_caption.
  • Ойын циклі: while running: оқиғалар → жаңарту → салу (fill + update).
  • QUIT оқиғасы — терезені жабу; өңдемесе терезе «қатып қалады».
  • RGB: (0,0,0) — қара, (255,255,255) — ақ; әр канал — 1 байт.