آموزش رایگان ساخت بازی با پایتون – ساخت بازی با کتابخانه Pygame پایتون در 10 مرحله
اگر علاقه مند به برنامه نویسی و بازی های کامپیوتری هستید پس به این موضوع فکر کرده اید که بازی های ویدئویی چگونه ساخته می شوند؟ باید گفت این کار آنقدر ها هم پیچیده نیست. در این پست قصد داریم تا ساخت بازی با پایتون را آموزش دهیم. زبان برنامه نویسی پایتون با داشتن کتابخانه های متنوع برای گیم نویسی، یک ابزار برای ساخت و توسعه بازی های کامپیوتری است. کتابخانه pygame پایتون به بهترین نحو، امکانات جالبی را برای ساخت بازی های کامپیوتری به شما ارائه می دهد. در این آموزش گام به گام در 10 مرحله، نحوه کدنویسی بازی خرگوش ها و گورکن ها را با پایتون به شما عزیزان آموزش خواهیم داد.
مقدمات اولیه و شروع کار
اگر می خواهید این آموزش را روی سیستم عامل ویندوز خود امتحان کنید و مراحل ساخت بازی با پایتون را یاد بگیرید، باید Python را نصب کنید. اگر در سیستم شما پایتون نصب نشده، می توانید از مقاله آموزش نصب پایتون با عنوان مقدمات برنامه نویسی پایتون کمک بگیرید. سعی کنید طبق این آموزش جلو بروید و قبل از هر کاری برنامه کوچکی بنویسید و اجرا کنید تا از درست کار کردن پایتون بر روی سیستم عامل خود اطمینان داشته باشید.
اگر از نصب پایتون روی سیستم خودتان مطمئن شدید با استفاده از ابزار pip، کتابخانه pygame را روی پایتون خود نصب کنید. اگر در مورد نصب کتابخانه بر روی پایتون، اشکال دارید می توانید آموزش نصب کتابخانه بر روی پایتون را مطالعه کنید. دستوری که برای نصب کتابخانه pygame وجود دارد دستور ساده زیر است.
pip install pygame
البته اگر قبلاً با پایتون کار کرده اید حتما می دانید که پایتون دارای IDE ها و محیط های برنامه نویسی متفاوتی است که می توانید گام به گام این آموزش را از طریق آنها انجام دهید در هیمن سایت هم در مورد محیط های برنامه نویسی پایتون به طور کامل صحبت شده است. اما بنا را بر این می گذاریم که هیچ IDE در سیستم شما نصب نیست و از محیط پیش فرض پایتون برای برنامه نویسی و ساخت بازی با پایتون استفاده می کنیم.
برای تأیید نصب کتابخانه، IDLE پایتون را باز کنید و دستور import pygame را تایپ کنید اگر نتیجه این دستور، خطایی در بر نداشت و ورژن pygame نشان داده شد، پس همه چیز خوب است پس از اطمینان از نصب pygame می توانیم به سراغ کد نویسی ساخت بازی با پایتون بریم.
اجرای کد پایتون از فایل
در حالی که می توانید قطعات کوتاهی از کد پایتون را در IDLE پایتون اجرا کنید اما اگر می خواهید روی برنامه های بزرگتری کار کنید (مانند ساخت بازی با پایتون)، احتمالاً می خواهید کد خود را در یک فایل ذخیره کنید تا مجبور نباشید هر بار آن را تایپ و اجرا کنید. روش های مختلفی برای اجرای برنامه پایتون به صورت فایل وجود دارد. یک راه این است که از ویرایشگر متن ساده مانند Notepad (Windows) استفاده کنید.
برای شروع، یک فایل متنی جدید باز کنید و کد پایتون خود را وارد کنید. برای شروع در IDEL shell از قسمت File گزینه New File را بزنید و کد ساده مثلاً چاپ Hello World را بزنید و F5 را برای اجرا بزنید و پس از ذخیره کردن فایل در یک مکان (در درایو C یک فولدر با نام Game ایجاد کنید) با نام game می توانید پیام Hello World را در IDEL shell مشاهده کنید. محتویات پوشه Game در درایو C هم یک فایل هست با نام game و پسوند py که در ادامه کار، کدنویسی را روی این فایل انجام خواهیم داد.
اضافه کردن منابع بازی
تا الان شما تقریباً آماده ساخت بازی با پایتون هستید. اما یک بازی بدون جلوه های گرافیکی و صوتی چنگی به دل نخواهد زد؛ پس یک فایل Zip آماده شده ای را از طریق این لینک (+) دانلود کنید و به پوشه Game داخل درایو C منتقل کنید و آن را از حالت فشرده خارج کنید تا لیستی از منابع استفاده شده در ساخت بازی با پایتون، اعم از تصاویر و صدا ها برای پروژه بازی وجود داشته باشد.
مرحله اول: ساختار اولیه کد
به سراغ فایل 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: بارگذاری فایل ها و تصاویر
در این بخش تصویری را که برای خرگوش در نظر گرفته شده بارگذاری می شود و در مراحلی بعدی فایل های دیگری نیز بارگذاری خواهد شد. پس بدانید بخش سوم مربوط به بارگذاری فایل ها می باشد.
- بخش 4: حلقه اصلی بازی
در بخش چهارم حلقه اصلی بازی وجود دارد و درون این حلقه عملیات های مخلفی انجام خواهد شد.
*** توجه: در مواردی که زبان های دیگر مانند Objective-C ، Java یا PHP از براکت های حلقه ای برای نشان دادن یک بلوک از کد برای اجرا در حلقه while یا دستور if استفاده می کنند، پایتون از تو رفتگی برای شناسایی بلوک های کد استفاده می کند. بنابراین تورفتگی مناسب در پایتون بسیار مهم است – این مهم را در ساخت بازی با پایتون در نظر داشته باشید.
- بخش 5: پاک کردن صفحه نمایش قبل از ترسیم
قبل از ترسیم یا نمایش هر چیزی، صفحه نمایش با رنگ سیاه مقدار دهی شده است ولی در مراحل بعدی تصاویری به این قسمت اضافه خواهد شد.
- بخش 6: اضافه کردن تصاویر به صفحه نمایش
در این بخش تصویر بارگذاری شده خرگوش، روی صفحه با مختصات x = 100 و y = 100 اضافه شده است.
- بخش 7: بروز کردن صفحه نمایش
در این بخش در هر مرحله صفحه نمایش به روز می شود.
- بخش 8: بررسی شرایط توقف برنامه
در این بخش هر رویداد جدید بررسی می شود و در صورت برقراری شرط یا شرایط خاتمه برنامه، خروج یا ادامه بازی صادر می شود.
اگر کد را اکنون اجرا می کنید (از طریق Run \ Run Module در منوی Idle) یا F5 باید صفحه ای مشابه تصویر زیر را مشاهده کنید:
همانطور که مشاهده می کنید تصویر خرگوش در صفحه نمایش آمده است ولی بازی خیلی ساده و بی مفهومی به نظر می رسد و خرگوش فقط روی یک پس زمینه سیاه ایستاده است. وقت آن رسیده که کمی بازی را زیبا کنیم.
مرحله دوم: اضافه کردن منظره به بازی
در ادامه ساخت بازی با پایتون بیایید کمی شکل بازی رو با افزودن منظره زیبا کنیم. این کار را می توان با دستور 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 in range(int(width/grass.get_width()+1)): for y in range(int(height/grass.get_height()+1)): screen.blit(grass,(x*100,y*100)) screen.blit(castle,(0,30)) screen.blit(castle,(0,135)) screen.blit(castle,(0,240)) screen.blit(castle,(0,345 ))
همانطور که می بینید، دستور for ابتدا از طریق x سپس درون حلقه for داخلی، از طریق y حلقه می زند و برای پوشش عکس چمن بر روی بعد صفحه نمایش x و y ایجاد شده توسط حلقه های for رسم می کند. چند خط بعدی فقط قلعه ها یا castle ها را روی صفحه ترسیم می کند. اگر برنامه را اکنون اجرا کنید، باید چیزی شبیه به این خروجی را دریافت کنید:
حالا منظره و شکل بازی کمی دلپذیر شد در ادامه به مراحل بعدی ساخت بازی با پایتون می پردازیم.
مرحله سوم: حرکت قهرمان بازی با صفحه کلید
در این مرحله باید برخی عناصر بازی برای واقعی کردن آن را اضافه کنید، مانند این که قهرمان بازی یا همان خرگوش به فرمان صفحه کلید پاسخ دهد. برای انجام این کار، ابتدا یک روش خوب برای پیگیری اینکه کدام کلیدها در یک لحظه معین فشرده می شوند را پیاده سازی می کنید. شما می توانید این کار را به سادگی با ایجاد آرایه ای از حالت های کلیدی که وضعیت هر کلیدی را که می خواهید برای بازی استفاده کنید، نگه دارد. کد زیر را به game.py در انتهای بخش شماره 2 (پس از تنظیم ارتفاع و عرض صفحه) اضافه کنید:
keys = [False, False, False, False] playerpos=[100,100]
کد بالا آرایه ای از کلیدهای فشرده شده را به ترتیب کلید جهت بالا، چپ، پایین و راست ثبت می کند و متغیر playerpos هم مکان بازیکن یا همان خرگوش را مشخص می کند. از آنجا که در بازی، خرگوش به موقعیت های مختلف حرکت می کند، داشتن متغیری که شامل موقعیت خرگوش باشد و سپس به سادگی خرگوش را به آن موقعیت منتقل کند، آسان تر است. اکنون باید کد موجود برای ترسیم خرگوش را برای استفاده از متغیر جدید playerpos تغییر دهید. خط زیر را در قسمت شماره 6 تغییر دهید:
screen.blit(player, (100,100))
به جای این دستور بالا، دستور زیر را قرار دهید.
screen.blit(player, playerpos)
در مرحله بعد، آرایه کلیدها را بر اساس فشردن کلیدها به روز کنید. PyGame با افزودن توابع event.key تشخیص فشارهای کلید را آسان می کند. در انتهای بخش شماره 8، بلافاصله پس از بررسی بلاک event.type == pygame.QUIT، این کد را (در همان سطح تورفتگی pygame.QUIT if block پس از دستور exit(0)) قرار دهید:
if event.type == pygame.KEYDOWN: if event.key==K_UP: keys[0]=True elif event.key==K_LEFT: keys[1]=True elif event.key==K_DOWN: keys[2]=True elif event.key==K_RIGHT: keys[3]=True if event.type == pygame.KEYUP: if event.key==pygame.K_UP: keys[0]=False elif event.key==pygame.K_LEFT: keys[1]=False elif event.key==pygame.K_DOWN: keys[2]=False elif event.key==pygame.K_RIGHT: keys[3]=False
شاید فکر کنید این کدها در ساخت بازی با پایتون پیچیده هستند اما اگر آن ها را به عبارات if تقسیم کنید، چندان پیچیده نیست. ابتدا بررسی کنید که آیا کلید فشار داده شده، آزاد شده است یا خیر؟ سپس بررسی می کنید که کدام کلید فشرده یا آزاد می شود، و اگر کلید فشرده یا آزاد شده، یکی از کلیدهایی است که از آن استفاده می کنید، متغیر کلیدها را متناسب با آن به روز می کنید. در نهایت، شما باید متغیر playerpos را در پاسخ به فشارهای کلید به روز کنید. کد زیر را به پایان game.py اضافه کنید (با یک سطح تورفتگی، آن را در همان سطح حلقه for قرار دهید):
# 9 - Move player if keys[0]: playerpos[1]-=5 elif keys[2]: playerpos[1]+=5 if keys[1]: playerpos[0]-=5 elif keys[3]: playerpos[0]+=5
این کد به سادگی بررسی می کند که کدام یک از کلیدها فشرده می شوند و از موقعیت x یا y خرگوش (بسته به کلید فشرده شده) اضافه یا کم می کند تا بازیکن حرکت کند. بازی را اجرا کنید و باید بتوانید با جهت های کیبرد خرگوش را حرکت دهید.
مرحله چهارم: چرخش خرگوش
خوب تا الان خرگوش می تواند با فشار دادن کلیدها حرکت کند، اما اگر بتوان از ماوس برای چرخاندن خرگوش به جهت مورد نظر استفاده کرد، عالی خواهد بود. برای اجرای این عمل نیاز به محاسبات مثلثاتی داریم. به تصویر زیر توجه کنید:
در تصویر بالا، اگر مختصات (5،3) موقعیت خرگوش و مختصات (2،4) موقعیت فعلی ماوس باشد، می توان با اعمال تابع مثلثاتی atan2 به تفاوت در زاویه چرخش (z) را پیدا کنید. پس با فاصله بین دو نقطه و تابع tan به سادگی خرگوش بازی در جهت ماوس خواهد چرخید.
اگر کمی در مورد این قسمت گیج شده اید، نگران نباشید و ادامه دهید بازی سازی نیاز به درک کامل از ریاضیات دارد به همین دلیل است که باید در کلاس ریاضی حواستان جمع باشد. البته این راهکار را همیشه در برنامه نویسی بازی استفاده خواهید کرد. اکنون باید این مفهوم را در ساخت بازی با پایتون به کار بگیرید. برای انجام این کار، می توانید از تابع PyGame Surface.rotate (degree) استفاده کنید. به خاطر داشته باشید که مقدار Z در رادیان است. تابع atan2 در کتابخانه ریاضی پایتون وجود دارد؛ بنابراین ابتدا کد زیر را به انتهای بخش شماره 1 اضافه کنید:
import math
سپس، آخرین خط در بخش 6 (خط player.blit) را با کد زیر جایگزین کنید:
# 6.1 - Set player position and rotation position = pygame.mouse.get_pos() angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26)) playerrot = pygame.transform.rotate(player, 360-angle*57.29) playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2) screen.blit(playerrot, playerpos1)
بیایید ساختار اساسی کد بالا را مرور کنیم. ابتدا موقعیت ماوس و خرگوش را دریافت می کنید. سپس آن ها را وارد تابع atan2 می کنید. پس از آن، زاویه دریافتی از تابع atan2 را از رادیان به درجه تبدیل می کنید (رادیان را تقریباً در 57.29 یا 360/2π ضرب کنید). از آنجا که خرگوش چرخانده می شود، موقعیت آن تغییر می کند. بنابراین اکنون موقعیت جدید خرگوش را محاسبه کرده و خرگوش را روی صفحه نمایش ترسیم می کنیم.
حال بازی را دوباره اجرا کنید. اگر فقط از کلیدهای جهت کیبورد استفاده می کنید بازی باید دقیقاً مانند قبل رفتار کند. اما اگر ماوس خود را حرکت دهید، خرگوش نیز می چرخد.
مرحله پنجم: تیراندازی خرگوش
در ساخت بازی با پایتون دیدیم خرگوش بازی در حال حرکت است، وقت آن است که کمی به بازی هیجان بدهیم و اجازه دهیم خرگوش بازی با استفاده از تیر به دشمنان شلیک کند. این مرحله کمی پیچیده تر است زیرا شما باید تمام پیکان ها را پیگیری و به روز کنید و آنها را بچرخانید و هنگام خارج شدن از صفحه آنها را حذف کنید. اول از همه، متغیرهای لازم را به انتهای بخش 2 اضافه کنید:
acc=[0,0] arrows=[]
متغیر اول صحت بازیکن یا خرگوش بازی را ردیابی می کند و آرایه دوم تمام پیکان ها را ردیابی می کند. متغیر دقت در اصل لیستی از تعداد شلیک های شلیک شده و تعداد گورکن های اصابت شده است. بعداً، ما از این اطلاعات برای محاسبه درصد دقت استفاده خواهیم کرد. در این مرحله، تصویر پیکان یا bullet را در انتهای بخش شماره 3 بارگذاری کنید:
arrow = pygame.image.load("resources/images/bullet.png")
حالا وقتی کاربر روی ماوس کلیک می کند، یک پیکان باید شلیک شود. موارد زیر را به عنوان بخش رویداد جدید به انتهای بخش 8 اضافه کنید:
if event.type==pygame.MOUSEBUTTONDOWN: position=pygame.mouse.get_pos() acc[1]+=1 arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])
این کد بررسی می کند که آیا ماوس کلیک شده است یا خیر؛ موقعیت ماوس را می گیرد و چرخش پیکان را بر اساس موقعیت چرخانده شده خرگوش و موقعیت مکان نما محاسبه می کند. این مقدار چرخش در آرایه arrows ذخیره می شود. در مرحله بعد، باید پیکان ها را روی صفحه ترسیم کنید. کد زیر را پس از بخش شماره 6.1 اضافه کنید:
# 6.2 - Draw arrows for bullet in arrows: index=0 velx=math.cos(bullet[0])*10 vely=math.sin(bullet[0])*10 bullet[1]+=velx bullet[2]+=vely if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480: arrows.pop(index) index+=1 for projectile in arrows: arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29) screen.blit(arrow1, (projectile[1], projectile[2]))
مقادیر velyx و velx با استفاده از مثلثات محاسبه می شود و 10 سرعت پیکان ها است. دستور if فقط بررسی می کند که گلوله خارج از محدوده باشد و اگر باشد، پیکان را حذف می کند. دومی برای عبارت از فلش ها عبور کرده و آنها را با چرخش صحیح ترسیم می کند.
حالا وقت آن رسیده دوباره برنامه را اجرا کنید. بازیکن بازی با استفاده از کلیک ماوس می تواند پیکان ها را شلیک کند.
مرحله ششم: ساخت گورکن های دشمن
تا الان شما 4 قلعه و یک قهرمان دارید که می تواند حرکت و شلیک کند. پس چه چیزی کم است؟ بله دشمنانی که به قلعه حمله می کنند و قهرمان می تواند به سمت آن شلیک کند! در این مرحله از ساخت بازی با پایتون، گورکن ها یا دشمنان تصادفی تولید می شوند تا به قلعه ها حمله کنند. با ادامه بازی تعداد بیشتری از گورکن ها وجود خواهند داشت؛ بنابراین، بیایید لیستی از آنچه برای انجام آن نیاز دارید تهیه کنیم.
- اضافه کردن گورکن ها را به لیستی از یک آرایه
- بررسی و بروز کردن گورکن ها در هر فریم
- نمایش گورکن ها
ابتدا کد زیر را به انتهای بخش شماره 2 اضافه کنید:
badtimer=100 badtimer1=0 badguys=[[640,100]] healthvalue=194
موارد فوق یک تایمر یا زمان سنج (و همچنین چند مقدار دیگر) را تنظیم می کند تا در بازی پس از گذشت مدتی یک گورکن جدید اضافه شود. شما badtimer را در هر قاب کاهش می دهید تا صفر شود و سپس یک badger یا گورکن جدید ایجاد می کنید. حالا موارد زیر را به انتهای بخش شماره 3 اضافه کنید:
badguyimg1 = pygame.image.load("resources/images/badguy.png") badguyimg=badguyimg1
خط اول بالا شبیه به تمام کد بارگیری تصویر قبلی است. خط دوم یک کپی از تصویر را تنظیم می کند تا بتوانید به راحتی گورکن ها را حرکت دهید. پس از آن باید گورکن ها را به روز کنید و در صفحه نمایش نشان دهید. این کد را بلافاصله پس از بخش شماره 6.2 اضافه کنید:
# 6.3 - Draw badgers if badtimer==0: badguys.append([640, random.randint(50,430)]) badtimer=100-(badtimer1*2) if badtimer1>=35: badtimer1=35 else: badtimer1+=5 index=0 for badguy in badguys: if badguy[0]<-64: badguys.pop(index) badguy[0]-=7 index+=1 for badguy in badguys: screen.blit(badguyimg, badguy)
خط اول بررسی می کند که آیا badtimer صفر است یا خیر، اگر صفر باشد یک badger یا گورکن ایجاد می کند و badtimer را دوباره بر اساس تعداد دفعاتی که badtimer تا به حال اجرا شده، تنظیم می کند. اولین حلقه for مختصات x گورکن را بررسی می کند که آیا از صفحه خارج شده است و اگر گورکن خارج از صفحه است آن را حذف می کند. حلقه دوم بر اساس حذف احتمالی گورکن ها دوباره همه گورکن ها را روی صفحه نمایش ترسیم می کند.
برای استفاده از تابع تصادفی در کد بالا، باید کتابخانه random را نیز import کنید. بنابراین موارد زیر را به انتهای بخش شماره 1 اضافه کنید:
import random
در نهایت، این خط کد زیر را بلافاصله بعد از عبارت while (بخش 4) اضافه کنید تا مقدار badtimer برای هر فریم کاهش یابد:
badtimer-=1
با اجرای بازی تمام این کد را امتحان کنید. اکنون باید گیم پلی واقعی را مشاهده کنید – می توانید شلیک کنید، حرکت کنید، بپیچید و گورکن ها سعی می کنند به سمت قلعه ها حمله کنند.
اما صبر کنید! چرا گورکن ها به قلعه ها آسیب نمی زنند؟ بیایید سریع کد این قسمت را اضافه کنیم. این کد را درست قبل از index+= 1 در حلقه اول در بخش 6.3 اضافه کنید:
# 6.3.1 - Attack castle badrect=pygame.Rect(badguyimg.get_rect()) badrect.top=badguy[1] badrect.left=badguy[0] if badrect.left<64: healthvalue -= random.randint(5,20) badguys.pop(index) # 6.3.3 - Next bad guy
این کد نسبتاً ساده است. اگر مقدار x گورکن کمتر از 64 در سمت راست باشد، آن گورکن را حذف کرده و مقدار سلامتی یا همان جان بازی را به صورت تصادفی بین 5 تا 20 کاهش می دهد (بعداً، مقدار جان یا سلامتی را روی صفحه نمایش خواهید دید) اگر برنامه اجرا کنید، باید گورکن های مهاجم، هنگام برخورد با قلعه ناپدید شوند. اگرچه شما نمی توانید آن را ببینید، اما گورکن ها در واقع از جان شما کم می کنند.
مرحله هفتم: برخورد تیر پیکان با گورکن
گورکن ها به قلعه شما حمله می کنند اما تیرهای شما تاثیری بر آنها ندارد! چگونه باید یک خرگوش از خانه خود دفاع کند؟
زمان آن است که پیکان ها را برای کشتن گورکن ها آماده کنید تا بتوانید از قلعه خود محافظت کرده و برنده بازی باشید! باید بررسی کرد که آیا تیر ها و گورکن ها با هم برخورد می کنند یا خیر؟ اگر برخورد انجام شود، پس گورکن و پیکان را حذف کنید و یک واحد را به نسبت دقت یا همان امتیاز خود اضافه کنید. درست بعد از بخش 6.3.1 ، این را اضافه کنید:
#6.3.2 - Check for collisions index1=0 for bullet in arrows: bullrect=pygame.Rect(arrow.get_rect()) bullrect.left=bullet[1] bullrect.top=bullet[2] if badrect.colliderect(bullrect): acc[0]+=1 badguys.pop(index) arrows.pop(index1) index1+=1
در این کد تنها یک نکته مهم وجود دارد که باید به آن توجه کنید. دستور colliderect یک تابع PyGame است که بررسی می کند آیا دو مستطیل متقاطع هستند یا خیر. دو خط دیگر فقط آنچه را که در بالا توضیح داده شد انجام می دهند. اگر برنامه را اجرا کنید، در نهایت باید بتوانید گورکن ها را با شلیک پیکان بکشید.
مرحله هشتم: اضافه کردن متریک زمان و مقدار جان
بازی بسیار خوب پیشرفت می کند شما مهاجمان خود را دارید و مدافع خود را نیز دارید. اکنون تنها چیزی که شما نیاز دارید راهی برای حفظ امتیاز و نشان دادن عملکرد خوب خرگوش قهرمان است. ساده ترین راه برای انجام این کار اضافه کردن یک HUD (Heads Up Display) است که سطح سلامت فعلی قلعه ها را نشان می دهد. همچنین می توانید یک ساعت اضافه کنید تا نشان دهد که قلعه چقدر زنده مانده است. ابتدا ساعت را اضافه کنید. کد زیر را درست قبل از شروع قسمت شماره 7 اضافه کنید:
# 6.4 - Draw clock font = pygame.font.Font(None, 24) survivedtext = font.render(str(int((90000-pygame.time.get_ticks())/60000))+":"+str(int((90000-pygame.time.get_ticks())/1000%60)).zfill(2), True, (0,0,0)) textRect = survivedtext.get_rect() textRect.topright=[635,5] screen.blit(survivedtext, textRect)
کد بالا به سادگی یک فونت جدید با استفاده از قلم PyGame پیش فرض تنظیم شده روی اندازه 24 ایجاد می کند. سپس از آن فونت برای نمایش متن زمان بر روی سطح استفاده می شود. پس از آن، متن روی صفحه قرار می گیرد و ترسیم می شود. بعد نوار سلامتی health bar یا میزان جان را اضافه کنید. اما قبل از رسم health bar، باید تصاویر را برای نوار بارگذاری کنید. کد زیر را به انتهای بخش شماره 3 اضافه کنید:
healthbar = pygame.image.load("resources/images/healthbar.png") health = pygame.image.load("resources/images/health.png")
اولی تصویر قرمز رنگی است که برای نوار سلامت کامل استفاده می شود. تصویر دوم سبز است که برای نشان دادن سطح سلامت فعلی استفاده می شود. حالا کد زیر را بلافاصله بعد از بخش 6.4 (که به تازگی اضافه کرده اید) اضافه کنید تا نوار سلامت روی صفحه ترسیم شود:
# 6.5 - Draw health bar screen.blit(healthbar, (5,5)) for health1 in range(healthvalue): screen.blit(health, (health1+8,8))
کد ابتدا نوار سلامتی تمام قرمز را ترسیم می کند. سپس مقدار مشخصی از رنگ سبز را با توجه به عمر قلعه بر روی نوار می کشد، اگر برنامه را اجرا کنید، باید یک تایمر و یک نوار سلامتی داشته باشید.
مرحله نهم: برنده یا بازنده
اگر به مدت طولانی بازی کنید، حتی اگر میزان جان شما به صفر برسد، بازی همچنان ادامه دارد! و شما می توانید همچنان می توانید شلیک کنید. شما به نوعی سناریو برد/باخت نیاز دارید تا بازی ارزش بازی کردن را داشته باشد. بنابراین اجازه دهید شرایط برد و باخت و همچنین صفحه برد یا باخت را اضافه کنیم. این کار را با خارج شدن از حلقه اصلی و وارد شدن به یک حلقه برد/باخت انجام می دهید. در حلقه برد/باخت، باید بفهمید که کاربر برنده یا بازنده است و صفحه را مطابق آن نشان دهید. یک طرح کلی از سناریوهای برد/باخت می تواند بصورت زیر باشد:
اگر زمان تمام شد (90000 میلی ثانیه یا 90 ثانیه) پس:
- اجرای بازی را متوقف کنید
- تیجه بازی را 1 قرار دهید یعنی برنده شده اید
در صورت تخریب قلعه، موارد زیر را دنبال کنید:
- اجرای بازی را متوقف کنید
- نتیجه بازی را 0 قرار دهید یعنی بازنده شده اید
دقت را در هر آخر محاسبه کنید و این خطوط را به انتهای game.py اضافه کنید:
#10 - Win/Lose check if pygame.time.get_ticks()>=90000: running=0 exitcode=1 if healthvalue<=0: running=0 exitcode=0 if acc[1]!=0: accuracy=acc[0]*1.0/acc[1]*100 else: accuracy=0 # 11 - Win/lose display if exitcode==0: pygame.font.init() font = pygame.font.Font(None, 24) text = font.render("Accuracy: "+str(accuracy)+"%", True, (255,0,0)) textRect = text.get_rect() textRect.centerx = screen.get_rect().centerx textRect.centery = screen.get_rect().centery+24 screen.blit(gameover, (0,0)) screen.blit(text, textRect) else: pygame.font.init() font = pygame.font.Font(None, 24) text = font.render("Accuracy: "+str(accuracy)+"%", True, (0,255,0)) textRect = text.get_rect() textRect.centerx = screen.get_rect().centerx textRect.centery = screen.get_rect().centery+24 screen.blit(youwin, (0,0)) screen.blit(text, textRect) while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit(0) pygame.display.flip()
اولین دستور if بررسی می کند که زمان به پایان رسیده باشد. مورد دوم بررسی می کند که آیا قلعه تخریب شده است یا خیر. مورد سوم نسبت دقت شما را محاسبه می کند. پس از آن، یک عبارت سریع برنده یا باخت را بررسی می کند و تصویر صحیح را نمایش می دهد.
البته، اگر می خواهید تصاویر را برای صفحه های برد و باخت نمایش دهید، ابتدا باید این تصاویر بارگذاری شوند. بنابراین کد زیر را به انتهای بخش شماره 3 اضافه کنید:
gameover = pygame.image.load("resources/images/gameover.png") youwin = pygame.image.load("resources/images/youwin.png")
و در بخش چهار تغییرات زیر را انجام دهید.
# 4 - keep looping through while 1: badtimer-=1
به جای کدهای بالا کدهای پایین را جایگزین کنید.
# 4 - keep looping through running = 1 exitcode = 0 while running: badtimer-=1
متغیر در حال اجرا بودن بازی را پیگیری می کند و متغیر کد خروجی پیروزی یا باخت بازیکن را پیگیری می کند. بازی را دوباره اجرا کنید و اکنون می توانید پیروز شوید یا ببازید.
مرحله دهم: اضافه کردن جلوه های صوتی
بازی بسیار خوب طراحی شده اما سکوت در این بازی بسیار پر رنگ است! افزودن جلوه های صوتی می تواند کل احساس بازی را تغییر دهد. PyGame بارگیری و پخش صداها را بسیار ساده کرده است. ابتدا، این کد در انتهای بخش شماره 2 وارد کنید کنید:
pygame.mixer.init()
سپس صداها را بارگذاری کرده و سطح صدا را در انتهای قسمت شماره 3 تنظیم کنید:
# 3.1 - Load audio hit = pygame.mixer.Sound("resources/audio/explode.wav") enemy = pygame.mixer.Sound("resources/audio/enemy.wav") shoot = pygame.mixer.Sound("resources/audio/shoot.wav") hit.set_volume(0.05) enemy.set_volume(0.05) shoot.set_volume(0.05) pygame.mixer.music.load('resources/audio/moonlight.wav') pygame.mixer.music.play(-1, 0.0) pygame.mixer.music.set_volume(0.25)
اکثر کدهای بالا به سادگی بارگیری فایل های صوتی و پیکربندی سطوح حجم صدا است. اما به خط pygame.mixer.music.load توجه کنید – آن خط موسیقی پس زمینه بازی را بارگذاری می کند و خط بعدی موسیقی پس زمینه را برای همیشه تکرار می کند. اکنون تنها کاری که باید انجام دهید این است که در صورت نیاز جلوه های صوتی مختلف را پخش کنید. طبق دستورات موجود در کد زیر این کار را انجام دهید:
# section 6.3.1 after if badrect.left<64: hit.play() # section 6.3.2 after if badrect.colliderect(bullrect): enemy.play() # section 8, after if event.type==pygame.MOUSEBUTTONDOWN: shoot.play()
بازی را یکبار دیگر اجرا کنید. متوجه خواهید شد که اکنون موسیقی پس زمینه و جلوه های صوتی برای برخورد و تیراندازی دارید. با این کار بازی بسیار زنده تر به نظر می رسد.
سخن آخر
در این آموزش سعی شد نحوه ساخت بازی با پایتون آموزش داده شود. یک سناریو کامل از نحوه حرکت قهرمان بازی و حمله دشمنان پیاده سازی شد و در نهایت در 10 مرحله بازی ساخته و اجرا شد. لازم به ذکر است کتابخانه قدرمتند pygame پایتون ابزار ها و امکاناتی متنوعی برای بازی سازی دارد که شما در این آموزش تنها گوشه ای از این امکانات را مشاهده کردید.
در ضمن هدف از تکه تکه گذاشتن کد ها و اضافه کردن کدهای برنامه در هر مرحله، فقط برای آموزش بهتر شما عزیزان بود اگر کدهای کامل این بازی در پایتون رو یکجا می خواهید می توانید از طریق این لینک (+) آن را دریافت کنید. در پایان خوشحال می شویم نظرات و پیشنهادات خود را با ما درمیان بگذارید. موفق و پیروز باشید.
- این فایل ها بصورت رایگان است و لینک دانلود در اختیار شما قرار داده می شود.
- در صورتی که به هر دلیل موفق به دانلود فایل مورد نظر نشدید به ما اطلاع دهید.
پسورد فایل : ندارد گزارش خرابی لینک
درباره امین جلیل زاده رزین
پایه گذار و موسس وب سایت آموزشی پی استور، مدرس دانشگاه فنی و حرفه ای، برنامه نویس و تحلیل گر سیستم، پژوهشگر در حوزه الگوریتم های ابتکاری، فرا ابتکاری، یادگیری ماشین، شبکه و پایگاه داده. ایشان در زبان های برنامه نویسی متعدد، نظیر ++C، سی شارپ، PHP ،Java، متلب MATLAB و Python تسلط و سابقه تدریس فعال دارند.
سلام من چرا نمیتونم فایل رو دانلود کنم
بخاطر اینکه با گوشی هستم یا دلیل دیگه ای داره؟
سلام خسته نباشید من نتوانستم فایل و دانلود کنم خطا می دهد چه کنم؟
سلام ببخشید سرعت گورکن ها زیاده چطوری کمش کنم؟
سلام چطور سرعت گورکن هارو کاهش بدم؟
سلام
من تو آخر صفحه که نوشته دانلود سورس کل بازی که خود سایت گذاشته رو میخوام دانلود کنم خطای 404 میده انگار پیدا نمیکنه فایل رو یا اصلا وجود خارجی ندارد لطفا پیگیری کنید و مشکل زودتر برطرف بشه
سلام و وقت بخیر
لینک دانلود بررسی و بروزرسانی شد.
سپاس فراوان
سلام برای من ارور میده
ممنون میشم زود تر جواب بدید
Traceback (most recent call last):
File “C:\Users\Elecomp\Desktop\پایتون\game.py”, line 20, in <module>
player = pygame.image.load(“resources/images/dude.png”)
FileNotFoundError: No file ‘resources/images/dude.png’ found in working directory ‘C:\Users\Elecomp\Desktop\پایتون’.
سلام. پوشه بازی رو در محل صحیحی قرار بدید و از vs code جهت اجرای بازی استفاده کنید.
ارور میده
Could not find a version that satisfies the requirement pygame
اگر pygame ایمپورت نشد دستگاهت رو به اینترنت متصل کن بزن
import os
os.system(“pip install pygame”)
شاید مشکلت حل شه
سلام وقت بخیر من بازی درست کردم ولی کد حرکت بازیو مینویسم خطا میده لطفا کمک میکنید
اینم کد من
import pygame,sys
import pygame.locals as GAME_GLOBALS
import pygame.event as GAME_EVENTS
pygame.init()
window=pygame.display.set_mode((500,600))
pygame.display.set_caption('game1')
x=0
y=0
speedx=2
speedy=10
a=10
b=0
wX=10
wY=10
flg=0
wA=10
wB=10
while True:
window.fill((50,205,50))
pygame.draw.rect(window,(138,43,255),(x,y,wX,wY))
pygame.draw.rect(window,(255,0,0),(a,b,10,10))
x+=speedx
if x > 499 - wX:
y+=0
speedx = -10
if x < 0:
y+=speedy
speedx = +10
if y > (1000 - 500):
y = 0
if b > (1000- 500):
b = 0
if x + 10 < a :
wX+=1
print(wX)
print(x)
b+=speedy
flg=1
print(y)
#y+=speedy
#print(x)
#print(y)
for event in GAME_EVENTS.get():
if event.type==GAME_GLOBALS.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
سلام من وقتی اومدم برنامه رو اجرا کنم این ارور رو داد:Traceback (most recent call last):
File “C:\game\Game\game.py”, line 2, in <module>
import pygame
ModuleNotFoundError: No module named ‘pygame’
ممنون ممیشم سریع تر رسیدگی شود.
اول کتابخانه رو نصب کن داداش
اسم ماژول اشتباهه
سلام خسته نباشید من pygame رو از cmd دانلود کردم و وقتی دستور import pygame رو میزنم یه اروری میده.