Спрайттар соқтығысуын анықтау

PyGame-де ойынның нәтижелерін есептеу үшін спрайттардың соқтығысуын қалай анықтауға болады?

Спрайт

Ойлан

Компьютерлік ойындардың кейіпкерлерінде қандай параметрлер болады? Өзің білетін ойыннан мысалдар келтір.

Ойын алаңында кейіпкерлердің бір-біріне әсерін (соқтығысуын) алдыңғы тақырыптардағы білімдеріңді пайдалана отырып қалай анықтауды ұсынған болар едің?

-1-

Белгілі бір сценарий бойынша әзірленген ойынның кейіпкерлерін таңдап, оларды қозғалту және ойынның нәтижелерін есептеп отыру кез келген ойынның негізгі мәселесі болып саналады. Кез келген ойынның түпкі идеясында ойыншылардың (пайдаланушы мен компьютер, пайдаланушы мен пайдаланушы) біреуі жеңу, біреуі жеңілу немесе тең ойнауы керек. Ойын белгілі бір қорытынды нәтижеге жетуі тиіс. Мұндай болмаған жағдай қарастырылып жатқан программаны ойын деп қарауға болмайды. Өткен тақырыпта ойын алаңындағы графикалық кейіпкерлердің қозғалысымен таныстық. Ендігі мәселе белгілі бір ойын мақсатына сай кейіпкердің басқа кейіпкермен әсерлесуін анықтау жолдарын қарастырайық.

-2-

Өткен тақырыптарда Pygame-де спрайт ұғымымен танысқанбыз. Енді спрайтқа толық тоқталып өтейік. Спрайт екі негізгі қасиетке ие:

1. image – спрайт арқылы бейнеленген сурет;

2. rect – спрайтты қамтитын тіктөртбұрышты аймақ.

Сурет Pygame-дегі функциялар көмегімен салынады немесе файлдан жүктеледі. Pygame кітапханасының sprite модулі бізге Sprite класын береді. Әдетте программада класпен тікелей жұмыс істемейді. Бізде pygame.sprite.Sprite класымен тікелей жұмыс істемей, осы класқа негізделген Robots кіші класын құрайық (1-код).

Robots кіші класы

-1-

Бұл кодтағы Location айнымалысы [x, y] координатасын көрсетеді. Біз қарастырған жағдайда тіктөртбұрыштың ішіндегі спрайтқа left және top атрибуты берілген. Біз Robots класын құруды үйрендік. Қажет болған жағдайда осы кластың бірнеше көшірмесін жасау енді біз үшін қиын болмайды. Ол үшін for циклін қолданамыз (2-код).

-2-

Енді осы программа үзінділерін біріктіріп, толық іске қосылған программа кодын қарастырайық (3-код). 3-кодтағы программа іске қосылғанда, экранда 4 роботтың суреті екі қатарда пайда болады (1-сурет). Программа көмегімен циклді пайдаланып, қалаған сандағы роботтарды экранда көрсетуге болады.

-3-

3-кодта берілген программа қозғалыссыз тұрған 4 роботты экранда көрсетеді. «Роботтардың барлығын қозғалысқа келтіру үшін не істеу керек?» деген сұрақ туады. Бұл үшін move() әдісін қолданайық. Біз роботтарды Robots класының көшірмелері ретінде құрдық. Енді сол класс көмегімен роботтарды қозғалтайық. Төмендегі программа кодының үзіндісін қарастырайық.

1-сурет. Роботтар

Speed

Pygame кітапханасының sprite модулі move() әдісіне ие. Бұл әдіске speed параметрі беріледі. Speed – спрайттың жылдамдығын көрсететін шама. Сонымен бірге робот спрайтының қабырғамен соқтығысуын бақылап отыру керек. 3-кодтағы Robots класына move() әдісі мен Speed қасиетін қосамыз.

def __init__(self, image_file, location, speed) қатарында алдыңғы программа кодынан ерекшелігі, speed (жылдамдық) қосылған. Төмендегі қатарларда роботтың бастапқы орнымен бірге, оның жылдамдығын да беріп отырады.

speed = [choice([-2, 2]), choice([-2, 2])]
robot = Robots(img_file, location,speed).

2-сурет. Спрайттар соқтығысы

Pygame-модулінде sprite класында spritecollide() функциясы спрайттардың соқтығысуын анықтайды (2-сурет). Спрайттардың соқтығысуын анықтау 3 кезеңнен тұрады.

1. Спрайтты спрайттар тобынан өшіреміз.
2. Бұл спрайттың топтағы басқа спрайттармен соқтығысуын тексереміз.
3. Спрайтты қайта топқа қосамыз.

5-программа кодының def animate(group) бөліміндегі for циклі дәл осы жұмысты орындайды.

Ойыңды тұжырымда

Топтық жұмыс

«Роботтардың әсерлесу» жобасын талдаңдар. Әрбір программа блоктарының қызметін анықтап, жазыңдар.

Жұптық жұмыс

«Роботтардың әсерлесу» жобасына төмендегі өзгерістерді енгізіп, «Ақ көгершін» жобасына ауыстыр (3-сурет). Ол үшін программа кодында төмендегі өзгерістерді жасаудың жолын ұсын:
1. Жобаның тақырыбын ауыстыру;
2. Жобадағы робот суретін ақ көгершін суретіне ауыстыру;
3. Экрандағы ақ көгершіндердің санын 4-еуге ауыстыру.

Жеке жұмыс

1. Спрайттың қандай қасиеттері бар?

2. 1-программа кодында Robots класын құру қалай іске асады? Түсіндір.

3. аnimate() функциясының қызметі не?

4. Спрайттардың соқтығысуын анықтау алгоритмі қанша қадамнан тұрады?

Өтінемін күте тұрыңыз