Pythonda o'yinni Pygame bilan qanday dasturlash mumkin (rasmlar bilan)

Mundarija:

Pythonda o'yinni Pygame bilan qanday dasturlash mumkin (rasmlar bilan)
Pythonda o'yinni Pygame bilan qanday dasturlash mumkin (rasmlar bilan)

Video: Pythonda o'yinni Pygame bilan qanday dasturlash mumkin (rasmlar bilan)

Video: Pythonda o'yinni Pygame bilan qanday dasturlash mumkin (rasmlar bilan)
Video: How To Install Python, Setup Virtual Environment VENV, Set Default Python System Path & Install Git 2024, Aprel
Anonim

Bu Python -ni biladigan odamlar uchun Pygame -ga kirish. Ushbu maqola sizga o'yinchi to'plardan sakrab o'tadigan oddiy o'yinni yaratish bosqichlarini o'rgatadi.

Qadamlar

8 -qismning 1 -qismi: Pygame -ni o'rnatish

Qadam 1. Pygame -ni yuklab oling

Uni platformangiz uchun https://www.pygame.org/download.shtml saytidan toping.

Qadam 2. O'rnatuvchini ishga tushiring

Qadam 3. O'rnatish ishlaganligini tekshiring

Python terminalini oching. "Import pygame" yozing. Agar siz xato ko'rmasangiz, Pygame muvaffaqiyatli o'rnatildi.

    pygame import qilish

8dan 2 -qism: Asosiy oynani o'rnatish

Qadam 1. Yangi faylni oching

Qadam 2. Pygame -ni import qiling

Pygame - bu grafik funktsiyalariga kirishni ta'minlaydigan kutubxona. Agar siz ushbu funktsiyalar qanday ishlashi haqida ko'proq ma'lumotga ega bo'lishni istasangiz, ularni Pygame veb -saytidan qidirishingiz mumkin.

    pygame.locals -dan pygame -ni import qilish *

Qadam 3. Oyna o'lchamlarini o'rnating

Siz ekran o'lchamlari uchun global o'zgaruvchini yaratasiz, shuning uchun o'yinning bir necha qismlarida unga havola qilinadi. Faylning yuqori qismida topish oson, shuning uchun uni keyinchalik o'zgartirish mumkin. Ilg'or loyihalar uchun bu ma'lumotni alohida faylga qo'yish yaxshiroq bo'lar edi.

    piksellar sonini = (400, 300)

Qadam 4. Ba'zi ranglarni aniqlang

Pigamdagi ranglar (0 dan 255 gacha bo'lgan qiymatlar oralig'idagi RBGA. Alfa qiymati (A) ixtiyoriy, lekin boshqa ranglar (qizil, ko'k va yashil majburiy).

    oq = (255, 255, 255) qora = (0, 0, 0) qizil = (255, 0, 0)

Qadam 5. Ekranni ishga tushiring

Oldin aniqlangan o'lcham o'zgaruvchisidan foydalaning.

    ekran = pygame.display.set_mode (o'lchamlari)

Qadam 6. O'yin tsiklini yarating

O'yinimizning har bir bosqichida ma'lum harakatlarni takrorlang. Bu harakatlarning har birini aylanib o'tish uchun har doim takrorlanadigan pastadir yarating.

    rost bo'lsa:

Qadam 7. Ekranni ranglang

    ekranni to'ldirish (oq)

Qadam 8. Ekranni ko'rsatish

Agar siz dasturni ishga tushirsangiz, ekran oqarib ketadi va keyin dastur uzilib qoladi. Buning sababi shundaki, operatsion tizim o'yinni voqealarga yuboradi va o'yin ular bilan hech narsa qilmaydi. O'yin juda ko'p ishlov berilmagan hodisalarni qabul qilsa, u qulab tushadi.

    rost bo'lsa: … pygame.display.flip ()

Qadam 9. Voqealarni boshqaring

Har bir kadrda sodir bo'lgan barcha voqealar ro'yxatini oling. Siz faqat bitta tadbir haqida o'ylaysiz. Bu foydalanuvchi o'yin oynasini yopganda sodir bo'ladi. Bu, shuningdek, juda ko'p voqealar tufayli bizning dasturimiz ishdan chiqishini oldini oladi.

    while True:… pygame.event.get () dagi voqea uchun: agar event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

10 -qadam. Sinab ko'ring

Mana endi kod qanday bo'lishi kerak:

    pygame.locals -dan pygame import qilish * qaror = (400, 300) oq = (255, 255, 255) qora = (0, 0, 0) qizil = (255, 0, 0) ekran = pygame.display.set_mode (piksellar sonini) rost bo'lsa: pygame.event.get () dagi voqea uchun screen.fill (oq) pygame.display.flip (): if event.type == QUIT: pygame.quit ()

8dan 3 -qism: O'yin ob'ektini yaratish

Qadam 1. Yangi sinf va konstruktor yarating

Ob'ektning barcha xususiyatlarini o'rnating. Siz barcha xususiyatlar uchun standart qiymatlarni taqdim qilasiz.

    sinf Ball: def _init _ (o'zini, xPos = piksellar sonini [0] / 2, yPos = piksellar sonini [1] / 2, xVel = 1, yVel = 1, rad = 15): o'zini.x = xPos o'zini.y = yPos o'zini.dx = xVel self.dy = yVel self.radius = rad self.type = "ball"

Qadam 2. Ob'ektni qanday chizish kerakligini aniqlang

To'pni aylana shaklida chizish, shuningdek ob'ektni chizish funktsiyasiga sirt o'tkazish uchun konstruktorda aniqlangan xususiyatlardan foydalaning. Sirt ekranning oldingi o'lchamlari yordamida yaratilgan ob'ekt bo'ladi.

    def draw (o'zini, sirtini): pygame.draw.circle (sirt, qora, (self.x, self.y), self.radius)

3 -qadam. Sinfning misolini tuzing, shuningdek, o'yin tsikliga har bir tsiklda to'pni tortib olishni ayting

    ball = Ball () to'g'ri bo'lsa:… ball.draw (ekran)

Qadam 4. Ob'ektni harakatga keltiring

Ob'ekt o'rnini yangilaydigan funktsiyani yarating. Har bir o'yin tsiklida bu funktsiyani chaqiring.

    sinf Ball:… def update (self): self.x += self.dx self.y += self.dy

Qadam 5. Kadr tezligini cheklang

To'p juda tez harakat qiladi, chunki o'yin tsikli soniyada yuzlab marta ishlaydi. Pygame soatidan foydalanib, kadr tezligini 60 kadr / s gacha cheklang.

    soat = pygame.time. Clock () to'g'ri bo'lsa:… clock.tick (60)

Qadam 6. To'pni ekranda ushlab turing

To'p ekranning chetidan biriga tegsa, uning yo'nalishini teskari o'zgartirish uchun yangilash funktsiyasini tekshiring.

    class Ball:… def update (self):… if (self.x <= 0 or self.x> = resolution [0]): self.dx *= -1 if (self.y <= 0 yoki self.y) > = ruxsat [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

7 -qadam. Sinab ko'ring

Mana endi kod qanday bo'lishi kerak:

    pygame.locals -dan pygame import * qaror = (400, 300) oq = (255, 255, 255) qora = (0, 0, 0) qizil = (255, 0, 0) ekran = pygame.display.set_mode (rezolyutsiya) sinf Ball: def _init _ (o'zini, xPos = piksellar sonini [0] / 2, yPos = piksellar sonini [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos o'zini.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (sirt, qora, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 yoki self.x> = ruxsat [0]): self.dx *= -1 agar (self.y <= 0 yoki self.y> = piksellar sonini [1]): self.dy *= -1 ball = Ball () soat = pygame.time. Clock () rost bo'lsa: ekran. to'ldirish (oq) ball.draw (ekran) ball.update () pygame.display.flip () clock.tick (60) pygame.event.get () da voqea uchun (60): agar event.type == QUIT: pygame.quit ()

8 dan 4 qism: O'yinni tashkil qilish

Qadam 1. Hammasini tartibga solish uchun sinflardan foydalaning

O'yin murakkablashadi. Kodni tartibga solish uchun ob'ektga yo'naltirilgan texnikadan foydalaning.

2 -qadam. O'yin tsiklini sinfga aylantiring

Endi bizning o'yinimiz sizning o'yin ob'ektlaringiz va funktsiyalaringizni o'z ichiga olgan ma'lumotlarni o'z ichiga olganligi sababli, o'yin tsiklini sinfga aylantirish mantiqan.

    sinf o'yini ():

Qadam 3. Konstruktor qo'shing

Bu erda siz ba'zi o'yin ob'ektlarini ishga tushirasiz, ekran va soatimizni yaratasiz va Pygame -ni ishga tushirasiz. Matn yoki tovush kabi ba'zi xususiyatlardan foydalanish uchun Pygame -ni ishga tushirish kerak.

    sinf o'yini (): def _init _ (o'zini): pygame.init () self.screen = pygame.display.set_mode (o'lcham) self.clock = pygame.time. Clock ()

4 -qadam. Voqealarni funktsiyada boshqarish

    class game ():… def handleEvents (self): pygame.event.get () dagi voqea uchun: agar event.type == QUIT: pygame.quit ()

Qadam 5. O'yin tsiklini funktsiyaga aylantiring

Voqeani boshqarish funktsiyasini har bir pastadir deb atang.

    class game ():… def run (self): while True: self.handleEvents () self.screen.fill (oq) self.clock.tick (60) pygame.display.flip ()

Qadam 6. Bir nechta o'yin ob'ektlarini boshqaring

Hozirda ushbu kod har bir freymda ob'ektimizni chizish va yangilashni chaqirishi kerak. Agar sizda juda ko'p narsalar bo'lsa, bu tartibsiz bo'ladi. Keling, ob'ektimizni qatorga qo'shamiz, so'ngra har bir tsikldagi barcha ob'ektlarni yangilaymiz va chizamiz. Endi siz boshqa ob'ektni osongina qo'shishingiz va unga boshqa boshlang'ich pozitsiyasini berishingiz mumkin.

    sinf o'yini (): def _init _ (o'zini):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def yugurish (o'zini): ayni paytda: o'zini.handleEvents () gameObj for self.gameObjects: gameObj.update () self.screen.fill (oq) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

7 -qadam. Sinab ko'ring

Mana endi kod qanday bo'lishi kerak:

    pygame.locals -dan pygame import * qaror = (400, 300) oq = (255, 255, 255) qora = (0, 0, 0) qizil = (255, 0, 0) ekran = pygame.display.set_mode (rezolyutsiya) sinf Ball: def _init _ (o'zini, xPos = piksellar sonini [0] / 2, yPos = piksellar sonini [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos o'zini.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (sirt, qora, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 yoki self.x> = ruxsat [0]): self.dx *= -1 agar (self.y <= 0 yoki self.y> = piksellar sonini [1]): self.dy *= -1 sinf o'yini (): def _init _ (o'zini): pygame.init () o'zini o'zi ekran = pygame.display.set_mode (qaror) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): pygame.event.get () dagi voqea uchun: if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s. flip () o'yini (). ishga tushirish ()

8dan 5 -qism: O'yinchi ob'ektini qo'shish

Qadam 1. O'yinchi sinfini va konstruktorini yarating

Siz sichqoncha tomonidan boshqariladigan boshqa aylana yasaysiz. Konstruktordagi qiymatlarni boshlang. Radius - bu yagona muhim qiymat.

    sinf o'yinchisi: def _init _ (o'zini, rad = 20): o'zini.x = 0 o'zini.y = 0 o'zini.radius = rad

Qadam 2. O'yinchi ob'ektini qanday chizish kerakligini aniqlang

Boshqa o'yin ob'ektlarini chizganingiz kabi bo'ladi.

    sinf o'yinchisi:… chizish (o'z -o'zidan, sirt): pygame.draw.dumaloq (sirt, qizil, (self.x, self.y), o'z -o'zidan radius)

Qadam 3. pleer obyekti uchun sichqoncha boshqaruvini qo'shing

Har bir kadrda sichqonchaning joylashishini tekshiring va o'yinchilarning ob'ektlarini shu nuqtaga o'rnating.

    sinf o'yinchisi:… def update (o'zini): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

Qadam 4. gameObjects -ga o'yinchi obyektini qo'shing

Yangi o'yinchi misolini yarating va uni ro'yxatga qo'shing.

    sinf o'yini (): def _init _ (o'zini):… self.gameObjects.append (O'yinchi ())

ProgramPygamePart4
ProgramPygamePart4

5 -qadam. Sinab ko'ring

Mana endi kod qanday bo'lishi kerak:

    pygame.locals -dan pygame import * qaror = (400, 300) oq = (255, 255, 255) qora = (0, 0, 0) qizil = (255, 0, 0) ekran = pygame.display.set_mode (rezolyutsiya) sinf Ball: def _init _ (o'zini, xPos = piksellar sonini [0] / 2, yPos = piksellar sonini [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos o'zini.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (sirt, qora, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 yoki self.x> = ruxsat [0]): self.dx *= -1 agar (self.y <= 0 yoki self.y> = ruxsat [1]): self.dy *= -1 sinf O'yinchi: def _init _ (o'zini, rad = 20): o'zini.x = 0 o'zini.y = 0 self.radius = rad self.type = "player" def draw (self, sirt): pygame.draw.circle (sirt, qizil, (self.x, self.y), self.radius) def yangilanishi (o'zini): shnur = pygame.mouse.get_pos () self.x = sim [0] self.y = sim [1] sinf o'yini (): def _init _ (o'zini): pygame.init () self.screen = pygame.display.set_ rejimi (o'lchamlari) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (O'yinchi ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))) def handleEvents (o'zini): pygame.event.get () dagi voqea uchun: if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (oq) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). yugurish ()

8 -qismning 6 -qismi: ob'ektlarni yaratish o'yinchi bilan o'zaro aloqada bo'lish

Qadam 1. Yangilash funktsiyalarini o'zgartiring

Ob'ektlar o'zaro ta'sir qilishi uchun ular bir -biriga kirishi kerak bo'ladi. GameObjects ro'yxatidan o'tish uchun yangilanishga boshqa parametr qo'shamiz. Siz uni o'yinchi ob'ektiga ham, to'p ob'ektlariga ham qo'shishingiz kerak bo'ladi. Agar sizda juda ko'p o'yin ob'ektlari bo'lsa, meros barcha usul imzolarini bir xil saqlashga yordam beradi.

    sinf to'pi:… def yangilanishi (o'zini, gameObjects):… sinf o'yinchisi:… def yangilanishi (o'zini, gameObjects):

2 -qadam. O'yinchi va to'plar orasidagi to'qnashuvni tekshiring

O'yinning barcha ob'ektlarini ko'rib chiqing va ularning turi to'p ekanligini tekshiring. Keyin ikkita ob'ektning radiusi va masofa formulasidan foydalanib, ular to'qnashayotganini tekshiring. To'garaklarning to'qnashuvini tekshirish juda oson. Bu o'yin uchun boshqa shakl ishlatmaganingizning eng katta sababi.

    sinf o'yinchisi:… def yangilanishi (o'zini, gameObjects):… gameObj in gameObjects uchun: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y)) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Qadam 3. Agar o'yinchi "zarba" olsa, o'yinni tugating

Keling, hozircha o'yinni to'xtatamiz.

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

Qadam 4. Sinab ko'ring

Mana endi kod qanday bo'lishi kerak:

    pygame.locals -dan pygame import * qaror = (400, 300) oq = (255, 255, 255) qora = (0, 0, 0) qizil = (255, 0, 0) ekran = pygame.display.set_mode (rezolyutsiya) sinf Ball: def _init _ (o'zini, xPos = piksellar sonini [0] / 2, yPos = piksellar sonini [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos o'zini.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, sirt): pygame.draw.circle (sirt, qora, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 yoki self.x> = rezolyutsiya [0]): o'zini.dx *= -1 agar (self.y <= 0 yoki self.y> = ruxsat [1]): self.dy *= -1 sinf O'yinchi: def _init _ (o'zini, rad = 20): o'zini.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, sirt): pygame.draw.circle (sirt, qizil, (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: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () sinf o'yini (): def _init _ (o'zini): pygame.init () self.screen = pygame.display.set_mode (o'lcham) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Aktyor () self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): pygame.event.get () dagi voqea uchun: agar event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (oq) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

8 dan 7 qism: Ob'ektlarni yaratish uchun o'yin boshqaruvchisini qo'shish

Qadam 1. O'yin nazoratchi sinfini yarating

O'yin nazoratchilari o'yinni "boshqarishi" uchun javobgardir. Bu bizning barcha ob'ektlarimizni chizish va yangilash uchun javob beradigan o'yin sinfimizdan farq qiladi. Nazoratchi vaqti -vaqti bilan o'yinni qiyinlashtirishi uchun ekranga yana bir to'p qo'shib turadi. Konstruktor qo'shing va ba'zi asosiy qiymatlarni ishga tushiring. Interval boshqa to'p qo'shilishidan oldingi vaqt bo'ladi.

    GameController klassi: def _init _ (o'z -o'zidan, interval = 5): self.inter = intervaldan o'zini o'zi. keyingi = pygame.time.get_ticks () + (2 * 1000) self.type = "o'yin boshqaruvchisi"

Qadam 2. yangilash funktsiyasini qo'shing

Bu to'p qo'shilgan vaqtdan yoki o'yin boshidan qancha vaqt o'tganini tekshiradi. Agar vaqt oralig'idan ko'p bo'lsa, siz vaqtni tiklaysiz va to'p qo'shasiz.

    sinf GameController:… def yangilanishi (self, gameObjects): agar self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

3 -qadam. To'plarga tasodifiy tezlikni bering

Har safar o'yinni boshqacha qilish uchun tasodifiy raqamlardan foydalanish kerak bo'ladi. Biroq, to'plarning tezligi endi butun son o'rniga suzuvchi nuqta raqami.

    sinf GameController:… def yangilanishi (self, gameObjects): agar self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = tasodifiy ()*2, yVel = tasodifiy ()*2))

Qadam 4. Draw funktsiyasini tuzating

Draw funktsiyasi suzishni qabul qilmaydi. To'plar tortilishidan oldin to'pning o'rnini butun sonlarga aylantiraylik.

    sinf to'pi:… chizish (o'z -o'zidan, sirt): pygame.draw.circle (sirt, qora, (int (self.x), int (o'zini.y)), o'z -o'zidan radius)

Qadam 5. O'yin boshqaruvchisi uchun durang usulini aniqlang

Bu o'yin ob'ekti bo'lgani uchun asosiy halqa uni chizishga harakat qiladi. O'yin buzilmasligi uchun hech narsa qilmaydigan chizish funktsiyasini aniqlash kerak bo'ladi.

    sinf GameController:… def draw (o'z -o'zidan, ekran): o'tish

6 -qadam. O'yin boshqaruvchisini gameObjects -ga qo'shing va 2 to'pni olib tashlang

Endi o'yin har besh soniyada to'p otishi kerak.

    sinf o'yini (): def _init _ (o'zini):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (O'yinchi ())

ProgramPygamePart6
ProgramPygamePart6

7 -qadam. Sinab ko'ring

Mana endi kod qanday bo'lishi kerak:

    pygame ni tasodifiy importdan import qilish. display.set_mode (resolution) class Ball: def _init _ (self, xPos = resolution [0] / 2, yPos = resolution [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 (o'zini, sirtini): pygame.draw.circle (sirt, qora, (int (o'zini). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 yoki o'zini. x> = ruxsat [0]): self.dx *= -1 if (self.y <= 0 yoki self.y> = resolution [1]): self.dy *= -1 class Player: def _init _ (o'zini, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, sirt): pygame.draw.circle (sirt, qizil, (self.x), self.y), self.radius) def yangilanishi (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for game Ob'ektlar: agar gameObj.type == "to'p": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () sinfidagi GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "o'yin boshqaruvchisi "def update (self, gameObjects): agar self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = tasodifiy) ()*2, yVel = tasodifiy ()*2)) def chizish (o'z -o'zidan, ekran): o'tish o'yini (): def _init _ (o'zini): pygame.init () self.screen = pygame.display.set_mode (o'lchamlari)) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): pygame.event voqeasi uchun.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 self.gameO da gameObj uchun (oq) to'ldiring ob'ektlar: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

8dan 8 qism: Hisobni qo'shish va o'yin tugashi

Qadam 1. O'yinni boshqarish sinfiga ball qo'shing

Shrift obyekti va ball o'zgaruvchisini yarating. Shkafni ko'rsatish uchun har bir freymga shrift chizasiz va har bir kadrni yangilang.

    GameController klassi: def _init _ (o'z -o'zidan, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (Yo'q, 12) def yangilanishi (self, gameObjects):… self.score += 1 def. (self, ekran): screen.blit (self.scoreText.render (str (self.score), rost, qora), (5, 5))

Qadam 2. O'yin qanday tugashini o'zgartiring

Keling, o'yinchi to'qnashuvni aniqlaganida, ishdan bo'shaylik. Buning o'rniga, o'yinchi tekshirishi mumkin bo'lgan o'zgaruvchini o'rnatasiz. GameOver o'rnatilganda, ob'ektlarni yangilashni to'xtating. Bu hamma narsani joyida muzlatib qo'yadi, shunda o'yinchi nima bo'lganini ko'radi va o'z ballarini tekshiradi. E'tibor bering, ob'ektlar hali ham chizilmoqda, faqat yangilanmagan.

    sinf o'yinchisi: def _init _ (self, rad = 20):… self.gameOver = False def update (self, gameObjects):… gameObj for gameObjects: if gameObj.type == "ball": if (gameObj.x - o'zini.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = Haqiqiy sinf o'yini (): def _init _ (o'zini): … Self.gameOver = False def run (self): while True: self.handleEvents () if not.gameOver: for gameObj in self.gameObjects: gameObj.update (self.gameObjects) if gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

3 -qadam. Sinab ko'ring

Mana, tugagan kod hozir qanday bo'lishi kerak:

    pygame ni tasodifiy importdan import qilish. display.set_mode (resolution) class Ball: def _init _ (self, xPos = resolution [0] / 2, yPos = resolution [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 (o'zini, sirtini): pygame.draw.circle (sirt, qora, (int (o'zini). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 yoki o'zini. x> = ruxsat [0]): self.dx *= -1 if (self.y <= 0 yoki self.y> = rezolyutsiya [1]): self.dy *= -1 sinf O'yinchi: def _init _ (o'zini, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = Noto'g'ri chizilgan chizish (o'zini, sirtini): pygame.draw.circle (sirt, qizil, (self.x, self.y), self.radius) def update (o'zini, gameObjects): sim = pygame.mouse.get_pos () self.x = sim [0] self.y = sim [1] gameObj in gameObjects uchun: 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) o'zini. type = "game controller" self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects): agar 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 durang (o'zini, ekran)): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (qaror) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (o'zini): pygame.event.get () da voqea uchun: agar 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 in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () o'yin (). yugurish ()

Tavsiya: