Cách thiết kế và tạo cấp độ trong PyGame

game level planning in white board

Cấp độ là một khía cạnh thiết yếu của hầu hết các trò chơi điện tử. Chúng cung cấp cấu trúc, thử thách và sự đa dạng, đồng thời có thể nâng cao đáng kể trải nghiệm của người chơi. PyGame, một thư viện Python phổ biến để phát triển trò chơi, cung cấp nhiều tính năng khác nhau mà bạn có thể dễ dàng tạo các cấp độ khác nhau. Một cấp độ được thiết kế tốt có thể thu hút người chơi, tạo cảm giác tiến bộ và cuối cùng là phần thưởng cho những nỗ lực của họ.


Cấp độ lập kế hoạch và thiết kế

Trước khi tạo cấp độ, điều cần thiết là lập kế hoạch và thiết kế chúng. Các cấp độ lập kế hoạch giúp tạo ra một trò chơi có cấu trúc tốt, cung cấp mức độ khó phù hợp cho người chơi. Để lên kế hoạch cho các cấp độ, bạn cần xem xét nhiều yếu tố khác nhau như cơ chế của trò chơi, cốt truyện và cấu trúc tổng thể của trò chơi.

Ví dụ: nếu bạn đang thiết kế một trò chơi platformer, bạn cần suy nghĩ về vị trí của các nền tảng, kẻ thù và chướng ngại vật. Bạn cũng cần xem xét chuyển động của người chơi, chẳng hạn như nhảy và chạy, và thiết kế các cấp độ cho phù hợp.

Mã được sử dụng trong bài viết này có sẵn trong kho lưu trữ GitHub này và bạn được sử dụng miễn phí theo giấy phép MIT.

Tạo hai cấp độ đơn giản

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên hệ thống của mình. Sử dụng lệnh này để cài đặt pygame thư viện:

 pip install pygame 

Bây giờ, hãy tạo hai cấp độ đơn giản với nền tảng và trình phát. Đây là mã cho cấp độ đầu tiên:

 import pygame
pygame.init()



SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLATFORM_WIDTH = 100
PLATFORM_HEIGHT = 20
PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50
PLATFORM_COLOR = (255, 255, 255)
PLAYER_COLOR = (255, 0, 0)



screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))



platform = pygame.Rect(350, 500, PLATFORM_WIDTH, PLATFORM_HEIGHT)



player = pygame.Rect(375, 450, PLAYER_WIDTH, PLAYER_HEIGHT)



running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.move_ip(-10, 0)
            elif event.key == pygame.K_RIGHT:
                player.move_ip(10, 0)


    
    screen.fill((0, 0, 0))


    
    pygame.draw.rect(screen, PLATFORM_COLOR, platform)


    
    pygame.draw.rect(screen, PLAYER_COLOR, player)


    
    pygame.display.flip()


pygame.quit()

Sau đó, tạo cấp độ thứ hai bằng cách thay đổi nền tảng và vị trí của người chơi. Đây là mã cho cấp độ thứ hai:

 import pygame
pygame.init()



SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLATFORM_WIDTH = 150
PLATFORM_HEIGHT = 20
PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50
PLATFORM_COLOR = (255, 255, 255)
PLAYER_COLOR = (255, 0, 0)



screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))



platform = pygame.Rect(200, 500, PLATFORM_WIDTH, PLATFORM_HEIGHT)



player = pygame.Rect(225, 450, PLAYER_WIDTH, PLAYER_HEIGHT)



running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.move_ip(-10, 0)
            elif event.key == pygame.K_RIGHT:
                player.move_ip(10, 0)


    
    screen.fill((0, 0, 0))


    
    pygame.draw.rect(screen, PLATFORM_COLOR, platform)


    
    pygame.draw.rect(screen, PLAYER_COLOR, player)


    
    pygame.display.flip()


pygame.quit()

Mã này tương tự như cấp độ đầu tiên, nhưng nền tảng và vị trí của người chơi đã thay đổi.

Kết nối các cấp độ khác nhau

Để kết nối các cấp độ khác nhau, bạn cần sửa đổi vòng lặp trò chơi để chuyển đổi giữa các cấp độ khi người chơi hoàn thành một cấp độ. Bạn có thể làm điều này bằng cách tạo một biến để theo dõi cấp độ hiện tại và sử dụng các câu lệnh điều kiện để chuyển đổi giữa các cấp độ. Bạn cũng có thể phát hiện các va chạm để kiểm tra xem người chơi đã đến cuối cấp chưa.

Đây là vòng lặp trò chơi đã sửa đổi:

 current_level = 1

if current_level == 1:
    pygame.draw.rect(screen, PLATFORM_COLOR, platform1)
    pygame.draw.rect(screen, PLAYER_COLOR, player)
    
    if player.colliderect(platform1) == False:
        current_level = 2
elif current_level == 2:
    pygame.draw.rect(screen, PLATFORM_COLOR, platform2)
    pygame.draw.rect(screen, PLAYER_COLOR, player)
    
    if player.colliderect(platform2) == True:
        running = False

Chia sẻ dữ liệu trò chơi giữa các cấp độ

Bạn cần lưu trữ dữ liệu trò chơi để chia sẻ giữa các cấp. Để làm được điều đó, hãy tạo một mô-đun Python riêng để lưu trữ dữ liệu trò chơi và nhập dữ liệu đó vào từng cấp độ.

Dưới đây là các bước:

  • Tạo một mô-đun Python mới có tên game_data.py.
  • Định nghĩa một biến toàn cục trong game_data.py mô-đun để lưu trữ vị trí của người chơi.
  • Ở mỗi cấp độ, hãy nhập dữ liệu game mô-đun.
  • Để truy xuất vị trí của người chơi ở mỗi cấp độ, hãy sử dụng game_data.player_pos biến thay vì tạo một đối tượng người chơi mới.
  • Để cập nhật vị trí của người chơi, hãy sửa đổi giá trị của game_data.player_pos trong mỗi lần lặp.

Đây là mã đã sửa đổi để chia sẻ vị trí của người chơi giữa các cấp độ.

bên trong game_data.py mô-đun, thêm đoạn mã sau:

 player_pos = (0, 0) 

Cấp độ đầu tiên:

 import pygame
import game_data

player = pygame.Rect(game_data.player_pos[0], game_data.player_pos[1], PLAYER_WIDTH, PLAYER_HEIGHT)



running = True
while running:
    
    pygame.draw.rect(screen, PLAYER_COLOR, player)


    
    game_data.player_pos = (player.x, player.y)

Làm cho trò chơi hấp dẫn hơn với các cấp độ

Việc thêm các cấp độ khác nhau vào trò chơi của bạn có thể khiến trò chơi trở nên hấp dẫn và thú vị hơn đối với người chơi. Bằng cách kết nối các cấp độ và chia sẻ dữ liệu trò chơi, bạn có thể tạo trải nghiệm chơi trò chơi liền mạch và gắn kết. Điều này có thể giúp người chơi đắm chìm trong thế giới trò chơi và giảm khả năng rời rạc hoặc nhàm chán.

Previous Post
Next Post

post written by: