Ինչպես ծրագրավորել խաղ Python- ում Pygame- ով (նկարներով)

Բովանդակություն:

Ինչպես ծրագրավորել խաղ Python- ում Pygame- ով (նկարներով)
Ինչպես ծրագրավորել խաղ Python- ում Pygame- ով (նկարներով)

Video: Ինչպես ծրագրավորել խաղ Python- ում Pygame- ով (նկարներով)

Video: Ինչպես ծրագրավորել խաղ Python- ում Pygame- ով (նկարներով)
Video: How To Install Python, Setup Virtual Environment VENV, Set Default Python System Path & Install Git 2024, Մայիս
Anonim

Սա Pygame- ի ներածություն է այն մարդկանց համար, ովքեր արդեն գիտեն Python- ը: Այս հոդվածը կսովորեցնի ձեզ պարզ խաղ կառուցելու քայլերը, որոնցում խաղացողը խուսափում է բարձրահասակ գնդակներից:

Քայլեր

Մաս 1 8 -ից. Pygame- ի տեղադրում

Քայլ 1. Ներբեռնեք Pygame:

Գտեք այն ձեր հարթակի համար https://www.pygame.org/download.shtml- ից:

Քայլ 2. Գործարկեք տեղադրիչը:

Քայլ 3. Ստուգեք, որ տեղադրումն աշխատել է:

Բացեք Python տերմինալ: Մուտքագրեք «ներմուծվող պիգամ»: Եթե սխալներ չեք տեսնում, ապա Pygame- ը հաջողությամբ տեղադրվեց:

    ներմուծել pygame

Մաս 2 8 -ից. Հիմնական պատուհանի տեղադրում

Քայլ 1. Բացեք նոր ֆայլ:

Քայլ 2. Ներմուծեք Pygame:

Pygame- ը գրադարան է, որն ապահովում է գրաֆիկական գործառույթների հասանելիություն: Եթե ցանկանում եք ավելի շատ տեղեկատվություն, թե ինչպես են աշխատում այս գործառույթները, կարող եք դրանք փնտրել Pygame կայքում:

    pygame- ից ներմուծել pygame.locals ներմուծում *

Քայլ 3. Սահմանեք պատուհանի լուծաչափը:

Էկրանի լուծաչափի համար դուք գլոբալ փոփոխական եք ստեղծելու, որպեսզի այն կարող է հղվել խաղի մի քանի մասերում: Նաև հեշտ է գտնել ֆայլի վերևում, որպեսզի այն հետագայում փոխվի: Advancedարգացած նախագծերի համար այս տեղեկատվությունը առանձին ֆայլում դնելը ավելի լավ գաղափար կլիներ:

    լուծում = (400, 300)

Քայլ 4. Որոշեք որոշ գույներ:

Pygame- ի գույներն են (RBGA, որոնք տատանվում են 0 -ից 255 -ի միջև: Ալֆա արժեքը (A) պարտադիր չէ, բայց մնացած գույները (կարմիրը, կապույտը և կանաչը պարտադիր են):

    սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0)

Քայլ 5. Նախագծեք էկրանը:

Օգտագործեք բանաձևի փոփոխականը, որը սահմանվել էր ավելի վաղ:

    էկրան = pygame.display.set_mode (լուծում)

Քայլ 6. Կատարեք խաղային հանգույց:

Կրկնեք որոշակի գործողություններ մեր խաղի յուրաքանչյուր շրջանակում: Կատարեք մի հանգույց, որը միշտ կկրկնվի այս բոլոր գործողությունները շրջանցելու համար:

    իսկ ճշմարիտ:

Քայլ 7. Գունավորեք էկրանը:

    էկրան. լրացնել (սպիտակ)

Քայլ 8. Displayուցադրել էկրանը:

Եթե գործարկեք ծրագիրը, էկրանը սպիտակ կդառնա, այնուհետև ծրագիրը կփլուզվի: Դա պայմանավորված է նրանով, որ օպերացիոն համակարգը իրադարձություններ է ուղարկում խաղին, և խաղը ոչինչ չի անում դրանց հետ: Երբ խաղը կստանա չափազանց շատ չկառավարվող իրադարձություններ, այն կփլուզվի:

    իսկ True:… pygame.display.flip ()

Քայլ 9. Կարգավորել իրադարձությունները:

Ստացեք յուրաքանչյուր շրջանակում տեղի ունեցած բոլոր իրադարձությունների ցանկը: Ձեզ մտահոգում է միայն մեկ իրադարձություն ՝ դադարեցնելու իրադարձությունը: Դա տեղի է ունենում, երբ օգտագործողը փակում է խաղի պատուհանը: Սա նաև թույլ չի տա, որ մեր ծրագիրը խափանվի շատ իրադարձությունների պատճառով:

    իսկական ՝…… pygame.event.get- ի իրադարձության համար (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Քայլ 10. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի ծածկագիրը այժմ.

    pygame- ից pygame.locals ներմուծում * լուծում = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame.display.set_mode բանաձեւը) իսկ True: screen.fill (սպիտակ) pygame.display.flip () pygame.event.get- ում () իրադարձության համար.

Մաս 3 -ից 8 -ը. Խաղի օբյեկտ պատրաստելը

Քայլ 1. Ստեղծեք նոր դասարան և կոնստրուկտոր:

Սահմանեք օբյեկտի բոլոր հատկությունները: Դուք նաև տրամադրում եք կանխադրված արժեքներ բոլոր հատկությունների համար:

    դասի գնդակ ՝ def _init _ (ինքնուրույն, xPos = լուծում [0] / 2, yPos = լուծում [1] / 2, xVel = 1, yVel = 1, rad = 15) ՝ self.x = xPos self.y = yPos ինքն.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ"

Քայլ 2. Սահմանեք, թե ինչպես նկարել օբյեկտը:

Օգտագործեք կոնստրուկտորում սահմանված հատկությունները `գնդակը որպես շրջան նկարելու, ինչպես նաև մակերեսը օբյեկտի վրա գծելու գործառույթի մեջ փոխանցելու համար: Մակերեսը կլինի էկրանի օբյեկտը, որը ստեղծվել է ավելի վաղ բանաձևի միջոցով:

    def draw (self, մակերես). pygame.draw.circle (մակերեսային, սև, (self.x, self.y), self.radius)

Քայլ 3. Կատարեք դասի օրինակ, ինչպես նաև ասեք խաղի հանգույցին, որ գնդակը գծի յուրաքանչյուր օղակում:

    գնդակ = Գնդակ () իսկ ճշմարիտ ՝… գնդակ: նկարել (էկրան)

Քայլ 4. Կատարեք օբյեկտի շարժը:

Ստեղծեք գործառույթ, որը կթարմացնի օբյեկտի դիրքը: Functionանգահարեք այս գործառույթը յուրաքանչյուր խաղի հանգույցում:

    դասի գնդակ.… def թարմացում (ես): self.x += self.dx self.y += self.dy

Քայլ 5. Սահմանափակեք շրջանակի արագությունը:

Գնդակը իսկապես արագ կշարժվի, քանի որ խաղային օղակը վայրկյանում հարյուրավոր անգամներ է աշխատում: Օգտագործեք Pygame- ի ժամացույցը ՝ շրջանակի արագությունը մինչև 60 կ / վրկ սահմանափակելու համար:

    ժամացույց = pygame.time. Clock () իսկ True:… clock.tick (60)

Քայլ 6. Գնդակը պահեք էկրանին:

Թարմացման գործառույթում ավելացրեք ստուգումներ ՝ գնդակը ուղղելու համար, եթե այն հարվածում է էկրանի եզրերից մեկին:

    դասի գնդակ.… def թարմացում (ինքն):… եթե (self.x <= 0 կամ self.x> = լուծում [0]): self.dx *= -1 եթե (self.y <= 0 կամ self.y > = լուծում [1]). self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Քայլ 7. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի ծածկագիրը այժմ.

    pygame- ից pygame.locals ներմուծում * լուծում = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame.display.set_mode բանաձև) դաս գնդակ. yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ" def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, սև, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy եթե (self.x <= 0 կամ self.x> = լուծում [0]) ՝ self.dx *= -1 եթե (self.y <= 0 կամ self.y> = լուծում [1]): self.dy *= -1 գնդակ = Գնդակ () ժամացույց = pygame.time. Clock () իսկ True: էկրան: լրացնել (սպիտակ) ball.draw (էկրան) ball.update () pygame.display.flip () clock.tick (60) pygame.event.get.get- ի իրադարձության համար (): if event.type == QUIT: pygame.quit ()

Մաս 4 -ից 8 -ը ՝ Խաղի կազմակերպում

Քայլ 1. Օգտագործեք դասերը `ամեն ինչ կազմակերպելու համար:

Խաղը ավելի է բարդանալու: Օգտագործեք օբյեկտի վրա հիմնված տեխնիկա `ձեր կոդը կազմակերպելու համար:

Քայլ 2. Խաղի հանգույցը դարձրեք դասարան:

Քանի որ մեր խաղն այժմ ունի տվյալներ, ներառյալ ձեր խաղային օբյեկտներն ու գործառույթները, իմաստ ունի ձեր խաղային հանգույցը դասի վերածել:

    դասի խաղ ():

Քայլ 3. Ավելացրեք կոնստրուկտոր:

Այստեղ դուք կստեղծեք որոշ խաղային օբյեկտներ, կստեղծեք մեր էկրանը և ժամացույցը և կսկսեք Pygame- ը: Pygame- ը պետք է նախաստորագրվի ՝ որոշակի գործառույթներ օգտագործելու համար, ինչպիսիք են տեքստը կամ ձայնը:

    դասի խաղ (): def _init _ (ինքն): pygame.init () self.screen = pygame.display.set_mode (բանաձև) self.clock = pygame.time. Clock ()

Քայլ 4. Կարգավորել իրադարձությունները գործառույթում:

    դասի խաղ ():… def handleEvents (self). pygame.event.get- ի իրադարձության համար ():

Քայլ 5. Խաղի հանգույցը դարձրեք գործառույթ:

Callանգահարեք իրադարձությունների կառավարման գործառույթը յուրաքանչյուր հանգույց:

    դասի խաղ ():… def run (self): while True: self.handleEvents () self.screen.fill (white) self.clock.tick (60) pygame.display.flip ()

Քայլ 6. Կարգավորել խաղի բազմաթիվ օբյեկտներ:

Հենց հիմա այս ծածկագիրը պետք է զանգի նկարել և թարմացնել մեր օբյեկտի յուրաքանչյուր շրջանակ: Սա խառնաշփոթ կդառնա, եթե շատ առարկաներ ունենաք: Եկեք ավելացնենք մեր օբյեկտը զանգվածին, այնուհետև թարմացնենք և գծենք զանգվածի բոլոր օբյեկտները յուրաքանչյուր հանգույց: Այժմ դուք կարող եք հեշտությամբ ավելացնել մեկ այլ օբյեկտ և տալ այլ մեկնարկային դիրք:

    դասի խաղ ()..handleEvents () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

Քայլ 7. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի ծածկագիրը այժմ.

    pygame- ից pygame.locals ներմուծում * լուծում = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame.display.set_mode բանաձև) դաս գնդակ. yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ" def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, սև, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy եթե (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 (Գնդակ ()) self.gameObjects.append (Գնդակ (100)) def handleEvents (self): pygame.event.get- ում () `if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display մատով խփել () խաղ (). վազել ()

Մաս 5 -ից 8 -ը ՝ Խաղացողի օբյեկտի ավելացում

Քայլ 1. Կատարեք խաղացողի դաս և կոնստրուկտոր:

Դուք պատրաստվում եք կատարել մեկ այլ շրջան, որը վերահսկվում է մկնիկի կողմից: Նախագծեք արժեքները կոնստրուկտորում: Շառավիղը միակ կարևոր արժեքն է:

    կարգի խաղացող ՝ def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Քայլ 2. Սահմանեք, թե ինչպես նկարել խաղացողի օբյեկտը:

Դա կլինի այնպես, ինչպես նկարեցիք խաղի մյուս առարկաները:

    կարգի խաղացող.… def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, կարմիր, (self.x, self.y), self.radius)

Քայլ 3. Ավելացրեք մկնիկի հսկողություն նվագարկիչի օբյեկտի համար:

Յուրաքանչյուր շրջանակում ստուգեք մկնիկի գտնվելու վայրը և խաղացողների օբյեկտների գտնվելու վայրը նշեք այդ կետին:

    դասի նվագարկիչ ՝… def թարմացում (ինքն): cord = pygame.mouse.get_pos () self.x = լար [0] self.y = լար [1]

Քայլ 4. Ավելացրեք խաղացողի օբյեկտ gameObjects- ին:

Ստեղծեք խաղացողի նոր օրինակ և ավելացրեք այն ցուցակին:

    դասի խաղ (): def _init _ (ինքն):… self.gameObjects.append (խաղացող ())

ProgramPygamePart4
ProgramPygamePart4

Քայլ 5. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի ծածկագիրը այժմ.

    pygame- ից pygame.locals ներմուծում * լուծում = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame.display.set_mode (բանաձև) դաս գնդակ. yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ" def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, սև, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy եթե (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, մակերես). pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (ինքն): cord = pygame.mouse.get_pos () self.x = լար [0] self.y = լար [1] դասի խաղ (): def _init _ (self): pygame.init () self.screen = pygame. ցուցադրել ռեժիմ (լուծում) 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- ում (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (սպիտակ) gameObj- ի համար self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () խաղ () վազել ()

Մաս 6 -ից 8 -ից. Օբյեկտների փոխազդեցություն խաղացողի հետ

Քայլ 1. Փոխեք Թարմացման գործառույթները:

Որպեսզի օբյեկտները փոխազդեն, նրանք պետք է միմյանց հասանելիություն ունենան: Եկեք մի այլ պարամետր ավելացնենք Update- ին ՝ խաղի օբյեկտների ցանկում անցնելու համար: Դուք պետք է այն ավելացնեք ինչպես խաղացողի, այնպես էլ գնդակի օբյեկտներին: Եթե դուք ունեք բազմաթիվ խաղային օբյեկտներ, ժառանգությունը կարող է օգնել ձեզ պահել ձեր մեթոդի բոլոր ստորագրությունները նույնը:

    դասի գնդակ.… def թարմացում (ինքնուրույն, խաղի օբյեկտներ).… դասի խաղացող.… def թարմացում (ինքնուրույն, խաղային օբյեկտներ):

Քայլ 2. Ստուգեք խաղացողի և գնդակների միջև բախումներ:

Անցեք խաղի բոլոր օբյեկտներով և ստուգեք ՝ արդյոք օբյեկտների տիպը գնդակ է: Այնուհետեւ օգտագործեք երկու օբյեկտի ճառագայթները եւ հեռավորության բանաձեւը `ստուգելու, թե արդյոք դրանք բախվում են: Օղակներն իսկապես հեշտ է ստուգել բախումները: Սա ամենամեծ պատճառն է, որ այս խաղի համար այլ կերպ չեք օգտագործել:

    կարգի խաղացող.… def update (self, gameObjects):… for gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Քայլ 3. Ավարտեք խաղը, եթե խաղացողը «խփվի»:

Առայժմ թողնենք խաղը:

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

Քայլ 4. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի ծածկագիրը հիմա.

    pygame- ից pygame.locals ներմուծում * լուծում = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame.display.set_mode բանաձև) դաս գնդակ. yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ" def վիճակագրություն (ես, մակերես). 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, մակերես). Pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] for gameObj in gameObjects: if gameObj.type == "ball": եթե (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () դասի խաղ (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (resolution) 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 (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () խաղ (). վազում ()

Մաս 7 -ից 8 -ից ՝ Խաղի վերահսկիչ ավելացնելով օբյեկտներ ստեղծելու համար

Քայլ 1. Ստեղծեք խաղերի վերահսկիչ դաս:

Խաղի վերահսկիչները պատասխանատու են խաղը «վարելու» համար: Այն տարբերվում է մեր խաղային դասից, որը պատասխանատու է մեր բոլոր առարկաները գծելու և թարմացնելու համար: Հսկիչը պարբերաբար ևս մեկ գնդակ կավելացնի էկրանին ՝ խաղը դժվարացնելու համար: Ավելացրեք կոնստրուկտոր և նախաստորագրեք որոշ հիմնական արժեքներ: Ընդմիջումը կլինի մեկ այլ գնդակի ավելացման ժամանակը:

    class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "խաղի վերահսկիչ"

Քայլ 2. Ավելացրեք թարմացման գործառույթը:

Սա կստուգի, թե որքան ժամանակ է անցել գնդակի ավելացման պահից կամ խաղի սկզբից: Եթե ժամանակը ավելի է, քան ընդմիջումը, դուք կվերականգնեք ժամանակը և կավելացնեք գնդակ:

    class GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

Քայլ 3. Տվեք գնդակներին պատահական արագություններ:

Ամեն անգամ խաղը տարբերելու համար հարկավոր է օգտագործել պատահական թվեր: Այնուամենայնիվ, գնդակների արագություններն այժմ լողացող կետի թիվ են ՝ ամբողջ թվի փոխարեն:

    class GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = պատահական ()*2, yVel = պատահական ()*2))

Քայլ 4. Ուղղեք ոչ ոքի գործառույթը:

Ոչ ոքի գործառույթը չի ընդունի բոցեր: Եկեք գնդակի դիրքը փոխենք ամբողջ թվերի, մինչև գնդակների խաղարկությունը:

    դասի գնդակ.… def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, սև, (int (self.x), int (self.y)), self.radius)

Քայլ 5. Խաղի վերահսկիչի համար սահմանեք վիճակահանության մեթոդ:

Քանի որ դա խաղի օբյեկտ է, հիմնական հանգույցը կփորձի նկարել այն: Դուք պետք է սահմանեք վիճակահանության գործառույթ, որը ոչինչ չի անում, որպեսզի խաղը չխափանվի:

    դասի GameController:… def վիճակահանություն (ինքնուրույն, էկրան). անցում

Քայլ 6. Ավելացրեք խաղի վերահսկիչը gameObjects- ին և հեռացրեք 2 գնդակը:

Այժմ խաղը պետք է յուրաքանչյուր հինգ վայրկյանը մեկ գնդակ բերի:

    դասի խաղ (): def _init _ (ինքն):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (խաղացող ())

ProgramPygamePart6
ProgramPygamePart6

Քայլ 7. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի ծածկագիրը այժմ.

    pygame- ից pygame- ից պատահական ներմուծում պատահական ներմուծում: տեղացիներ ներմուծում * բանաձև = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame: ցուցադրում self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ" def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, սև, (int (ինքն. x), int (self.y)), self.radius) def թարմացում (self, gameObjects). self.x += self.dx self.y += self.dy եթե (self.x <= 0 կամ ինքն. x> = լուծում [0]). self.dx *= -1 եթե (self.y <= 0 կամ self.y> = լուծում [1])., rad = 20). self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, մակերես). pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def թարմացում (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] for gameObj in game Օբյեկտներ. If gameObj.type == «գնդակ». * 2: pygame.quit () class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "game controller "def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Գնդակ (xVel = պատահական ()*2, yVel = պատահական ()*2)) def վիճակահանություն (ես, էկրան). Անցնել դասի խաղ (): 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 ()) def handleEvents (self). pygame.event- ի իրադարձության համար.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.լրացրեք (սպիտակ) gameObj- ի համար self.gameO- ում bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () խաղ () վարում ()

Մաս 8 -ից 8 -ը. Ավելացնել հաշիվ և խաղն ավարտված է

Քայլ 1. Խաղի վերահսկիչ դասին ավելացրեք հաշիվ:

Ստեղծեք տառատեսակի օբյեկտ և միավորի փոփոխական: Յուրաքանչյուր շրջանակի մեջ դուք նկարելու եք տառատեսակը `հաշիվը ցուցադրելու և թարմացման յուրաքանչյուր շրջանակ բարձրացնելու համար:

    class GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (Ոչ, 12) def թարմացում (self, gameObjects).… self.score += 1 def վիճակահանություն (ես, էկրան). screen.blit (self.scoreText.render (փող (self.score), True, black), (5, 5))

Քայլ 2. Փոփոխեք, թե ինչպես է ավարտվում խաղը:

Եկեք ազատվենք դադարից, երբ խաղացողը բախում հայտնաբերի: Փոխարենը խաղացողի մեջ դուք փոփոխական եք սահմանում, որը խաղը կարող է ստուգել: Երբ gameOver- ը դրված է, դադարեցրեք օբյեկտների թարմացումը: Սա կսառեցնի ամեն ինչ տեղում, որպեսզի խաղացողը տեսնի կատարվածը և ստուգի իր հաշիվը: Նկատի ունեցեք, որ օբյեկտները դեռ նկարվում են, պարզապես չեն թարմացվում:

    կարգի խաղացող..x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = Իսկական դասի խաղ (): def _init _ (self): … Self.gameOver = Սխալ def վազում (self). Իսկ True: self.handleEvents () եթե ոչ self.gameOver: for gameObj in self.gameObjects:: self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Քայլ 3. Փորձիր այն:

Ահա, թե ինչպիսին պետք է լինի պատրաստի կոդը հիմա.

    pygame- ից pygame- ից պատահական ներմուծում պատահական ներմուծում: տեղացիներ ներմուծում * բանաձև = (400, 300) սպիտակ = (255, 255, 255) սև = (0, 0, 0) կարմիր = (255, 0, 0) էկրան = pygame: ցուցադրում self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "գնդակ" def վիճակագրություն (ես, մակերես). pygame.draw.circle (մակերես, սև, (int (ինքն. x), int (self.y)), self.radius) def թարմացում (self, gameObjects). self.x += self.dx self.y += self.dy եթե (self.x <= 0 կամ ինքն. x> = լուծում [0]). self.dx *= -1 եթե (self.y <= 0 կամ self.y> = լուծում [1])., rad = 20). self.x = 0 self.y = 0 self.radius = rad self.type = "նվագարկիչ" self.gameOver = Կեղծ def վիճակահանություն (ես, մակերես). pygame.draw.circle (մակերես, կարմիր, (self.x, self.y), self.radius) def թարմացում (self, gameObjects) ՝ cord = 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 = True class 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 (Ոչ մեկը, 12) def թարմացում (self, gameObjects). if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter*1000) gameObjects.append (Գնդակ (xVel = պատահական ()*2, yVel = պատահական ()*2)) self.score + = 1 def վիճակահանություն (ես, էկրան). pygame.display.set_mode (բանաձեւ) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Խաղացող ()) self.gameOver = Կեղծ def handleEvents (self). pygame.event.get- ի իրադարձության համար (). եթե ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () եթե ոչ self.gameOver: for gameObj in self.gameObjects: gameObj.update (self.gameObjects) եթե gameObj: type == "player": self.gameOver = gameObj.gameOver self.screen.fill (սպիտակ) gameObj- ի համար self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () խաղ (). վազում ()

Խորհուրդ ենք տալիս: