آموزش طراحی و ساخت بازی با پایتون + ویدئوی آموزشی
زبان های برنامه نویسی
چهارشنبه 04 بهمن 1402
جهت مطالعه این مقاله به 0 دقیقه زمان نیاز دارید
آنچه در این مقاله خواهیم خواند:

مقدمه


ساخت بازی یکی از پرطرفدارترین حیطه‌های برنامه‌نویسی است. با استفاده از کتابخانه pygame بازی‌های متنوعی می‌توان ساخت. این کتابخانه امکان  ساخت بازی دوبعدی را فراهم می‌کند. با استفاده از این کتابخانه می‌توان صدا نیز به بازی اضافه کنیم.
در این آموزش قصد داریم تا باهم یک بازی بسازیم. برای ساخت بازی با پایتون روش‌های مختلفی وجود دارد. در این قسمت از کتابخانه pygame استفاده می‌کنیم و تمام مراحل کدنویسی را با هم انجام می‌دهیم. در این آموزش ساخت بازی با پایتون یک بازی توپ و راکتی می‌سازیم. با هر بار گرفتن توپ امتیاز خواهیم گرفت و توپ مجددا از بالای صفحه در مکان جدیدی ظاهر می‌شود. تا انتها با ما همراه باشید.
 

 


 

 

ساخت بازی با پایتون برای اندروید

 

ساخت بازی با پایتون برای اندروید روش‌های مختلفی دارد. یکی از روش‌های معمول استفاده از Kivy است که این فریم‌ورک اجازه می‌دهد تا  با پایتون برای اندروید بازی بسازیم. همچنین توزیع  Pygame Subset for Android (PGS4A)  نیز اجرای بازی‌های pygame را در اندروید فراهم می‌کند.

 

کد ساخت بازی با پایتون

 

در ابتدا نیاز داریم که کتابخانه pygame  را نصب داشته باشیم. برای نصب از  pip استفاده می‌کنیم.

 

نصب کتابخانه pygame با pip

 

 


 

 

ابتدا باید سیستم ما به اینترنت دسترسی داشته باشد. سپس برای نصب کتابخانه،  کافیست تا در ترمینال یا cmd سیستم  کد زیر را وارد کنیم:
pip install pygame 
با این دستور  pip ابتدا جستجو می‌کند و کتابخانه مورد نظر ما را پیدا می‌کند. سپس آن را دانلود و نصب می‌کند. سپس از نصب آن پیغام با موفقیت نصب شد را مشاهده خواهیم کرد.
 

لیست کتابخانه‌های نصب شده در پایتون

 

برای اطمینان از نصب بودن کتابخانه pygame یا هریک از سایر کتابخانه‌ها  کافیست تا در ترمینال یا  cmd سیستم عبارت زیر را تایپ کنیم:
pip list 
با نوشتن این کد و زدن دکمه اینتر لیست کتابخانه‌های نصب شده در پایتون را مشاهده می‌کنیم. 
 

آموزش رایگان ساخت بازی با پایتون

 

حال که کتابخانه مورد نظرمان را نصب کرده‌ایم به سراغ نوشتن کدها می‌رویم. در اینجا از ویژوال استدیو کد برای کدنویسی استفاده کرده‌ایم. یک فایل پایتون ایجاد می‌کنیم. کتابخانه‌های مورد نظرمان یعنی  sys و pygame  و random را فراخوانی می‌کنیم. 


import pygame
import sys
import random
 

ساخت صفحه اصلی بازی در پایتون

 

 


 

 

حال برای ساخت صفحه بازی در پایتون، باید صفحه را فراخوانی کنیم که این کد را می‌نویسیم:


pygame.init()
 

برای ایجاد صفحه بازی عرض صفحه و ارتفاع را تعیین می‌کنیم. این ابعاد را می‌توانیم به اندازه دلخواه تغییر دهیم.


width=600
height=400
حال به صفحه بازی این ابعاد را می‌دهیم.
screen=pygame.display.set_mode((width,height))
 

انتخاب تیتر برای صفحه بازی پایتون

 

 


 

 

در این قسمت می‌خواهیم تیتر صفحه مورد نظرمان را اضافه کنیم. این صفحه را با نام Poulstar می‌سازیم.


pygame.display.set_caption("Poulstar")
 

ساخت راکت بازی در پایتون

 

 


 

 

برای مرتب نوشتن کدها  در نوشتن هر قسمت یک خط کامنت می‌گذاریم و توضیحات لازم را می‌نویسیم. 


# set up paddle
 

حال  عرض و ارتفاع پدل و رنگ مورد نظرمان را تعیین می‌کنیم. رای این کار عرض راکت را 100 و ارتفاع آن را 10 در نظر گرفته‌ایم. رنگ راکت را سبز انتخاب کردیم. تمامی این ابعاد به دلخواه انتخاب شده‌اند و می‌توانیم رنگ و ابعاد متفاوتی نیز انتخاب کنیم. 


paddle_width=100
paddle_height=10
paddle_color="green"
 

در این مرحله نیاز داریم تا جای قرارگیری راکت را انتخاب کنیم. می‌خواهیم راکت در پایین صفحه در وسط صفحه بماند. دقت کنیم که برای قرار گیری راکت در پایین صفحه از لحاظ محور x ها باید مرکز width آن در مرکز صفحه باشد و همچنین از لحاظ محور Y ها (ارتفاع) نیز در پایین صفحه قرار بگیرد اما برای اینکه کمی بالاتر از پایین‌ترین نقطه قرار بگیری دبه طور مثال 10 پیکس از آن کم می‌کنیم. 


paddle_position=[width//2-paddle_width//2,height-paddle_height-10]
 

آموزش ساخت بازی ساده با پایتون

 

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

 

ساخت توپ بازی در پایتون


برای ساخت توپ، ابتدا آن قسمت را با یک خط کامنت، جدا می‌کنیم. ابعاد توپ مورد نظرمان را 15 و رنگ آن را قرمز در نظر می‌گیریم. 


# set up ball
ball_radius=15
ball_color="red"
 

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


ball_position=[random.randint(ball_radius,width-ball_radius),0]
 

توپ باید از بالای صفحه به پایین صفحه بیاید پس باید روی محور y تغییر کند. در اینجا میزان پایین آمدن توپ را در هر بار تغییرات 5 در نظر گرفته‌ایم.


ball_speed=[0,5]
 

طراحی بازی با پایتون

 

در این بازی نیازمند یک امتیاز هستیم که هر بار توپ را دریافت می‌کنیم مقدار آن تغییر کند. پس یک متغیر می‌سازیم و نام آن را score می‌گذاریم. همچنین برای متغیرمان فونت و سایز فونت را نیز تعریف می‌کنیم.  در اینجا فونت خاصی مد نظر ما نبود پس  None نوشتیم و اندازه فونت را 36 در نظر گرفتیم.


# set up score
score=0
font=pygame.font.Font(None,36)
 

آموزش ساخت بازی با پایتون

 

حال تمام ملزومات بازی را ساختیم. کدها اصلی بازی را شروع می‌کنیم. یک خط کامنت شروع قسمت اصلی بازی را می‌نویسیم همچنین این بازی بی‌انتهاست پس برای آن از حلقه while استفاده می‌کنیم. دقت کنیم که تمامی کدها باید به اندازه 4 فاصله جلوتر نوشته شوند تا زیرمجموعه حلقه قرار گیرند. همچنین اولین قسمت به نوشتن جزییات دکمه close می‌پردازیم. برای این کار کامنت game over را می‌نویسیم.


# main game loop
while True:
   # game over
 

می‌خواهیم اگر دکمه بستن را فشار دادیم بازی بسته شده پس از pygame  و sys باید خروج کنیم. برای اینکار ابتدا بررسی می‌کنیم که وضعیت event به چه صورت است. اگر در وضعیت QUIT قرار گرفت پس کدهای خروج را تکمیل می‌کنیم.


   for event in pygame.event.get():
       if event.type==pygame.QUIT:
           pygame.quit()
           sys.exit()
 

کد حرکت توپ در پایتون

 

در بالا توپ را جزییات مورد نظر ایجاد کردیم. حال می‌خواهیم که توپ با سرعت مورد نظر ما حرکت کند. پس باید از لحاظ y تغییرات داشته باشد که این تغییرات در لیست سرعت در خانه دوم یا همان ایندکس 1 قرار گرفت.
           
   # update ball pisition
   ball_position[1]+=ball_speed[1]
 

نکته قابل توجه شماره‌گذاری ایندکس خانه‌های یک لیست از شماره 0 شروع می‌شود پس خانه دوم شماره 1 خواهد بود.
 

رنگ صفحه در کتابخانه پای گیم


برای ست کردن رنگ صفحه در کتابخانه پای گیم مقدار fill را به رنگ دلخواه می‌نویسیم که در اینجا صفحه ما رنگ سفید را انتخاب کردیم.


   # screen fill
   screen.fill("white")
 

کشیدن راکت در طول برنامه پایتون

 

این قسمت فقط کافیست تا جزئیات راکتی که بالا نوشتیم را وارد کنیم تا راکت طراحی شود. برای این‌کار ابتدا محل کشیدن راکت را screen تعیین می‌کنیم. سپس رنگ، محل قرارگیری در محور x  و محل قرارگیری در محور y  می‌نویسیم. سپس عرض و ارتفاع راکت را مشخص می‌کنیم. دقت کنیم که راکت در واقع یک مستطیل است و از تابع rec که مخفف rectangle است، استفاده می‌کنیم. همچنین می‌توانستیم کل دستورها را در یک خط نیز بنویسیم.


# draw paddle
   pygame.draw.rect(screen,paddle_color,
                    (paddle_position[0],
                     paddle_position[1],
                     paddle_width,paddle_height))
 

کشیدن توپ در طول بازی پایتون

 

برای کشیدن توپ نیز، همانند مستطیل عمل کرده و از تابع circle استفاده می‌کنیم.


   # draw ball
   pygame.draw.circle(screen,ball_color,
                   (int(ball_position[0]),
                   int(ball_position[1])),
                   ball_radius)
 

اضافه کردن امتیاز به بازی در پایتون

 

در این قسمت نیز امتیاز را به بازی اضافه می‌کنیم.


   # draw score
   score_text=font.render(f"Score: {score}",True,"green")
   screen.blit(score_text,(10,10))
 

کد اصلی بازی با پایتون

 

 برای آپدیت شدن صفحه در هر لحظه کد زیر را می‌نویسیم.


   # update display
   pygame.display.flip()
 

و تعیین می‌کنیم که صفحه هر چند لحظه یک‌بار آپدیت شود.


   # frame rate
   pygame.time.Clock().tick(30)
 

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


   # ball out of screen
   if ball_position[1]>height:
       ball_position=[random.randint(ball_radius,width-ball_radius),0]
 

بایند کردن، فشردن دکمه در پایتون


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


   # left and right movement
   keys=pygame.key.get_pressed()
   if keys[pygame.K_LEFT] and paddle_position[0]>0:
       paddle_position[0]-=5
   if keys[pygame.K_RIGHT] and paddle_position[0]<width-paddle_width:
       paddle_position[0]+=5
 

کد امتیازدهی


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


   # check score
   if (paddle_position[0]<ball_position[0]<paddle_position[0]+paddle_width and
       paddle_position[1]<ball_position[1]<paddle_position[1]+paddle_height):
       ball_position=[random.randint(ball_radius,width-ball_radius),0]
       score+=1
 

حال پس از نوشتن کدها بازی را چک می‌کنیم که از درست کار کردن آن مطمئن شویم. چند امتیاز می‌گیریم و حالت‌های مختلفی را چک می‌کنیم.
 

کدها در یک نگاه


کلیه کدها به شرح زیر است:


import pygame
import sys
import random

pygame.init()

width=600
height=400
screen=pygame.display.set_mode((width,height))
pygame.display.set_caption("Poulstar")

# set up paddle
paddle_width=100
paddle_height=10
paddle_color="green"
paddle_position=[width//2-paddle_width//2,height-paddle_height-10]

# set up ball
ball_radius=15
ball_color="red"
ball_position=[random.randint(ball_radius,width-ball_radius),0]
ball_speed=[0,5]

# set up score
score=0
font=pygame.font.Font(None,36)

# main game loop
while True:
   # game over
   for event in pygame.event.get():
       if event.type==pygame.QUIT:
           pygame.quit()
           sys.exit()
           
   # update ball pisition
   ball_position[1]+=ball_speed[1]
   
   # screen fill
   screen.fill("white")
   
   # draw paddle
   pygame.draw.rect(screen,paddle_color,
                    (paddle_position[0],
                     paddle_position[1],
                     paddle_width,paddle_height))
   
   # draw ball
   pygame.draw.circle(screen,ball_color,
                   (int(ball_position[0]),
                   int(ball_position[1])),
                   ball_radius)
   
   # draw score
   score_text=font.render(f"Score: {score}",True,"green")
   screen.blit(score_text,(10,10))
   
   # update display
   pygame.display.flip()
   
   # frame rate
   pygame.time.Clock().tick(30)
   
   # ball out of screen
   if ball_position[1]>height:
       ball_position=[random.randint(ball_radius,width-ball_radius),0]
   
   # left and right movement
   keys=pygame.key.get_pressed()

   if keys[pygame.K_LEFT] and paddle_position[0]>0:
       paddle_position[0]-=5
   if keys[pygame.K_RIGHT] and paddle_position[0]<width-paddle_width:
       paddle_position[0]+=5
       # paddle_position[0]=paddle_position[0]+5

   # check score
   if (paddle_position[0]<ball_position[0]<paddle_position[0]+paddle_width and
       paddle_position[1]<ball_position[1]<paddle_position[1]+paddle_height):
       ball_position=[random.randint(ball_radius,width-ball_radius),0]
       score+=1
       

 

نتیجه‌گیری


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