Կառուցեք պարզ խաղ Python-ում՝ օգտագործելով PyGame մոդուլը


Pygame-ը խաղերի մշակման լավ գրադարան է, քանի որ այն ներառում է մի շարք ներկառուցված գործիքներ և գործառույթներ, որոնք կարող են օգտագործվել տարբեր ժանրերի խաղեր ստեղծելու համար՝ պարզից մինչև բարդ: Գրադարանը ներառում է գրաֆիկա, ձայն և մուտքային մշակում, որոնք բոլորն էլ անհրաժեշտ են ցանկացած խաղի համար:

Sprites ստեղծելու և փոփոխելու ունակությունը Pygame-ի ամենաուշագրավ հնարավորություններից մեկն է: Sprites-ը գրաֆիկական առարկաներ են, որոնք պատկերում են խաղի հերոսները, առարկաները և խաղի այլ առանձնահատկությունները: Pygame-ը ներառում է ուժեղ sprite դաս, որը թույլ է տալիս ծրագրավորողին ներառել գրաֆիկա և անիմացիաներ խաղի մեջ, տեղափոխել և պտտել սփրայթները և հայտնաբերել նրանց միջև բախումները:

Pygame-ի մեկ այլ կարևոր տարր է բախման հայտնաբերումը, որը թույլ է տալիս ծրագրավորողին բացահայտել, երբ երկու խաղի օբյեկտներ են բախվում: Խաղերում դա շատ կարևոր է, քանի որ այն թույլ է տալիս օգտագործողին շփվել շրջակա միջավայրի և խաղի այլ տարրերի հետ: Pygame-ը ներառում է բախումների հայտնաբերման մեխանիզմ՝ սփրայթների և խաղի այլ տարրերի միջև բախումները հայտնաբերելու համար:

Pygame-ը ներառում է ձայնային և երաժշտական հնարավորություններ, բացի սփրայթներից և բախումների հայտնաբերումից: Սա ծրագրավորողների համար հեշտացնում է ձայնային էֆեկտներ և երաժշտություն ներառել իրենց խաղերում, ինչը կարող է զգալիորեն բարելավել խաղային փորձը:

Ընդհանուր առմամբ, Pygame-ը ուժեղ և հարմարվող գործիքակազմ է, որը կարող է օգտագործվել տարբեր խաղեր և մուլտիմեդիա հավելվածներ ստեղծելու համար: Դրա պարզ API-ն, լայն փաստաթղթերը և օգտվողների հսկայական բազան:

Խաղը, որը մենք կառուցելու ենք, պարզ 2D խաղ է, որտեղ դուք շփվում եք շրջակա միջավայրի հետ և խաղացողին տեղափոխում եք էկրանին առարկաներ բռնելու համար: Ամեն անգամ, երբ խաղացողը դիպչում է դրան, նա միավոր է վաստակում:

Սա պարզ խաղ է, բայց դրա զարգացումը ձեզ հիանալի պատկերացում կտա Pygame մոդուլի և այն մասին, թե ինչպես կարող եք օգտագործել այն ավելի առաջադեմ խաղեր ստեղծելու համար:

Սկսել

Նախքան pygame գրադարանն օգտագործելը, մենք նախ պետք է գրադարանը տեղադրենք pip-ի միջոցով:

Այնուամենայնիվ, քանի որ այն ներկառուցված չէ, մենք նախ պետք է տեղադրենք pygame գրադարանը: Դա կարելի է անել՝ օգտագործելով pip փաթեթի կառավարիչը:

Pygame գրադարանը տեղադրելու համար բացեք ձեր տերմինալը և մուտքագրեք հետևյալ հրամանը −

pip install pygame

Սա կներբեռնի և կտեղադրի pygame գրադարանը և դրա կախվածությունները: Տեղադրվելուց հետո մենք կարող ենք ներմուծել pygame-ը մեր Python կոդում՝ օգտագործելով հետևյալ հայտարարությունը -

import pygame

Պարզ խաղի կառուցում Pygame մոդուլի միջոցով

Այս հոդվածը մի փոքր տարբերվելու է մյուս հոդվածներից, քանի որ դրանում մենք կկոդավորենք ամբողջ սցենարը սկզբում արագ և հեշտ մեկնաբանություններով՝ հասկանալու համար, իսկ հետո վերջապես կբաժանենք բոլոր բաղադրիչները և այն, ինչ մենք անում ենք: Այդպես ավելի հեշտ է հասկանալ և չի խանգարում ուսուցման գործընթացին:

Ամբողջական կոդը

Օրինակ

Ահա ամբողջական կոդը −

import pygame
import random

# Initialize pygame
pygame.init()

# Set the width and height of the screen (width, height)
screen = pygame.display.set_mode((800, 600))

# Set the title of the window
pygame.display.set_caption("Catch Game")

# Set the clock
clock = pygame.time.Clock()

# Colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# Player class
class Player(pygame.sprite.Sprite):
   def __init__(self):
      super().__init__()
      selfelf.image = pygame.Surface([50, 50])
      self.image.fill(RED)
      self.rect = self.image.get_rect()
      self.rect.x = 375
      self.rect.y = 500
      self.speed = 5

   def update(self):
      # Get the current key state
      keys = pygame.key.get_pressed()

      # Move the player
   if keys[pygame.K_LEFT]:
      self.rect.x -= self.speed
   elif keys[pygame.K_RIGHT]:
      self.rect.x += self.speed

# Object class
class Object(pygame.sprite.Sprite):
   def __init__(self):
      super().__init__()
      self.image = pygame.Surface([25, 25])
      self.image.fill(BLUE)
      self.rect = self.image.get_rect()
      self.rect.x = random.randrange(0, 750)
      self.rect.y = random.randrange(-100, -40)
      self.speed = random.randint(2, 8)

   def update(self):
      # Move the object down the screen
      self.rect.y += self.speed

      # If the object goes off the bottom of the screen, reset it
      if self.rect.top > 600:
         self.rect.x = random.randrange(0, 750)
         self.rect.y = random.randrange(-100, -40)
         self.speed = random.randint(2, 8)

# Create groups for all sprites and objects
all_sprites = pygame.sprite.Group()
objects = pygame.sprite.Group()

# Create the player
player = Player()
all_sprites.add(player)

# Create the objects
for i in range(10):
   obj = Object()
   all_sprites.add(obj)
   objects.add(obj)

# Set the score
score = 0

# Set the font
font_name = pygame.font.match_font("arial")

# Function to draw text on the screen
def draw_text(surf, text, size, x, y):
   font = pygame.font.Font(font_name, size)
   text_surface = font.render(text, True, WHITE)
   text_rect = text_surface.get_rect()
   text_rect.midtop = (x, y)
   surf.blit(text_surface, text_rect)

# Game loop
running = True
while running:
   # Set the frame rate
   clock.tick(60)

   # Process events
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         running = False

   # Update all sprites
   all_sprites.update()

   # Check for collisions between the player and objects
   hits = pygame.sprite.spritecollide(player, objects, True)
   for hit in hits:
      score += 1
      obj = Object()
      all_sprites.add(obj)
      objects.add(obj)

   # Draw everything on the screen
   screen.fill(BLACK)
   all_sprites.draw(screen)
   draw_text(screen, "Score: {}".format(score), 18, 50, 10)

   # Update the screen
   pygame.display.update()

Կոդի խզում

Այս կոդը Pygame խաղի հիմնական օրինակն է: Ահա կոդի յուրաքանչյուր մասի բացատրությունը −

  • pygame.init() - Սա սկզբնավորում է Pygame-ը:

  • screen=pygame.display.set_mode((800, 600)) - Սա ստեղծում է խաղի էկրանը 800x600 պիքսել լուծաչափով:

  • pygame.display.set_caption("Catch Game") − Սա սահմանում է պատուհանի վերնագիրը «Catch Game»:

  • clock=pygame.time.Clock() - Սա ստեղծում է Pygame ժամացույց, որն օգտագործվում է խաղի կադրերի արագությունը կարգավորելու համար:

  • Գույներ - Այս տողերը սահմանում են տարբեր գույների հաստատուններ, որոնք հետագայում կօգտագործվեն կոդի մեջ:

  • Խաղացողի դաս - Սա Pygame sprite դաս է, որը սահմանում է խաղացողի օբյեկտը: Այն ունի «թարմացում» կոչվող մեթոդ, որը կոչվում է յուրաքանչյուր շրջանակ՝ խաղացողի դիրքը թարմացնելու համար՝ հիմնվելով օգտագործողի մուտքի վրա:

  • Օբյեկտի դաս - Սա Pygame-ի մեկ այլ սփրայթ դաս է, որը սահմանում է այն առարկաները, որոնք խաղացողը պետք է բռնի: Այն ունի «թարմացում» կոչվող մեթոդ, որը կոչվում է յուրաքանչյուր շրջանակ՝ օբյեկտի դիրքը թարմացնելու համար:

  • all_sprites=pygame.sprite.Group() - Սա ստեղծում է Pygame sprite խումբ, որը կպարունակի խաղի բոլոր sprites-ները:

  • objects=pygame.sprite.Group() - Սա ստեղծում է Pygame sprite խումբ, որը կպարունակի բոլոր այն առարկաները, որոնք խաղացողը պետք է բռնի:

  • player=Player() - Սա ստեղծում է Player դասի օրինակ և ավելացնում այն all_sprites խմբին:

  • i-ի համար միջակայքում(10) - Սա ստեղծում է Object դասի 10 օրինակ, դրանք ավելացնում է all_sprites խմբին և ավելացնում է օբյեկտների խմբին:

  • գնահատական=0 - Սա սկզբնավորում է միավորը մինչև 0:

  • font_name=pygame.font.match_font("arial") - Սա սահմանում է միավորների ցուցադրման համար օգտագործվող տառատեսակը:

  • draw_text(surf, text, size, x, y) - Սա օգնական ֆունկցիա է, որը նկարում է տեքստը էկրանին:

  • Խաղի հանգույց - Սա խաղի հիմնական հանգույցն է: Այն աշխատում է այնքան ժամանակ, մինչև «վազող» փոփոխականը դրվի False-ի:

  • clock.tick(60) - Սա սահմանում է կադրերի արագությունը վայրկյանում 60 կադր:

  • pygame.event.get()-ում իրադարձության համար - Սա մշակում է Pygame-ի բոլոր իրադարձությունները, որոնք տեղի են ունենում յուրաքանչյուր կադրի ընթացքում:

  • all_sprites.update() - Սա կանչում է «թարմացում» մեթոդը all_sprites խմբի բոլոր սփրայթների վրա:

  • hits=pygame.sprite.spritecollide (player, objects, True) - Սա ստուգում է խաղացողի և առարկաների միջև բախումները: Եթե բախում է հայտնաբերվում, օբյեկտը հանվում է օբյեկտների խմբից և միավորը ավելանում է 1-ով:

  • screen.fill(BLACK) - Սա լրացնում է էկրանը սև գույնով:

  • all_sprites.draw(screen) - Սա էկրանին նկարում է all_sprites խմբի բոլոր sprites-ները:

  • draw_text(screen, "Score − {}".format(score), 18, 50, 10). Սա գծում է հաշիվը էկրանին:

  • pygame.display.update() - Սա թարմացնում է էկրանը ընթացիկ կադրի ընթացքում կատարված բոլոր փոփոխություններով:

Արդյունք

Ահա մի նմուշ արդյունք

Եզրակացություն

Pygame-ը բաց կոդով հզոր փաթեթ է Python-ում խաղեր և մուլտիմեդիա հավելվածներ ստեղծելու համար: Նրա բազմազան գործառույթներն ու գործիքները թույլ են տալիս այն օգտագործել տարբեր ժանրերի խաղեր ստեղծելու համար՝ սկսած պարզ 2D հարթակներից մինչև ավելի բարդ 3D խաղեր: Այս ձեռնարկում մենք նայեցինք, թե ինչպես օգտագործել Pygame-ը պարզ խաղ ստեղծելու համար, որտեղ խաղացողը կարող է շփվել շրջակա միջավայրի հետ, շարժվել և գրավել իրերը էկրանին:

Այս ձեռնարկից հետո դուք պետք է հասկանաք, թե ինչպես է աշխատում Pygame-ը և ինչպես այն կարող է օգտագործվել ավելի բարդ խաղեր ստեղծելու համար: Ընդհանուր առմամբ, Pygame-ը հիանալի գործիք է խաղերի մշակողների համար, ովքեր ցանկանում են կառուցել Python-ի վրա հիմնված խաղեր: