Cách triển khai hệ thống hội thoại trong Pygame

Tạo trải nghiệm chơi game hấp dẫn hơn bằng cách triển khai hệ thống hội thoại. Dưới đây là hướng dẫn tạo hệ thống hội thoại trong PyGame đơn giản nhất.

Tạo Pygame

Triển khai hệ thống hội thoại trong Pygame có thể cải thiện đáng kể trải nghiệm tương tác của một trò chơi. Hệ thống hội thoại cho phép người chơi trò chuyện, nhắn tin và đưa ra lựa chọn trong game, tạo gameplay hấp dẫn và thú vị hơn.

Thư viện Pygame cung cấp các công cụ cần thiết để tạo giao diện đồ họa người dùng (GUI) và xử lý đầu vào của người dùng, khiến nó trở thành lựa chọn lý tưởng để triển khai hệ thống hội thoại.

Tạo game đơn giản

Trước khi bắt đầu, đảm bảo bạn đã cài pip trên hệ thống. Dùng lệnh này để cài thư viện pygame:

pip install pygame

Sau đó, bắt đầu bằng cách tạo một game đơn giản tại nơi người chơi có thể di chuyển sang trái và phải trong khi tránh kẻ thù.

Đoạn code bên dưới thiết lập cửa sổ game, khởi tạo thuộc tính của người chơi và kẻ thù, đồng thời chạy vòng lặp game.

# Nhập thư viện cần thiết
import pygame
from pygame.locals import *

pygame.init()

# Thiết lập cửa sổ game
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("My Game")

# Xác định màu sắc
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (128, 128, 128)

# Thuộc tính người chơi
player_x = 400
player_y = 500
player_speed = 5

# Thuộc tính kẻ thù
enemy_x = 400
enemy_y = 100
enemy_speed = 3

running = True
clock = pygame.time.Clock()

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

    keys = pygame.key.get_pressed()

    # Chuyển động của người chơi
    if keys[K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[K_RIGHT] and player_x < screen_width - player_speed:
        player_x += player_speed

    # Update vị trí của kẻ thù
    enemy_y += enemy_speed
    if enemy_y > screen_height:
        enemy_y = -50

    # Kiểm tra va chạm
    if pygame.Rect(player_x, player_y, 50, 50).colliderect(pygame.Rect(enemy_x, enemy_y, 50, 50)):
        # Implement dialogue box here
        pass

    screen.fill(BLACK)
    pygame.draw.rect(screen, WHITE, (player_x, player_y, 50, 50))
    pygame.draw.rect(screen, WHITE, (enemy_x, enemy_y, 50, 50))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Kết quả:

Tạo game đơn giản

Tạo box hội thoại

Để triển khai hội thoại, bạn cần hiện nó bất cứ khi nào người chơi chạm vào kẻ thù. Thêm biến dialogue_box, kiểm soát hộp thoại sẽ hiện hoặc không.

Bên trong vòng lặp game, kiểm tra va chạm giữa người chơi và kẻ thù. Nếu có va chạm, đặt dialogue_box sang True. Trong điều kiện tại vị trí dialogue_box True, vẽ một hình chữ nhật màu xám trên màn hình bằng pygame.draw.rect() để đại diện cho hộp thoại.

Tạo file mới tên dialogue.py và thêm code bằng các bản update bên dưới:

# Thuộc tính hộp thoại
dialogue_box_width = 400
dialogue_box_height = 200
dialogue_box_x = (screen_width - dialogue_box_width) // 2
dialogue_box_y = (screen_height - dialogue_box_height) // 2
dialogue_box = False
# ...
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
    keys = pygame.key.get_pressed()
    # Chuyển động người chơi
    if keys[K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[K_RIGHT] and player_x < screen_width - player_speed:
        player_x += player_speed
    # Update vị trí kẻ thù
    enemy_y += enemy_speed
    if enemy_y > screen_height:
        enemy_y = -50
    # Kiểm tra va chạm
    if pygame.Rect(player_x, player_y, 50, 50).colliderect(pygame.Rect(enemy_x, enemy_y, 50, 50)):
        dialogue_box = True
    screen.fill(BLACK)
    if dialogue_box:
        pygame.draw.rect(screen, GRAY, (dialogue_box_x,
                                        dialogue_box_y,
                                        dialogue_box_width,
                                        dialogue_box_height))
       
        # Thêm văn bản hội thoại và nút bấm tại đây
    else:
        pygame.draw.rect(screen, WHITE, (player_x, player_y, 50, 50))
        pygame.draw.rect(screen, WHITE, (enemy_x, enemy_y, 50, 50))
    pygame.display.flip()
    clock.tick(60)
pygame.quit()

Kết quả:

Tạo hội thoại trò chuyện trong game

Giờ đảm bảo hộp thoại giàu chức năng và có tính tương tác hơn, bạn có thể tiến hành thêm nút bấm và văn bản.

Thêm nút bấm bằng Python GUI

Để thêm nút bấm vào hội thoại, bạn có thể dùng thư viện Python GUI như Pygame GUI hoặc PySimpleGUI.

Cài đặt và nhập mô đun pygame_gui, sau đó tạo một trình quản lý Pygame GUI bằng pygame_gui.UIManager. Sau đó, tạo nút bấm bằng class UIButton được cung cấp bởi thư viện Python GUI.

Bên trong vòng lặp game, thêm manager.update(pygame.time.get_ticks() / 1000.0) để update trình quản lý GUI và manager.draw_ui(screen) để vẽ các thành phần GUI trên màn hình.

Tạo file mới tên buttons.py và thêm code bằng các bản update bên dưới:

import pygame_gui 

# Trình quản lý GUI Pygame 
manager = pygame_gui.UIManager((screen_width, screen_height))

# Tạo nút bấm
button_width = 100
button_height = 30
button_x = dialogue_box_x + (dialogue_box_width - button_width) // 2
button_y = dialogue_box_y + (dialogue_box_height - button_height) // 2
button = pygame_gui.elements.UIButton(relative_rect=pygame.Rect(button_x, button_y, button_width, button_height),
                                      text='Click Me',
                                      manager=manager)

running = True
clock = pygame.time.Clock()

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

        manager.process_events(event)

    keys = pygame.key.get_pressed()

    # Kiểm tra va chạm
    if pygame.Rect(player_x, player_y, 50, 50).colliderect(pygame.Rect(enemy_x, enemy_y, 50, 50)):
        dialogue_box = True

    screen.fill(BLACK)

    if dialogue_box:
        pygame.draw.rect(screen, GRAY, (dialogue_box_x, 
                                        dialogue_box_y, 
                                        dialogue_box_width, 
                                        dialogue_box_height))
        manager.update(pygame.time.get_ticks() / 1000.0)
        manager.draw_ui(screen)
    else:
        pygame.draw.rect(screen, WHITE, (player_x, player_y, 50, 50))
        pygame.draw.rect(screen, WHITE, (enemy_x, enemy_y, 50, 50))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Kết quả:

Tạo văn bản trong hộp thoại

Với những thay đổi này, nút bấm sẽ hiện bên trong hội thoại khi nó xuất hiện.

Thêm text bằng Python GUI

Để hiện text tùy biến trong hội thoại, bạn có thể dùng tính năng nhắn tin do thư viện Python GUI cung cấp.

Xác định các thuộc tính font bằng pygame.font.Font(). Tạo một biến text với nội dung mong muốn, sau đó hiển thị nó bằng font và màu được chỉ định.

Tạo tên file mới text.py và thêm code với các update bên dưới:

# Khởi tạo trình quản lý Pygame GUI 
manager = pygame_gui.UIManager((screen_width, screen_height))

# Định nghĩa thuộc tính font
font = pygame.font.Font(None, 24)
text_color = BLACK

# ...

while running:
    # ...

    if dialogue_box:
        pygame.draw.rect(screen, GRAY, (dialogue_box_x, 
                                        dialogue_box_y, 
                                        dialogue_box_width, 
                                        dialogue_box_height))

        # Thêm text vào hộp thoại
        text = "Hello, welcome to the game!"
        rendered_text = font.render(text, True, text_color)
        text_rect = rendered_text.get_rect(center=(dialogue_box_x + dialogue_box_width // 2,
                                                   dialogue_box_y + dialogue_box_height // 2))

        screen.blit(rendered_text, text_rect)

Kết quả:

Thêm text vào Python GUI

Bao gồm các tính năng bổ sung

Ngoài nút bấm và text, bạn có thể cân nhắc thêm một số tính năng khác cho hệ thống hội thoại trong PyGame. Ví dụ:

  • Tạo cảm xúc nhân vật bằng cách dùng sprite hoặc ảnh động thay đổi theo bối cảnh của hội thoại.
  • Tạo hội thoại theo điều kiện như tiến trình, lựa chọn và sự kiện trong game.
  • Lồng tiếng cho nhân vật bằng cách đưa clip âm thanh khớp với văn bản trong hội thoại.

Thêm hệ thống hội thoại vào game có thể làm trò chơi hấp dẫn hơn bằng cách cho phép người chơi tương tác với NPC, khám phá cốt truyện, đưa ra nhiều lựa chọn và thu thập thông tin thú vị.

Nhớ thiết kế cấu trúc hội thoại hợp lý, dùng phương pháp mô đun và cân nhắc tích hợp cấp độ và thu thập vật phẩm để làm phong phú trải nghiệm người chơi nhé!

Thứ Hai, 03/07/2023 16:31
42 👨 250
0 Bình luận
Sắp xếp theo