Жаңа тақырыпты
түсіндіру.
Көлікті
солға, оңға, алға және артқа жылжыту үшін бізге Сar класына
әдістерді қосу керек. Содан кейін пернелерді басу оқиғасына жауап
қату үшін программаның негізгі цикліне event handlers-ті қосамыз.
Ойыншы пернетақтада көрсеткіш пернелерін пайдаланған кезде, біз
көлікті экранда жылжыту үшін өзіміздің әдістерді шақыратын
боламыз.
MoveRight
() әдісі оңға жылжуға жауап береді және екі аргумент қабылдайды.
Біріншісі белгісіз және self деп аталады. Бұл ағымдағы нысанға
жатады. Екіншісі pixels деп аталады және көлікті жылжыту үшін
пайдаланатын пиксельдер санына қатысты. Нысанның ағымдағы x
координатасына пиксельдерді қосу:
def
moveRight(self, pixels):
self.rect.x += pixels
Сол
принцип бойынша moveLeft ()
әдісін
қосамыз:
def
moveRight(self, pixels):
self.rect.x -= pixels
Басты
циклді жаңартамыз:
while
check:
for event
in pygame.event.get():
if
event.type == pygame.QUIT:
check =
False
elif
event.type == pygame.KEYDOWN:
if
event.key == pygame.K_x:
check =
False
keys =
pygame.key.get_pressed()
if
keys[pygame.K_LEFT]:
playerCar.moveLeft(5)
if
keys[pygame.K_RIGHT]:
playerCar.moveRight(5)
Перне ОҢҒА және СОЛҒА қарай
басылғанда, мәшине 5 пиксельге x осі бойымен жылжиды.
Практикалық
жұмыс
3-ші және 4-суреттерде
«Футболшы» ойынының ойын
терезесі берілген. Ойын
программасының кодында
әрбір блоктардың қызметтері
көрсетілген (1-код).
Компьютерде
орындаңдар.
1-код. «Футболшы» ойынының
программа коды
import pygame, sys
# Доптың спрайтын құру, доп
класын таныстырады
class
MyBallClass(pygame.sprite.Sprite):
def __init__(self, image_file,
speed, location):
pygame.sprite.Sprite.__init__(self)
self.image =
pygame.image.load('futball.png')
#Доптың өлшемдерін береді (30 х
30 пиксель)
self.image=pygame.transform.scale(self.image,
(30,
30))
self.rect =
self.image.get_rect()
self.rect.left, self.rect.top =
location
self.speed = speed
#Допты қозғалту
блогы
def move(self):
global score, score_surf,
score_font
self.rect =
self.rect.move(self.speed)
#Доп қабырғалармен
соқтығысқанда
жылдамдығын кері
өзгертеді
if self.rect.left < 0 or
self.rect.right >
screen.get_width():
self.speed[0] =
-self.speed[0]
#Доп әр рет жоғары қабырғаға
соғылғанда 1- ұпай
қосады
if self.rect.top <= 0
:
self.speed[1] =
-self.speed[1]
score = score + 1
#Ұпайдың өзгерісін str жолдық
функциясы
көмегімен терезеге
жазады
score_surf =
score_font.render(str(score), 1, (0, 0,
0))
# Ойыншының спрайтын және
класын
таныстырады
class
MyPaddleClass(pygame.sprite.Sprite):
def __init__(self, location =
[0,0]):
pygame.sprite.Sprite.__init__(self)
self.image =
pygame.image.load('futbolist1.png')
#Ойыншының ойын алаңындағы
өлшемдерін
береді(150 х 220
пиксель)
self.image=pygame.transform.scale(self.image,
(150,
220))
self.rect =
self.image.get_rect()
self.rect.left, self.rect.top =
location
pygame.init()
screen =
pygame.display.set_mode([460,320])
pygame.display.set_caption('Футболшы ойыны
жобасы' )
clock =
pygame.time.Clock()
myBall =
MyBallClass('futbolist.png', [10,20], [20, 20])
ballGroup =
pygame.sprite.Group(myBall)
paddle = MyPaddleClass([270,
150])
#Ойыншыға «өмір» тағайындайды (
бір ойын
кезінде 3 доп
береді)
lives = 3; score = 0
score_font =
pygame.font.Font(None, 50)
#Қаріп нысанын
құрады
score_surf =
score_font.render(str(score), 1, (0, 0, 0))
score_pos = [10, 10]; done =
False; running = True
#Негізгі программа бөлігін іске
қосатын цикл
while running:
clock.tick(30)
# Ойынға артқы фон ретінде
футбол алаңын
жүктейді
pole_surf =
pygame.image.load('pole.png')
pole_rect =
pole_surf.get_rect(center=(230, 160))
screen.blit(pole_surf,
pole_rect)
for event in
pygame.event.get():
if event.type ==
pygame.QUIT:
running = False
# Ойынды тінтуірмен басқарады
(пернеге
ауыстыруға болады)
elif event.type ==
pygame.MOUSEMOTION:
paddle.rect.centerx =
event.pos[0]
# Ойыншы мен доптың соғылысын
анықтайды)
if
pygame.sprite.spritecollide(paddle, ballGroup, False):
myBall.speed[1] =
-myBall.speed[1]
# Допты қозғалтады
myBall.move()
if not done:
screen.blit(myBall.image,
myBall.rect)
screen.blit(paddle.image,
paddle.rect)
screen.blit(score_surf,
score_pos)
for i in range
(lives):
width =
screen.get_width()
screen.blit(myBall.image,
[width - 40 * i, 20])
pygame.display.flip()
# Доп алаңға түсіп кетсе бір
допты (« жанды» )
өшіреді
if myBall.rect.top >=
screen.get_rect().bottom:
lives = lives - 1
if lives == 0:
#Ойын қорытындысын ойын
терезесіне жазады
final_text1 = "Oiyn
sony"
final_text2 = "Upailar sany: "
+ str(score)
ft1_font =
pygame.font.Font(None, 70)
ft1_surf =
ft1_font.render(final_text1, 1, (255,0,0))
ft2_font =
pygame.font.Font(None, 50)
ft2_surf =
ft2_font.render(final_text2, 1,
(255,0,0))
screen.blit(ft1_surf,
[screen.get_width()/2 - \
ft1_surf.get_width()/2,
100])
screen.blit(ft2_surf,
[screen.get_width()/2 - \
ft2_surf.get_width()/2,
200])
pygame.display.flip()
done = True
else:
# 1 секундтан соң ойыншының
кейінгі «жанын» іске
қосады
pygame.time.delay(1000)
myBall.rect.topleft = [50,
50]
pygame.quit()
Дескриптор
- Ойын кейіпкерлерін
анықтайды;
Соқтығысуларды
программалайды.
Pygame программасында ойын
жасайды
Топтық жұмыс
«Футболшы» ойынының программа
кодына талдау
жасаңдар. Программаның әрбір
бөлігінің қызметіне
жеке-жеке түсініктеме
беріңдер.
Дескриптор
Pygame программасында жасалған
жұмысқа талдау
жасайды
Жұптық жұмыс
«Футболшы» ойынының негізінде
ойынның
кейіпкерлері мен программа
кодтарына өзгерістер
жасап, осыған ұқсас қандай
ойынды алуға болады?
Дескриптор
Pygame-де ойын жасаудың
маңыздылығын
тұжырымдайды
|