PyGame кітапханасы. Ойын терезесі
Осы бөлімнің соңында сенде ӨЗ ОЙЫНЫҢ болады — кейіпкері жүгіретін, ұпайы саналатын, нағыз 2D ойын! Оны Python-ның PyGame кітапханасымен жасаймыз. Бүгін алғашқы қадам: ойынның «сахнасын» — терезені жасап, оның «жүрегін» — ойын циклін іске қосамыз. Осы құрылымды бір рет түсінсең, кез келген ойын соның үстіне салынады: Марио да, Flappy Bird та осы қаңқада тұр.
PyGame — Python тілінде 2D ойындар мен мультимедиялық қосымшалар жасауға арналған кітапхана: терезе, сурет, дыбыс, пернетақта/тінтуір — бәрі дайын.
Кітапхана — басқа біреу жазып қойған дайын код жинағы. Орнату (бір рет, терминалда): pip install pygame. Программада қосу: import 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 болғанда (терезе жабылғанда) ғана тоқтайды. Экрандағы «қозғалыс» — шын мәнінде секундына ондаған рет қайта салынған суреттер.
Циклдің жылдамдығын БАҚЫЛАУ керек — компьютер қуатты болса, цикл секундына мыңдаған рет айналып, ойын тым тез жүруі мүмкін. Сондықтан 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 кадр).
Оқиға (event) — пайдаланушының немесе жүйенің әрекеті: терезені жабу (QUIT), перне басу (KEYDOWN), тінтуір қозғалысы (MOUSEMOTION). pygame.event.get() — жиналған оқиғалар тізімін қайтарады.
Оқиғалар ТІЗІМГЕ жиналады (4-бөлімдегі тізімдер!): for event in pygame.event.get() — соларды бір-бірлеп қараймыз. event.type — оқиғаның түрі; QUIT түрін көрсек — running = False, цикл аяқталады.
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 — 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 байт.