ساخت بازی یکی از پرطرفدارترین حیطههای برنامهنویسی است. با استفاده از کتابخانه pygame بازیهای متنوعی میتوان ساخت. این کتابخانه امکان ساخت بازی دوبعدی را فراهم میکند. با استفاده از این کتابخانه میتوان صدا نیز به بازی اضافه کنیم.
در این آموزش قصد داریم تا باهم یک بازی بسازیم. برای ساخت بازی با پایتون روشهای مختلفی وجود دارد. در این قسمت از کتابخانه pygame استفاده میکنیم و تمام مراحل کدنویسی را با هم انجام میدهیم. در این آموزش ساخت بازی با پایتون یک بازی توپ و راکتی میسازیم. با هر بار گرفتن توپ امتیاز خواهیم گرفت و توپ مجددا از بالای صفحه در مکان جدیدی ظاهر میشود. تا انتها با ما همراه باشید.
ساخت بازی با پایتون برای اندروید روشهای مختلفی دارد. یکی از روشهای معمول استفاده از Kivy است که این فریمورک اجازه میدهد تا با پایتون برای اندروید بازی بسازیم. همچنین توزیع Pygame Subset for Android (PGS4A) نیز اجرای بازیهای pygame را در اندروید فراهم میکند.
در ابتدا نیاز داریم که کتابخانه 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 یک بازی ساده با زبان پایتون نوشتیم و قسمتهای مختلف کار با این کتابخانه را نیز آموختیم.