Python -да ойынды Pygame көмегімен қалай бағдарламалауға болады (суреттермен)

Мазмұны:

Python -да ойынды Pygame көмегімен қалай бағдарламалауға болады (суреттермен)
Python -да ойынды Pygame көмегімен қалай бағдарламалауға болады (суреттермен)

Бейне: Python -да ойынды Pygame көмегімен қалай бағдарламалауға болады (суреттермен)

Бейне: Python -да ойынды Pygame көмегімен қалай бағдарламалауға болады (суреттермен)
Бейне: Файлдармен жұмыс 7 сынып 3 токсан 2024, Мамыр
Anonim

Бұл Python -ды білетін адамдар үшін Pygame -ге кіріспе. Бұл мақала сізге ойыншыдан секіретін доптардан бас тартатын қарапайым ойын құрудың қадамдарын үйретеді.

Қадамдар

8 бөлімнің 1 бөлігі: Pygame орнату

Қадам 1. Pygame жүктеу

Оны платформаңыз үшін https://www.pygame.org/download.shtml сайтынан табыңыз.

Қадам 2. Орнатқышты іске қосыңыз

Қадам 3. Орнатудың жұмыс істегенін тексеріңіз

Python терминалын ашыңыз. «Импорттық ойын» деп теріңіз. Егер сіз қателерді көрмесеңіз, онда Pygame сәтті орнатылды.

    pygame импорттау

8 -ден 2 -ші бөлім: Негізгі терезені орнату

Қадам 1. Жаңа файлды ашыңыз

Қадам 2. Pygame импорттаңыз

Pygame - графикалық функцияларға қол жеткізуді қамтамасыз ететін кітапхана. Егер сіз бұл функциялардың қалай жұмыс істейтіні туралы қосымша ақпарат алғыңыз келсе, оларды Pygame веб -сайтынан іздеуге болады.

    pygame.locals ішінен pygame импорттау *

Қадам 3. Терезенің ажыратымдылығын орнатыңыз

Сіз экранның ажыратымдылығы үшін жаһандық айнымалыны жасайсыз, осылайша ойынның бірнеше бөлігінде сілтеме жасай аласыз. Файлдың жоғарғы жағында табу оңай, сондықтан оны кейін өзгертуге болады. Жетілдірілген жобалар үшін бұл ақпаратты бөлек файлға қою жақсы болар еді.

    ажыратымдылық = (400, 300)

Қадам 4. Кейбір түстерді анықтаңыз

Ойынның түстері - бұл (RBGA, ол 0 мен 255 аралығында. Альфа мәні (A) міндетті емес, ал басқа түстер (қызыл, көк және жасыл) міндетті болып табылады.

    ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0)

Қадам 5. Экранды инициализациялаңыз

Бұрын анықталған ажыратымдылық айнымалысын қолданыңыз.

    экран = pygame.display.set_mode (ажыратымдылық)

Қадам 6. Ойын циклін жасаңыз

Біздің ойынның әр шеңберінде белгілі бір әрекеттерді қайталаңыз. Барлық осы әрекеттер арқылы цикл үшін әрқашан қайталанатын цикл жасаңыз.

    шындық кезінде:

Қадам 7. Экранды түрлі түсті етіп бояйды

    экранды толтыру (ақ)

Қадам 8. Экранды көрсетіңіз

Егер сіз бағдарламаны іске қоссаңыз, экран ақ түске айналады, содан кейін бағдарлама бұзылады. Бұл операциялық жүйе ойынға оқиғаларды жібереді және ойын олармен ештеңе жасамайды. Ойынға өңделмейтін оқиғалар тым көп түссе, ол бұзылады.

    ал True:… pygame.display.flip ()

Қадам 9. Оқиғаларды өңдеу

Әр кадрда болған барлық оқиғалардың тізімін алыңыз. Сіз тек бір оқиғаға, яғни оқиғадан бас тартуға тырысасыз. Бұл пайдаланушы ойын терезесін жапқанда пайда болады. Бұл сонымен қатар біздің бағдарламамыздың көптеген оқиғаларға байланысты бұзылуына жол бермейді.

    while True:… pygame.event.get () ішіндегі оқиға үшін: егер event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

10 -қадам. Байқап көріңіз

Міне, код енді қалай болуы керек:

    pygame.locals ішінен pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame.display.set_mode (ажыратымдылық) True кезінде: экран: толтыру (ақ) pygame.display.flip () pygame.event.get () ішіндегі оқиғаға:: егер event.type == QUIT: pygame.quit ()

8 -ден 3 -ші бөлім: ойын объектісін жасау

Қадам 1. Жаңа класс пен конструктор жасаңыз

Объектінің барлық қасиеттерін орнатыңыз. Сіз сондай -ақ барлық сипаттар үшін әдепкі мәндерді бересіз.

    сынып Ball: def _init _ (өзін, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball»

Қадам 2. Объектіні қалай салу керектігін анықтаңыз

Допты шеңбер ретінде салу үшін, сонымен қатар объектіні салу функциясына бетті беру үшін конструкторда анықталған қасиеттерді қолданыңыз. Беті бұрын ажыратымдылық көмегімен жасалған экрандық объект болады.

    def draw (өз бетімен, беті): pygame.draw.circle (беті, қара, (self.x, self.y), self.radius)

3 -қадам. Сыныптың үлгісін жасаңыз, сонымен қатар ойын циклына допты әр циклге салу керектігін айтыңыз

    ball = Ball () True кезінде:… ball.draw (экран)

4 -қадам. Нысанды жылжытыңыз

Нысанның орнын жаңартатын функция жасаңыз. Бұл функцияны әр ойын циклінде шақырыңыз.

    сынып Ball:… def update (өзін): self.x += self.dx өзін -өзі.y += өзін -өзі

Қадам 5. Кадр жиілігін шектеңіз

Доп өте жылдам қозғалады, себебі ойын циклы секундына жүздеген рет жүгіреді. Pygame сағатын қолданып, кадр жиілігін 60 кадр / с дейін шектеңіз.

    clock = pygame.time. Clock (), ал True:… clock.tick (60)

Қадам 6. Допты экранда ұстаңыз

Доптың экранның бір шетіне тиген жағдайда оның бағытын өзгерту үшін жаңарту функциясына тексерулер қосыңыз.

    class Ball:… def update (self):… if (self.x <= 0 or self.x> = resolution [0]): self.dx *= -1 if (self.y <= 0 немесе self.y) > = рұқсат [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Қадам 7. Жасап көріңіз

Міне, код енді қалай болуы керек:

    pygame.locals ішінен pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame.display.set_mode (ажыратымдылық) сынып Ball: def _init _ (self, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball» def draw (self, sirt): pygame.draw.circle (бет, қара, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 немесе self.x> = ажыратымдылық [0]): self.dx *= -1 егер (self.y <= 0 немесе self.y> = ажыратымдылық [1]): self.dy *= -1 шар = Ball () clock = pygame.time. Clock () while True: экран. толтыру (ақ) ball.draw (экран) ball.update () pygame.display.flip () clock.tick (60) pygame.event.get () ішіндегі оқиға үшін ()

8 -ден 4 -ші бөлім: Ойынды ұйымдастыру

Қадам 1. Барлығын ұйымдастыру үшін сыныптарды қолданыңыз

Ойын күрделене түседі. Кодыңызды реттеу үшін объектіге бағытталған әдістерді қолданыңыз.

Қадам 2. Ойын циклін сыныпқа айналдырыңыз

Біздің ойын қазір сіздің ойын объектілері мен функцияларын қамтитын деректерге ие болғандықтан, ойын циклін сыныпқа айналдырған жөн.

    сыныптық ойын ():

Қадам 3. Конструктор қосыңыз

Мұнда сіз кейбір ойын нысандарын жасайсыз, біздің экран мен сағатты жасайсыз және Pygame инициализациялайсыз. Мәтін немесе дыбыс сияқты кейбір мүмкіндіктерді пайдалану үшін Pygame инициализациясы қажет.

    сыныптық ойын (): def _init _ (өзін): pygame.init () self.screen = pygame.display.set_mode (ажыратымдылық) self.clock = pygame.time. Clock ()

Қадам 4. Функциядағы оқиғаларды өңдеу

    сынып ойыны ():… def handleEvents (өзін): pygame.event.get () ішіндегі оқиға үшін: егер event.type == QUIT: pygame.quit ()

Қадам 5. Ойын циклін функцияға айналдырыңыз

Оқиға өңдеу функциясын әрбір цикл деп атаңыз.

    сынып ойыны ():… def run (self): while True: self.handleEvents () self.screen.fill (ақ) self.clock.tick (60) pygame.display.flip ()

Қадам 6. Бірнеше ойын нысандарын өңдеңіз

Дәл қазір бұл код әр кадрға біздің объект бойынша Draw және жаңартуды шақыруы керек. Егер сізде көптеген объектілер болса, бұл қиын болады. Нысанды массивке қосамыз, содан кейін массивтегі барлық нысандарды әр циклге жаңартып, сызамыз. Енді сіз басқа нысанды оңай қосып, оған басқа бастапқы позицияны бере аласыз.

    сыныптық ойын (): def _init _ (өзін):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (өзін): ал True: өзінше.handleEvents () gameObj for self.gameObjects: gameObj.update () self.screen.fill (ақ) for gameObj for self.gameObjects: gameObj.draw (өздігінен экран) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

Қадам 7. Жасап көріңіз

Міне, код енді қалай болуы керек:

    pygame.locals ішінен pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame.display.set_mode (ажыратымдылық) сынып Ball: def _init _ (self, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball» def draw (self, sirt): pygame.draw.circle (беті, қара, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 немесе self.x> = ажыратымдылық [0]): self.dx *= -1 егер (self.y <= 0 немесе self.y> = ажыратымдылық [1]): self.dy *= -1 сыныптық ойын (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (ажыратымдылық) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (өзін): pygame.event.get () ішіндегі оқиға үшін: егер event.type == QUIT: pygame.quit () def run (self): ал True: self.handleEvent s () for gameObj for self.gameObjects: gameObj.update () self.screen.fill (ақ) gameObj for self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () ойыны (). жүгіру ()

8/5 бөлігі: Ойнатқыш объектісін қосу

Қадам 1. Ойыншы класы мен конструктор жасаңыз

Сіз тышқанмен басқарылатын басқа шеңбер жасайсыз. Конструктордағы мәндерді инициализациялаңыз. Радиус - жалғыз маңызды мән.

    сынып ойыншысы: def _init _ (өзін, рад = 20): өзін -өзі.x = 0 өзін -өзі.y = 0 өзінше.радиус = рад

Қадам 2. Ойнатқыш объектісін қалай салу керектігін анықтаңыз

Бұл басқа ойын объектілерін салғаныңыз сияқты болады.

    сынып ойыншысы:… def Draw (өзін -өзі, беті): pygame.draw.circle (беті, қызыл, (self.x, self.y), self.radius)

Қадам 3. Ойнатқыш нысанына тышқанмен басқаруды қосыңыз

Әр кадрда тінтуірдің орналасқан жерін тексеріп, ойыншылардың объектілерінің орнын осы нүктеге қойыңыз.

    сынып ойыншысы:… def update (өзін): cord = pygame.mouse.get_pos () self.x = сым [0] self.y = сым [1]

Қадам 4. gameObjects -ке ойыншы объектісін қосыңыз

Жаңа ойыншы данасын жасаңыз және оны тізімге қосыңыз.

    сыныптық ойын (): def _init _ (өзін):… self.gameObjects.append (Ойыншы ())

ProgramPygamePart4
ProgramPygamePart4

Қадам 5. Жасап көріңіз

Міне код енді қалай болуы керек:

    pygame.locals ішінен pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame.display.set_mode (ажыратымдылық) сынып Ball: def _init _ (self, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball» def draw (self, sirt): pygame.draw.circle (бет, қара, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 немесе self.x> = ажыратымдылық [0]): self.dx *= -1 егер (self.y <= 0 немесе self.y> = ажыратымдылық [1]): self.dy *= -1 класс Ойнатқыш: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = «player» def draw (self, sirt): pygame.draw.circle (бет, қызыл, (self.x, self.y), self.radius) def жаңарту (өзін -өзі): сым = pygame.mouse.get_pos () self.x = сым [0] self.y = сым [1] сыныптық ойын (): def _init _ (өзін): pygame.init () self.screen = pygame.display.set_ режим (ажыратымдылық) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))) def handleEvents (self): pygame.event.get () ішіндегі оқиға үшін: егер event.type == QUIT: pygame.quit () def run (self): ал True: self.handleEvents () gameObj for self for.gameObjects: gameObj.update () self.screen.fill (ақ) gameObj for self.gameObjects: gameObj.draw (өздігінен экран) self.clock.tick (60) pygame.display.flip () game (). жүгіру ()

8 -ден 6 -бөлім: Объектілерді жасау Ойыншымен өзара әрекеттесу

Қадам 1. Жаңарту функцияларын өзгертіңіз

Объектілер өзара әрекеттесуі үшін олардың бір -біріне қол жеткізуі қажет болады. GameObjects тізіміне өту үшін Жаңартуға басқа параметрді қосайық. Сіз оны ойыншыға да, допқа да қосуыңыз керек. Егер сізде ойын нысандары көп болса, мұрагерлік барлық әдіс қолтаңбаларын сақтауға көмектеседі.

    класс доп:… def жаңарту (өзін, gameObjects):… сынып ойнатқышы:… def жаңарту (өзін, gameObjects):

Қадам 2. Ойыншы мен доптардың соқтығысуын тексеріңіз

Ойынның барлық нысандарын қарап шығыңыз және нысандардың доп екенін тексеріңіз. Содан кейін олардың соқтығысқанын тексеру үшін екі объектінің радиусы мен қашықтық формуласын қолданыңыз. Шеңберлер қақтығыстарды тексеруге өте оңай. Бұл ойын үшін басқа пішінді пайдаланбаудың ең үлкен себебі.

    сынып ойыншысы:… def жаңарту (өзін, gameObjects):… gameObj for gameObjects үшін: егер gameObj.type == «доп»: if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y)) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Қадам 3. Егер ойыншы «соққы» алса, ойынды аяқтаңыз

Әзірге ойыннан шығуға рұқсат етіңіз.

    if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit ()

4 -қадам. Байқап көріңіз

Міне, код енді қалай болуы керек:

    pygame.locals ішінен pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame.display.set_mode (ажыратымдылық) сынып Ball: def _init _ (self, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball» def draw (self, sirt): pygame.draw.circle (бет, қара, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 немесе self.x> = ажыратымдылық [0]): өзін.dx *= -1 егер (self.y <= 0 немесе self.y> = ажыратымдылық [1]): self.dy *= -1 класс Ойнатқыш: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = «player» def draw (self, sirt): pygame.draw.circle (бет, қызыл, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for gameObjects: егер gameObj.type == «доп»: if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () сыныптық ойын (): def _init _ (өзін): pygame.init () self.screen = pygame.display.set_mode (ажыратымдылық) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ойнатқыш () self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): pygame.event.get () ішіндегі оқиға үшін: егер event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj for self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (ақ) gameObj for self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

8/7 бөлімі: Объектілерді құру үшін ойын контроллерін қосу

Қадам 1. Ойын контроллері класын жасаңыз

Ойынның контроллері ойынды «жүргізуге» жауапты. Бұл біздің барлық объектілерді салуға және жаңартуға жауап беретін ойын сыныбынан өзгеше. Контроллер ойынды қиындату үшін экранға мезгіл -мезгіл басқа доп қосады. Конструкторды қосыңыз және кейбір негізгі мәндерді баптаңыз. Аралық басқа доп қосылатын уақыт болады.

    сынып GameController: def _init _ (өзіндік, интервал = 5): self.inter = интервал self.next = pygame.time.get_ticks () + (2 * 1000) self.type = «ойын контроллері»

Қадам 2. Жаңарту функциясын қосыңыз

Бұл доп қосылған сәттен бастап немесе ойын басталғаннан бері қанша уақыт өткенін тексереді. Егер уақыт интервалдан көп болса, сіз уақытты қалпына келтіріп, доп қосасыз.

    сынып GameController:… def update (self, gameObjects): егер self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

3 -қадам. Шарларға кездейсоқ жылдамдықтарды беріңіз

Ойынды әр уақытта әр түрлі ету үшін кездейсоқ сандарды қолдану қажет болады. Доптардың жылдамдығы енді бүтін санның орнына өзгермелі нүкте санына айналды.

    сынып GameController:… def update (self, gameObjects): егер self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = кездейсоқ ()*2, yVel = кездейсоқ ()*2))

Қадам 4. Сурет салу функциясын бекітіңіз

Draw функциясы өзгермелерді қабылдамайды. Доптар тартылмас бұрын доптың орнын бүтін санға айналдырайық.

    сыныптық доп:… сурет салу (өз бетімен): pygame.draw.circle (бет, қара, (int (self.x), int (self.y)), self.radius)

Қадам 5. Ойын контроллері үшін ұтыс ойынының әдісін анықтаңыз

Бұл ойын нысаны болғандықтан, негізгі цикл оны салуға тырысады. Сізге ойынның бұзылмауы үшін ештеңе жасамайтын тарту функциясын анықтау қажет болады.

    GameController сыныбы:… def draw (self, screen): өту

Қадам 6. GameObjects ойынына ойын контроллерін қосып, 2 шарды алып тастаңыз

Енді ойын әр бес секунд сайын доп шығаруы керек.

    сыныптық ойын (): def _init _ (өзін):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Ойнатқыш ())

ProgramPygamePart6
ProgramPygamePart6

Қадам 7. Жасап көріңіз

Міне код енді қалай болуы керек:

    pygame.locals ішінен кездейсоқ импорттан pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame. display.set_mode (resolution) class Ball: def _init _ (self, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball» def draw (өзін, беті): pygame.draw.circle (беті, қара, (int (өзін -өзі). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 немесе self. x> = ажыратымдылық [0]): self.dx *= -1 if (self.y <= 0 немесе self.y> = ажыратымдылық [1]): self.dy *= -1 класс Ойыншы: def _init _ (өзін, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = «player» def draw (self, sirt): pygame.draw.circle (жер үсті, қызыл, (self.x), self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for game Нысандар: if gameObj.type == «доп»: if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () сынып GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = «ойын контроллері «def update (self, gameObjects): егер self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = random) ()*2, yVel = кездейсоқ ()*2)) def draw (өзін -өзі, экранды): сыныптық ойыннан өту (): def _init _ (өзін): pygame.init () self.screen = pygame.display.set_mode (ажыратымдылық)) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): pygame.event ішіндегі оқиға үшін.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () gameObj for self.gameObjects: gameObj.update (self.gameObjects) self.screen. Omj үшін өзінше ақ ойынға толтырыңыз (ақ) нысандар: gameObj.draw (өздігінен экран) self.clock.tick (60) pygame.display.flip () ойын (). жүгіру ()

8/8 бөлім: Ұпай қосу және ойын аяқталды

Қадам 1. Ойын контроллері сыныбына балл қосыңыз

Қаріп объектісін және балл айнымалысын жасаңыз. Сіз әр кадрға қаріпті түсіресіз, ол ұпайды көрсетеді және жаңартуда әр кадрды жоғарылатады.

    GameController сыныбы: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects):… self.score += 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5))

Қадам 2. Ойынның қалай аяқталатынын өзгертіңіз

Ойыншы соқтығысуды анықтаған кезде жұмыстан шығайық. Оның орнына сіз ойыншы тексере алатын айнымалы мәнді орнатасыз. GameOver орнатылған кезде, нысандарды жаңартуды тоқтатыңыз. Бұл ойыншының не болғанын көріп, ұпайын тексеруі үшін бәрін орнында қатырады. Назар аударыңыз, нысандар әлі де салынуда, жаңартылмаған.

    сынып Ойнатқышы: def _init _ (self, rad = 20):… self.gameOver = False def update (self, gameObjects):… gameObj for gameObjects: if gameObj.type == «ball»: if (gameObj.x - өзін.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class game (): def _init _ (self): … Self.gameOver = False def run (self): while True: self.handleEvents () self.gameOver: self.gameObjects ішіндегі gameObj үшін: gameObj.update (self.gameObjects), егер gameObj.type == «ойыншы»: self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

3 -қадам. Байқап көріңіз

Міне, дайын код келесідей болуы керек:

    pygame.locals ішінен кездейсоқ импорттан pygame импорттау * рұқсат = (400, 300) ақ = (255, 255, 255) қара = (0, 0, 0) қызыл = (255, 0, 0) экран = pygame. display.set_mode (ажыратымдылық) класы Ball: def _init _ (self, xPos = ажыратымдылық [0] / 2, yPos = ажыратымдылық [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = «ball» def draw (өзін, беті): pygame.draw.circle (беті, қара, (int (өзін -өзі). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 немесе self. x> = ажыратымдылық [0]): self.dx *= -1 if (self.y <= 0 немесе self.y> = ажыратымдылық [1]): self.dy *= -1 класс Ойыншы: def _init _ (өзін, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = «player» self.gameOver = Жалған дефицит (өзін, беті): pygame.draw.circle (беті, қызыл, (self.x, self.y), self.radius) def update (өзін, gameObjects): сым = pygame.mouse.get_pos () self.x = сым [0] self.y = сым [1] for gameObj in gameObjects: if gameObj.type == «ball»: if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius +) self.radius) ** 2: self.gameOver = TrueClass GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2*1000) self. type = «game controller» self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects): егер self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter*1000) gameObjects.append (Ball (xVel = random ()*2, yVel = random ()*2)) self.score + = 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) сыныптық ойын (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (ажыратымдылық) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (self): pygame.event.get () ішіндегі оқиға үшін: егер ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () if not.gameOver: gameObj for self.gameObjects: gameObj.update (self.gameObjects) if gameObj. type == «player»: self.gameOver = gameObj.gameOver self.screen.fill (white) for gameObj for self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () ойын (). жүгіру ()

Ұсынылған: