چطور توی پایتون بازی بسازیم؟ - قسمت پنجم

یکی از مهمترین بحث های بازی سازی، متحرک سازی اشکال بازی است. با متحرک سازی اشکال بازی، بازی شما نسبتا شبیه به بازی می‌شود. برای همین به سراغ نوشتن این برنامه می‌رویم.

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

قبل از هر کاری باید کارکرد دکمه ها را بدانیم. یعنی بدانیم که چطور میشود که یک کاربر دکمه ای را فشار دهد و ما متوجه آن شویم.

فشار دادن دکمه در پایگیم

وقتی یک کاربر دکمه ای را فشار میدهد، یعنی یک رویدادی دارد اتفاق می‌افتد. در پایگیم، ما رویداد ها را به این شکل پیدا میکنیم.(رویداد مثل اینکه ببینیم که کاربر دکمه موس را فشار داده، توی کیبورد دکمه ای را فشار داده و...)

while True:
     for event in pygame.event.get():
          if event.type == pygame.KEYDOWN:
               print('SalamSalam')

تفسیر کد

کد بالا رویداد های کامپیوتر را دریافت میکند. هر موقع یکی از این رویداد ها برابر "فشار دادن کلید" باشد، برنامه کلمه "SalamSalam" را چاپ میکند.

انواع رویداد ها

رویداد KEYDOWN : وقتی کلیدی فشار داده میشود.

رویداد KEYUP : وقتی کلیدی را که فشار داده بودیم را رها کردیم.

رویداد MOUSEBUTTONDOWN : زمانی که یکی از دکمه های موس را فشار میدهیم.

رویداد MOUSEBUTTONUP : وقتی کلیدی از موس را که فشار داده بودیم رها میکنیم.

متحرک سازی اشکال

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

در مرحله اول کار های اولیه را انجام میدهیم.

import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
run = True
x = 240
y = 200

بعد از انجام مرحله اول، باید حلقه اصلی برنامه رو بنویسیم.

while run:
     for event in pygame.event.get()
          if event.type == pygame.QUIT:
               run = False
pygame.quit()

حالا نوبت اینه که شکلمان را بسازیم.

import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
run = True
x = 240
y = 200
while run:
     for event in pygame.event.get():
          if event.type == pygame.QUIT:
               run = False
     display.fill((0, 0, 0))
     pygame.draw.rect(display, (255, 0, 0), (x, y, 40, 40))
     pygame.display.update()
pygame.quit()

حالا وقتشه که رویداد فشار دادن کلید را بنویسیم. یعنی بگوییم اگر کلید w را فشار داد، مستطیل هم بالا برود.

import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
run = True
x = 240
y = 200
while run:
     for event in pygame.event.get():
          if event.type == pygame.QUIT:
               run = False
          if event.type == pygame.KEYDOWN:
               if event.key == pygame.K_w:
                    y -= 5
               if event.key == pygame.K_s:
                    y += 5
               if event.key == pygame.K_a:
                    x -= 5
               if event.key == pygame.K_d:
                    x += 5
     display.fill((0, 0, 0))
     pygame.draw.rect(display, (255, 0, 0), (x, y, 40, 40))
     pygame.display.update()
pygame.quit()
نکته : event.key برای تشخیص کلید ها است. با این دستور میتوانیم بفهمیم که کاربر کدام کلید را فشار داده است.
https://virgool.io/yadasan/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-tfp8lgvt1cys