مرحله اول: ساختار اولیه کد
به سراغ فایل game.py ایجاد شده بروید و محتویات قبلی آن را پاک کنید و کد زیر را به آن اضافه کنید.
# 1 - Import library
import pygame
from pygame.locals import *
# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
# 3 - Load images
player = pygame.image.load("resources/images/dude.png")
# 4 - keep looping through
while 1:
# 5 - clear the screen before drawing it again
screen.fill(0)
# 6 - draw the screen elements
screen.blit(player, (100,100))
# 7 - update the screen
pygame.display.flip()
# 8 - loop through the events
for event in pygame.event.get():
# check if the event is the X button
if event.type==pygame.QUIT:
# if it is quit the game
pygame.quit()
exit(0)
فایل را در پوشه بازی خود ذخیره کنید (پوشه ای که زیر پوشه منابع در آن قرار دارد) و با F5 آن را اجرا کنید. بیایید 8 بخش کد را که در سورس آن نشانه گذاری شده، بخش به بخش مرور کنیم:
به سراغ فایل game.py ایجاد شده بروید و محتویات قبلی آن را پاک کنید و کد زیر را به آن اضافه کنید.
# 1 - Import library
import pygame
from pygame.locals import *
# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
# 3 - Load images
player = pygame.image.load("resources/images/dude.png")
# 4 - keep looping through
while 1:
# 5 - clear the screen before drawing it again
screen.fill(0)
# 6 - draw the screen elements
screen.blit(player, (100,100))
# 7 - update the screen
pygame.display.flip()
# 8 - loop through the events
for event in pygame.event.get():
# check if the event is the X button
if event.type==pygame.QUIT:
# if it is quit the game
pygame.quit()
exit(0)
فایل را در پوشه بازی خود ذخیره کنید (پوشه ای که زیر پوشه منابع در آن قرار دارد) و با F5 آن را اجرا کنید. بیایید 8 بخش کد را که در سورس آن نشانه گذاری شده، بخش به بخش مرور کنیم:
بخش 1: import کردن کتابخانه PyGame
این بخش به شما امکان می دهد از توابع کتابخانه pygame و کتابخانه های مورد نیاز خود در برنامه استفاده کنید.
بخش 2: تنظیمات اولیه
در این بخش تنظیمات اولیه PyGame انجام می شود و پنجره نمایش و سایر موارد قابل تنظیم خواهد بود.
بخش 3: بارگذاری فایل ها و تصاویر
در این بخش تصویری را که برای خرگوش در نظر گرفته شده بارگذاری می شود و در مراحلی بعدی فایل های دیگری نیز بارگذاری خواهد شد. پس بدانید بخش سوم مربوط به بارگذاری فایل ها می باشد.
این بخش به شما امکان می دهد از توابع کتابخانه pygame و کتابخانه های مورد نیاز خود در برنامه استفاده کنید.
بخش 2: تنظیمات اولیه
در این بخش تنظیمات اولیه PyGame انجام می شود و پنجره نمایش و سایر موارد قابل تنظیم خواهد بود.
بخش 3: بارگذاری فایل ها و تصاویر
در این بخش تصویری را که برای خرگوش در نظر گرفته شده بارگذاری می شود و در مراحلی بعدی فایل های دیگری نیز بارگذاری خواهد شد. پس بدانید بخش سوم مربوط به بارگذاری فایل ها می باشد.
بخش 4: حلقه اصلی بازی
در بخش چهارم حلقه اصلی بازی وجود دارد و درون این حلقه عملیات های مخلفی انجام خواهد شد.
*** توجه: در مواردی که زبان های دیگر مانند Objective-C ، Java یا PHP از براکت های حلقه ای برای نشان دادن یک بلوک از کد برای اجرا در حلقه while یا دستور if استفاده می کنند، پایتون از تو رفتگی برای شناسایی بلوک های کد استفاده می کند. بنابراین تورفتگی مناسب در پایتون بسیار مهم است – این مهم را در ساخت بازی با پایتون در نظر داشته باشید.
بخش 5: پاک کردن صفحه نمایش قبل از ترسیم
قبل از ترسیم یا نمایش هر چیزی، صفحه نمایش با رنگ سیاه مقدار دهی شده است ولی در مراحل بعدی تصاویری به این قسمت اضافه خواهد شد.
بخش 6: اضافه کردن تصاویر به صفحه نمایش
در این بخش تصویر بارگذاری شده خرگوش، روی صفحه با مختصات x = 100 و y = 100 اضافه شده است.
در بخش چهارم حلقه اصلی بازی وجود دارد و درون این حلقه عملیات های مخلفی انجام خواهد شد.
*** توجه: در مواردی که زبان های دیگر مانند Objective-C ، Java یا PHP از براکت های حلقه ای برای نشان دادن یک بلوک از کد برای اجرا در حلقه while یا دستور if استفاده می کنند، پایتون از تو رفتگی برای شناسایی بلوک های کد استفاده می کند. بنابراین تورفتگی مناسب در پایتون بسیار مهم است – این مهم را در ساخت بازی با پایتون در نظر داشته باشید.
بخش 5: پاک کردن صفحه نمایش قبل از ترسیم
قبل از ترسیم یا نمایش هر چیزی، صفحه نمایش با رنگ سیاه مقدار دهی شده است ولی در مراحل بعدی تصاویری به این قسمت اضافه خواهد شد.
بخش 6: اضافه کردن تصاویر به صفحه نمایش
در این بخش تصویر بارگذاری شده خرگوش، روی صفحه با مختصات x = 100 و y = 100 اضافه شده است.
بخش 7: بروز کردن صفحه نمایش
در این بخش در هر مرحله صفحه نمایش به روز می شود.
بخش 8: بررسی شرایط توقف برنامه
در این بخش هر رویداد جدید بررسی می شود و در صورت برقراری شرط یا شرایط خاتمه برنامه، خروج یا ادامه بازی صادر می شود.
اگر کد را اکنون اجرا می کنید (از طریق Run \ Run Module در منوی Idle) یا F5 باید صفحه ای مشابه تصویر زیر را مشاهده کنید:
در این بخش در هر مرحله صفحه نمایش به روز می شود.
بخش 8: بررسی شرایط توقف برنامه
در این بخش هر رویداد جدید بررسی می شود و در صورت برقراری شرط یا شرایط خاتمه برنامه، خروج یا ادامه بازی صادر می شود.
اگر کد را اکنون اجرا می کنید (از طریق Run \ Run Module در منوی Idle) یا F5 باید صفحه ای مشابه تصویر زیر را مشاهده کنید:
همانطور که مشاهده می کنید تصویر خرگوش در صفحه نمایش آمده است ولی بازی خیلی ساده و بی مفهومی به نظر می رسد و خرگوش فقط روی یک پس زمینه سیاه ایستاده است. وقت آن رسیده که کمی بازی را زیبا کنیم.
This media is not supported in your browser
VIEW IN TELEGRAM
مرحله دوم: اضافه کردن منظره به بازی
در ادامه ساخت بازی با پایتون بیایید کمی شکل بازی رو با افزودن منظره زیبا کنیم. این کار را می توان با دستور screen.blit انجام داد. در پایان بخش شماره 3 یعنی Load images، پس از بارگذاری تصویر قبلی، کد زیر را اضافه کنید:
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
این کار باعث بارگذاری تصاویر و قرار دادن آنها در متغیرهای خاص می شود. حالا این تصاویر (یعنی تصویر چمن grass و قلعه castle) باید روی صفحه نمایش قرار داده شوند. اما اگر تصویر چمن را بررسی کنید، متوجه می شوید که کل سطح صفحه نمایش را پوشش نمی دهد، یعنی باید کل تصویر در صفحه نمایش 640*480 نمایش داده شود تا طور کامل آن را بپوشاند برای این کار کد زیر را به game.py در ابتدای قسمت شماره 6 (قبل از دستور screen.blit(player, (100,100))) اضافه کنید:
در ادامه ساخت بازی با پایتون بیایید کمی شکل بازی رو با افزودن منظره زیبا کنیم. این کار را می توان با دستور screen.blit انجام داد. در پایان بخش شماره 3 یعنی Load images، پس از بارگذاری تصویر قبلی، کد زیر را اضافه کنید:
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
این کار باعث بارگذاری تصاویر و قرار دادن آنها در متغیرهای خاص می شود. حالا این تصاویر (یعنی تصویر چمن grass و قلعه castle) باید روی صفحه نمایش قرار داده شوند. اما اگر تصویر چمن را بررسی کنید، متوجه می شوید که کل سطح صفحه نمایش را پوشش نمی دهد، یعنی باید کل تصویر در صفحه نمایش 640*480 نمایش داده شود تا طور کامل آن را بپوشاند برای این کار کد زیر را به game.py در ابتدای قسمت شماره 6 (قبل از دستور screen.blit(player, (100,100))) اضافه کنید:
همانطور که می بینید، دستور for ابتدا از طریق x سپس درون حلقه for داخلی، از طریق y حلقه می زند و برای پوشش عکس چمن بر روی بعد صفحه نمایش x و y ایجاد شده توسط حلقه های for رسم می کند. چند خط بعدی فقط قلعه ها یا castle ها را روی صفحه ترسیم می کند. اگر برنامه را اکنون اجرا کنید، باید چیزی شبیه به این خروجی را دریافت کنید:
حالا منظره و شکل بازی کمی دلپذیر شد در ادامه به مراحل بعدی ساخت بازی با پایتون می پردازیم.
مرحله سوم: حرکت قهرمان بازی با صفحه کلید
در این مرحله باید برخی عناصر بازی برای واقعی کردن آن را اضافه کنید، مانند این که قهرمان بازی یا همان خرگوش به فرمان صفحه کلید پاسخ دهد. برای انجام این کار، ابتدا یک روش خوب برای پیگیری اینکه کدام کلیدها در یک لحظه معین فشرده می شوند را پیاده سازی می کنید. شما می توانید این کار را به سادگی با ایجاد آرایه ای از حالت های کلیدی که وضعیت هر کلیدی را که می خواهید برای بازی استفاده کنید، نگه دارد. کد زیر را به game.py در انتهای بخش شماره 2 (پس از تنظیم ارتفاع و عرض صفحه) اضافه کنید:
در این مرحله باید برخی عناصر بازی برای واقعی کردن آن را اضافه کنید، مانند این که قهرمان بازی یا همان خرگوش به فرمان صفحه کلید پاسخ دهد. برای انجام این کار، ابتدا یک روش خوب برای پیگیری اینکه کدام کلیدها در یک لحظه معین فشرده می شوند را پیاده سازی می کنید. شما می توانید این کار را به سادگی با ایجاد آرایه ای از حالت های کلیدی که وضعیت هر کلیدی را که می خواهید برای بازی استفاده کنید، نگه دارد. کد زیر را به game.py در انتهای بخش شماره 2 (پس از تنظیم ارتفاع و عرض صفحه) اضافه کنید:
keys = [False, False, False, False]
playerpos=[100,100]
playerpos=[100,100]
کد بالا آرایه ای از کلیدهای فشرده شده را به ترتیب کلید جهت بالا، چپ، پایین و راست ثبت می کند و متغیر playerpos هم مکان بازیکن یا همان خرگوش را مشخص می کند. از آنجا که در بازی، خرگوش به موقعیت های مختلف حرکت می کند، داشتن متغیری که شامل موقعیت خرگوش باشد و سپس به سادگی خرگوش را به آن موقعیت منتقل کند، آسان تر است. اکنون باید کد موجود برای ترسیم خرگوش را برای استفاده از متغیر جدید playerpos تغییر دهید. خط زیر را در قسمت شماره 6 تغییر دهید:
screen.blit(player, (100,100))
screen.blit(player, (100,100))
به جای این دستور بالا، دستور زیر را قرار دهید.
screen.blit(player, playerpos)
در مرحله بعد، آرایه کلیدها را بر اساس فشردن کلیدها به روز کنید. PyGame با افزودن توابع event.key تشخیص فشارهای کلید را آسان می کند. در انتهای بخش شماره 8، بلافاصله پس از بررسی بلاک event.type == pygame.QUIT، این کد را (در همان سطح تورفتگی pygame.QUIT if block پس از دستور exit(0)) قرار دهید:
screen.blit(player, playerpos)
در مرحله بعد، آرایه کلیدها را بر اساس فشردن کلیدها به روز کنید. PyGame با افزودن توابع event.key تشخیص فشارهای کلید را آسان می کند. در انتهای بخش شماره 8، بلافاصله پس از بررسی بلاک event.type == pygame.QUIT، این کد را (در همان سطح تورفتگی pygame.QUIT if block پس از دستور exit(0)) قرار دهید:
شاید فکر کنید این کدها در ساخت بازی با پایتون پیچیده هستند اما اگر آن ها را به عبارات if تقسیم کنید، چندان پیچیده نیست. ابتدا بررسی کنید که آیا کلید فشار داده شده، آزاد شده است یا خیر؟ سپس بررسی می کنید که کدام کلید فشرده یا آزاد می شود، و اگر کلید فشرده یا آزاد شده، یکی از کلیدهایی است که از آن استفاده می کنید، متغیر کلیدها را متناسب با آن به روز می کنید. در نهایت، شما باید متغیر playerpos را در پاسخ به فشارهای کلید به روز کنید. کد زیر را به پایان game.py اضافه کنید (با یک سطح تورفتگی، آن را در همان سطح حلقه for قرار دهید):