نحوه برنامه ریزی یک بازی در Python با Pygame (همراه با تصاویر)

فهرست مطالب:

نحوه برنامه ریزی یک بازی در Python با Pygame (همراه با تصاویر)
نحوه برنامه ریزی یک بازی در Python با Pygame (همراه با تصاویر)

تصویری: نحوه برنامه ریزی یک بازی در Python با Pygame (همراه با تصاویر)

تصویری: نحوه برنامه ریزی یک بازی در Python با Pygame (همراه با تصاویر)
تصویری: این بهترین و ایمن ترین راه برای باز کردن فایل ها در پایتون است 2024, ممکن است
Anonim

این مقدمه ای برای Pygame برای افرادی است که از قبل پایتون را می شناسند. این مقاله مراحل ساخت یک بازی ساده را آموزش می دهد که باعث می شود بازیکن از توپ های تندرست فرار کند.

مراحل

قسمت 1 از 8: نصب Pygame

مرحله 1. Pygame را بارگیری کنید

آن را برای پلتفرم خود از https://www.pygame.org/download.shtml پیدا کنید.

مرحله 2. نصب کننده را اجرا کنید

مرحله 3. بررسی کنید که نصب کار کرده است

یک ترمینال پایتون را باز کنید. "وارد کردن بازی بازی" را تایپ کنید. اگر خطایی مشاهده نمی کنید ، Pygame با موفقیت نصب شد.

    وارد کردن pygame

قسمت 2 از 8: راه اندازی پنجره اساسی

مرحله 1. یک فایل جدید باز کنید

مرحله 2. وارد کردن Pygame

Pygame کتابخانه ای است که دسترسی به توابع گرافیکی را فراهم می کند. اگر می خواهید اطلاعات بیشتری در مورد نحوه عملکرد این توابع داشته باشید ، می توانید آنها را در وب سایت Pygame جستجو کنید.

    وارد کردن pygame از pygame.locals import *

مرحله 3. وضوح پنجره را تنظیم کنید

شما یک متغیر جهانی برای وضوح صفحه نمایش ایجاد می کنید تا بتوانید در قسمت های مختلف بازی به آن اشاره کنید. همچنین یافتن آن در بالای فایل آسان است تا بعداً بتوان آن را تغییر داد. برای پروژه های پیشرفته ، قرار دادن این اطلاعات در یک فایل جداگانه ایده بهتری خواهد بود.

    وضوح = (400 ، 300)

مرحله 4. برخی از رنگ ها را تعریف کنید

رنگهای pygame عبارتند از (RBGA که در مقادیر بین 0 تا 255 قرار دارند. مقدار آلفا (A) اختیاری است اما سایر رنگها (قرمز ، آبی و سبز اجباری است).

    سفید = (255 ، 255 ، 255) سیاه = (0 ، 0 ، 0) قرمز = (255 ، 0 ، 0)

مرحله 5. صفحه را اولیه کنید

از متغیر وضوح که قبلاً تعریف شده است استفاده کنید.

    screen = pygame.display.set_mode (وضوح تصویر)

مرحله 6. یک حلقه بازی بسازید

اقدامات خاصی را در هر فریم از بازی ما تکرار کنیم. یک حلقه ایجاد کنید که همیشه تکرار شود و همه این اقدامات را انجام دهید.

    در حالی که True:

مرحله 7. صفحه را رنگ آمیزی کنید

    screen.fill (سفید)

مرحله 8. صفحه را نمایش دهید

اگر برنامه را اجرا کنید ، صفحه سفید می شود و سپس برنامه خراب می شود. این به این دلیل است که سیستم عامل رویدادهایی را به بازی ارسال می کند و بازی هیچ کاری با آنها نمی کند. هنگامی که بازی رویدادهای کنترل نشده زیادی دریافت کند ، خراب می شود.

    while True:… pygame.display.flip ()

مرحله 9. رسیدگی به رویدادها

لیستی از همه رویدادهای رخ داده در هر فریم را دریافت کنید. شما فقط به یک رویداد اهمیت می دهید ، رویداد ترک. این زمانی رخ می دهد که کاربر پنجره بازی را ببندد. این همچنین از خرابی برنامه ما به دلیل حوادث زیاد جلوگیری می کند.

    while True:… برای رویداد در pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

مرحله 10. آن را امتحان کنید

در اینجا کد باید به نظر برسد:

    import pygame from pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame.display.set_mode (وضوح) while True: screen.fill (سفید) pygame.display.flip () برای رویداد در pygame.event.get (): if event.type == QUIT: pygame.quit ()

قسمت 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 (خود ، سطح): pygame.draw.circle (سطح ، سیاه ، (self.x ، self.y) ، self.radius)

مرحله 3. یک نمونه از کلاس تهیه کنید و همچنین به حلقه بازی بگویید که توپ را در هر حلقه بکشید

    ball = Ball () while True:… ball.draw (صفحه)

مرحله 4. جسم را حرکت دهید

یک تابع ایجاد کنید که موقعیت شی را به روز کند. این تابع را در هر حلقه بازی فراخوانی کنید.

    کلاس توپ:… def update (self): self.x += self.dx self.y += self.dy

مرحله 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. آن را امتحان کنید

در اینجا کد باید به نظر برسد:

    import pygame from pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame.display.set_mode (وضوح) کلاس توپ: 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 = "توپ" def قرعه کشی (خود ، سطح): 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 if (self.y <= 0 یا self.y> = وضوح [1]): self.dy *= -1 ball = Ball () clock = pygame.time. Clock () در حالی که True: screen. پر (سفید) ball.draw (صفحه) ball.update () pygame.display.flip () clock.tick (60) برای رویداد در pygame.event.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. مدیریت رویدادها در یک تابع

    class class ():… def handleEvents (self): برای رویداد در pygame.event.get (): if 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 و update در شیء ما در هر فریم را انجام دهد. اگر اجسام زیادی داشته باشید ، این امر به هم می ریزد. بیایید شیء خود را به یک آرایه اضافه کنیم و سپس همه اشیاء موجود در آرایه را در هر حلقه به روز کنیم و رسم کنیم. اکنون می توانید به راحتی یک شی دیگر اضافه کرده و موقعیت شروع متفاوتی به آن بدهید.

    کلاس بازی (): def _init _ (خود):… self.gameObjects = self.gameObjects.append (توپ ()) self.gameObjects.append (توپ (100))… def اجرا (خود): در حالی که True: خود.handleEvents () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (سفید) برای gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

مرحله 7. آن را امتحان کنید

در اینجا کد باید به نظر برسد:

    واردات pygame از pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame.display.set_mode (وضوح) کلاس توپ: 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" def draw (self، surface): 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 if (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 () برای gameObj in self.gameObjects: gameObj.update () self.screen.fill (سفید) برای gameObj در 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 draw (self، surface): pygame.draw.circle (سطح ، قرمز ، (self.x ، self.y) ، self.radius)

مرحله 3. کنترل ماوس را برای شی پخش کننده اضافه کنید

در هر فریم ، مکان ماوس را بررسی کرده و مکان اشیاء بازیکنان را در آن نقطه تنظیم کنید.

    class player:… def update (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

مرحله 4. یک شیء پخش کننده را به gameObjects اضافه کنید

یک نمونه پخش کننده جدید ایجاد کنید و آن را به لیست اضافه کنید.

    کلاس بازی (): def _init _ (خود):… self.gameObjects.append (بازیکن ())

ProgramPygamePart4
ProgramPygamePart4

مرحله 5. آن را امتحان کنید

در اینجا کد باید به نظر برسد:

    import pygame from pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame.display.set_mode (وضوح) کلاس توپ: 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 = "توپ" def قرعه کشی (خود ، سطح): 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 if (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، surface): pygame.draw.circle (سطح ، قرمز ، (self.x ، self.y) ، self.radius) def به روز رسانی (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] کلاس بازی (): def _init _ (self): pygame.init () self.screen = pygame.display.set_ حالت (وضوح) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (پخش کننده ()) 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.handleEvents () برای gameObj در خود.gameObjects: gameObj.update () self.screen.fill (سفید) برای gameObj در self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game () اجرا کن()

قسمت 6 از 8: ایجاد تعامل اشیاء با پخش کننده

مرحله 1. توابع Update را تغییر دهید

برای اینکه اجسام با هم تعامل داشته باشند ، باید به یکدیگر دسترسی داشته باشند. بیایید یک پارامتر دیگر به Update اضافه کنیم تا در لیست gameObjects منتقل شود. شما باید آن را به شی پخش کننده و اشیاء Ball اضافه کنید. اگر اشیاء بازی زیادی دارید ، وراثت می تواند به شما کمک کند همه امضاهای متد خود را یکسان نگه دارید.

    کلاس توپ:… def update (self، gameObjects):… class player:… def update (self، gameObjects):

مرحله 2. برخورد بین بازیکن و توپ را بررسی کنید

تمام اشیاء بازی را مرور کرده و بررسی کنید که آیا نوع اشیاء توپ هستند. سپس از شعاع دو شیء و فرمول فاصله برای بررسی برخورد آنها استفاده کنید. حلقه ها را به راحتی می توان بر روی آنها بررسی کرد. این بزرگترین دلیلی است که شما از شکل دیگری برای این بازی استفاده نکرده اید.

    class player:… 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. اگر بازیکن "ضربه" خورد بازی را پایان دهید

اجازه دهید فعلا بازی را رها کنید

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

مرحله 4. آن را امتحان کنید

در اینجا کد اکنون باید به نظر برسد:

    واردات pygame از pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame.display.set_mode (وضوح) کلاس توپ: 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" def draw (self، surface): 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]): self.dx *= -1 if (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، surface): 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] for gameObj in gameObjects: if gameObj.type == "ball": if (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 (وضوح) 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 () برای gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (سفید) برای gameObj در 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 () + (1000 * 2) 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 (توپ ())

مرحله 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 (توپ (xVel = تصادفی ()*2 ، yVel = تصادفی ()*2))

مرحله 4. عملکرد رسم را برطرف کنید

تابع رسم شناور را نمی پذیرد. بیایید قبل از کشیدن توپ موقعیت توپ را به اعداد صحیح تبدیل کنیم.

    کلاس توپ:… def draw (self، سطح): pygame.draw.circle (سطح ، سیاه ، (int (self.x) ، int (self.y)) ، self.radius)

مرحله 5. یک روش قرعه کشی برای کنترل کننده بازی تعریف کنید

از آنجا که یک شیء بازی است ، حلقه اصلی سعی می کند آن را ترسیم کند. شما باید یک تابع draw تعریف کنید که هیچ کاری انجام ندهد تا بازی خراب نشود.

    کلاس GameController:… def draw (self، screen): pass

مرحله 6. کنترل کننده بازی را به gameObjects اضافه کنید و 2 توپ را بردارید

بازی باید هر پنج ثانیه یک توپ ایجاد کند.

    کلاس بازی (): def _init _ (خود):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (پخش کننده ())

ProgramPygamePart6
ProgramPygamePart6

مرحله 7. آن را امتحان کنید

در اینجا کد باید به نظر برسد:

    pygame را از واردات تصادفی وارد کنید pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame. class.set_mode (وضوح) کلاس توپ: 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 = "توپ" def draw (خود ، سطح): pygame.draw.circle (سطح ، سیاه ،) (int (خود x) ، int (self.y)) ، self.radius) def update (self، gameObjects): self.x += self.dx self.y += self.dy اگر (self.x <= 0 یا خود x> = وضوح [0]): self.dx *= -1 if (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، surface): 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 در بازی اشیا: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () class GameController: def _init _ (self، interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "کنترل کننده بازی "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 _ (خود): 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 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. یک نمره به کلاس کنترل کننده بازی اضافه کنید

یک شیء فونت و یک متغیر نمره ایجاد کنید. برای نمایش نمره و افزایش نمره هر فریم در به روز رسانی ، فونت را در هر فریم ترسیم می کنید.

    کلاس GameController: def _init _ (self، interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (هیچ ، 12) def update (self، gameObjects):… self.score += 1 تساوی (خود ، صفحه): screen.blit (self.scoreText.render (خیابان (self.score) ، درست ، سیاه) ، (5 ، 5))

مرحله 2. نحوه پایان بازی را اصلاح کنید

وقتی بازیکن تصادفی را تشخیص می دهد ، از ترک آن خلاص شویم. در عوض یک متغیر در پخش کننده تنظیم می کنید که بازی می تواند آن را بررسی کند. وقتی gameOver تنظیم شد ، به روز رسانی اشیا را متوقف کنید. با این کار همه چیز در جای خود منجمد می شود تا بازیکن بتواند ببیند چه اتفاقی افتاده و نمره خود را بررسی کند. توجه داشته باشید که اشیاء هنوز در حال ترسیم هستند ، فقط به روز نمی شوند.

    class player: def _init _ (self، rad = 20):… self.gameOver = بروزرسانی غلط def (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: self.gameOver = بازی واقعی کلاس (): def _init _ (self): … self.gameOver = اجرای اشتباه (self): در حالی که True: self.handleEvents () اگر نه self.gameOver: برای gameObj در self.gameObjects: gameObj.update (self.gameObjects) اگر gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

مرحله 3. آن را امتحان کنید

در اینجا این است که کد نهایی اکنون چگونه باید باشد:

    pygame را از واردات تصادفی وارد کنید pygame.locals import * resolution = (400، 300) white = (255، 255، 255) black = (0، 0، 0) red = (255، 0، 0) screen = pygame. class.set_mode (وضوح) کلاس توپ: 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 = "توپ" def draw (خود ، سطح): pygame.draw.circle (سطح ، سیاه ،) (int (خود x) ، int (self.y)) ، self.radius) def update (self، gameObjects): self.x += self.dx self.y += self.dy اگر (self.x <= 0 یا خود x> = وضوح [0]): self.dx *= -1 if (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" self.gameOver = قرعه کشی غلط (خود ، سطح): 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] 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 = کلاس واقعی GameController: def _init _ (self، interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (1000*2) خود. type = "game controller" self.score = 0 self.scoreText = pygame.font. Font (None، 12) 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)) self.score + = 1 قرعه کشی (خود ، صفحه): 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 (پلیر ()) self.gameOver = غلط def handleEvents (self): برای رویداد در pygame.event.get (): if ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () if not 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 () بازی (). اجرا ()

توصیه شده: