Направете геймплея си по-завладяващ, като внедрите система за диалог.

Внедряването на система за диалог в Pygame може значително да подобри интерактивното изживяване на играта. Системата за диалог позволява на играта да представя разговори, съобщения и избори на играча, създавайки по-завладяващ и ангажиращ геймплей.

Библиотеката Pygame предоставя необходимите инструменти за създаване на графичен потребителски интерфейс (GUI) и обработка на въведени от потребителя данни, което я прави идеален избор за внедряване на система за диалог.

Създайте проста игра

Преди да започнете, уверете се, че имате pip, инсталиран на вашата система. Използвайте тази команда, за да инсталирате pygame библиотека:

pip инсталирайте pygame

След това започнете, като създадете проста игра, в която играчът може да се движи наляво и надясно, като избягва враг.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.

Кодовият фрагмент по-долу настройва прозореца на играта, инициализира свойствата на играча и врага и стартира цикъла на играта.

instagram viewer
# Импортирайте необходимите библиотеки
импортиране pygame
от pygame.locals импортиране *

pygame.init()

# Настройте прозореца на играта
екран_ширина, екран_височина = 800, 600
екран = pygame.display.set_mode((ширина_на_екрана, височина_на_екрана))
pygame.display.set_caption("Моята игра")

# Определете цветовете
ЧЕРНО = (0, 0, 0)
БЯЛО = (255, 255, 255)
СИВО = (128, 128, 128)

# Свойства на играча
играч_x = 400
player_y = 500
играч_скорост = 5

# Свойства на врага
враг_x = 400
враг_у = 100
вражеска_скорост = 3

бягане = Вярно
часовник = pygame.time. Часовник()

докато работи:
за събитие в pygame.event.get():
ако event.type == ИЗХОД:
бягане = Невярно

ключове = pygame.key.get_pressed()

# Движение на играча
ако клавиши [K_LEFT] и player_x > 0:
player_x -= играч_скорост
ако ключове [K_RIGHT] и player_x < screen_width - player_speed:
player_x += player_speed

# Актуализирайте позицията на врага
враг_y += враг_скорост
ако enemy_y > screen_height:
враг_у = -50

# Проверете сблъсък
ако pygame. Rect (player_x, player_y, 50, 50).colliderect (pygame. Rect (враг_x, враг_y, 50, 50)):
# Внедрете диалогов прозорец тук
пас

screen.fill (ЧЕРНО)
pygame.draw.rect (екран, БЯЛ, (player_x, player_y, 50, 50))
pygame.draw.rect (екран, БЯЛ, (враг_x, враг_y, 50, 50))
pygame.display.flip()
clock.tick(60)

pygame.quit()

По-долу е резултатът:

Създаване на диалогов прозорец

За да реализирате диалогов прозорец, трябва да го показвате всеки път, когато играчът докосне врага. Добавете dialogue_box променлива, която контролира дали диалоговият прозорец да се показва или не.

Вътре в цикъла на играта, проверете за сблъсък между играча и врага, и ако има сблъсък, задайте dialogue_box да се Вярно. В рамките на условието, където dialogue_box е Вярно, нарисувайте сив правоъгълник на екрана, като използвате pygame.draw.rect() за представяне на диалоговия прозорец.

Създайте нов файл с име dialogue.py и добавете кода със следните актуализации:

# Свойства на диалогов прозорец
dialogue_box_width = 400
височина_на_диалоговата_кутия = 200
dialogue_box_x = (screen_width - dialogue_box_width) // 2
dialogue_box_y = (screen_height - dialogue_box_height) // 2
dialogue_box = Невярно
# ...
докато работи:
за събитие в pygame.event.get():
ако event.type == ИЗХОД:
бягане = Невярно
ключове = pygame.key.get_pressed()
# Движение на играча
ако клавиши [K_LEFT] и player_x > 0:
player_x -= играч_скорост
ако ключове [K_RIGHT] и player_x < screen_width - player_speed:
player_x += player_speed
# Актуализирайте позицията на врага
враг_y += враг_скорост
ако enemy_y > screen_height:
враг_у = -50
# Проверете сблъсък
ако pygame. Rect (player_x, player_y, 50, 50).colliderect (pygame. Rect (враг_x, враг_y, 50, 50)):
dialogue_box = Вярно
screen.fill (ЧЕРНО)
ако dialogue_box:
pygame.draw.rect (екран, СИВ, (dialogue_box_x,
dialogue_box_y,
dialogue_box_width,
височина на диалогова_кутия))

# Добавете диалогов текст и бутони тук
друго:
pygame.draw.rect (екран, БЯЛ, (player_x, player_y, 50, 50))
pygame.draw.rect (екран, БЯЛ, (враг_x, враг_y, 50, 50))
pygame.display.flip()
clock.tick(60)
pygame.quit()

По-долу е резултатът:

Сега, за да направите диалоговия прозорец по-функционален и интерактивен, можете да продължите да добавяте бутони и текст.

Добавете бутони с помощта на GUI на Python

За да добавите бутони към диалоговия прозорец, можете да използвате GUI библиотека на Python като Pygame GUI или PySimpleGUI.

Инсталирайте и импортирайте pygame_gui модул, след което създайте GUI мениджър на Pygame, като използвате pygame_gui. UIManager. След това създайте бутон с помощта на UIButton клас, предоставен от библиотеката на Python GUI.

Вътре в цикъла на играта добавете manager.update (pygame.time.get_ticks() / 1000.0) за актуализиране на GUI мениджъра и manager.draw_ui (екран) за да начертаете GUI елементите на екрана.

Създайте нов файл с име бутони.py и добавете кода със следните актуализации:


импортиране pygame_gui

# Pygame GUI мениджър
мениджър = pygame_gui. UIManager((ширина_на_екрана, височина_на_екрана))

# Създаване на бутон
бутон_ширина = 100
бутон_височина = 30
button_x = dialogue_box_x + (dialogue_box_width - button_width) // 2
button_y = dialogue_box_y + (dialogue_box_height - button_height) // 2
бутон = pygame_gui.elements. UIButton (relative_rect=pygame. Rect (button_x, button_y, button_width, button_height),
текст=„Щракни ме“,
управител=управител)

бягане = Вярно
часовник = pygame.time. Часовник()

докато работи:
за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
бягане = Невярно

manager.process_events (събитие)

ключове = pygame.key.get_pressed()

# Проверете сблъсък
ако pygame. Rect (player_x, player_y, 50, 50).colliderect (pygame. Rect (враг_x, враг_y, 50, 50)):
dialogue_box = Вярно

screen.fill (ЧЕРНО)

ако dialogue_box:
pygame.draw.rect (екран, СИВ, (dialogue_box_x,
dialogue_box_y,
dialogue_box_width,
височина на диалогова_кутия))
manager.update (pygame.time.get_ticks() / 1000.0)
manager.draw_ui (екран)
друго:
pygame.draw.rect (екран, БЯЛ, (player_x, player_y, 50, 50))
pygame.draw.rect (екран, БЯЛ, (враг_x, враг_y, 50, 50))

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

pygame.quit()

По-долу е резултатът:

С тези промени бутонът вече трябва да се вижда в диалоговия прозорец, когато се появи.

Добавете текст с помощта на GUI на Python

За да покажете персонализиран текст в диалоговия прозорец, можете да използвате текстовата функционалност, предоставена от библиотеката на Python GUI.

Определете свойствата на шрифта, като използвате pygame.font. Шрифт(). Създавам текст променлива с желаното съдържание и след това го изобразете, като използвате посочения шрифт и цвят.

Създайте нов файл с име text.py и добавете кода със следните актуализации:


# Инициализиране на Pygame GUI мениджър
мениджър = pygame_gui. UIManager((ширина_на_екрана, височина_на_екрана))

# Дефинирайте свойствата на шрифта
шрифт = pygame.font. шрифт (Нито един, 24)
цвят_на текст = ЧЕРЕН

# ...

докато работи:
# ...

ако dialogue_box:
pygame.draw.rect (екран, СИВ, (dialogue_box_x,
dialogue_box_y,
dialogue_box_width,
височина на диалогова_кутия))

# Добавете текст към диалоговия прозорец
текст = „Здравейте, добре дошли в играта!“
rendered_text = font.render (текст, Вярно, цвят_на текста)
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)

По-долу е резултатът:

Включително допълнителни функции

В допълнение към бутоните и текста, има няколко други функции, които можете да обмислите да добавите към вашата система за диалог в Pygame. Ето още няколко примера:

Характерни емоции

Показвайте емоции или изражения на лицето на героите по време на диалог, за да предадете тяхното настроение или реакции. Това може да се постигне чрез използване на анимирани спрайтове или наслагвания на изображения, които се променят в зависимост от контекста на разговора.

Условни диалози

Използвайте условни изрази, за да задействате конкретни диалози въз основа на определени критерии, като напредък на играча, предишни избори или събития в играта. Това добавя дълбочина и персонализирани взаимодействия въз основа на действията на играча.

Гласове

Подобрете потапянето на системата за диалог чрез включване на гласова игра за диалози с герои. Възпроизвеждане на аудио клипове в Pygame които съответстват на текста, показан в диалоговия прозорец, за да придадат на знаците различен глас.

Чрез включването на тези допълнителни функции можете да създадете по-динамична и ангажираща диалогова система, която подобрява потапянето на играча и осигурява уникално геймплей изживяване.

Най-добри практики за добавяне на система за диалог

Когато внедрявате система за диалог в Pygame, е важно да следвате определени най-добри практики, за да осигурите ефективност, поддръжка и гладко изживяване на играча. Ето някои допълнителни най-добри практики, които трябва да имате предвид:

Използвайте дизайн, управляван от данни

Съхранявайте съдържанието на диалога, включително текст, информация за говорещия и опции за диалог във външни файлове с данни (напр. JSON, XML). Това позволява лесно модифициране, локализиране и управление на съдържанието на диалога, без да се изискват промени в кода.

Внедрете мениджър на диалог

Създайте специален клас или модул на мениджър на диалог, който управлява логиката за управление на диалоговите взаимодействия. Това помага да се поддържа кодът организиран и позволява по-лесна поддръжка и разширяване.

Тестване и балансиране

Редовно тествайте и балансирайте системата за диалог, за да сте сигурни, че диалозите протичат естествено, изборите имат значими последствия и темпото е в съответствие с цялостното игрово изживяване. Събирайте обратна връзка от играчите и повтаряйте съдържанието и структурата на диалога, за да подобрите ангажираността на играчите.

Поддръжка за локализация

Проектирайте системата за диалог, като имате предвид локализацията от самото начало. Отделете текстови низове от кода и използвайте езикови файлове или библиотеки за локализация, за да поддържате множество езици. Това позволява по-лесен превод и локализиране на съдържанието на диалога.

Като следвате тези най-добри практики, можете да гарантирате, че вашата диалогова система е добре проектирана, ефективна и гъвкава, което позволява по-лесна поддръжка и актуализации, докато играта ви се развива.

Направете игрите по-ангажиращи със системата за диалог

Добавянето на система за диалог към вашата игра може да я направи по-ангажираща, като позволи на играчите да взаимодействат с неиграещи герои (NPC), да разкриват сюжетни линии, да правят избори и да получават ценна информация.

Не забравяйте да проектирате внимателно структурата на диалога, да използвате модулен подход и да обмислите интегрирането на колекционерски предмети и нива, за да обогатите допълнително изживяването на играча.