شخصیت های واقع گرایانه معمولاً با صحبت کردن با یکدیگر تعامل دارند. مطمئن شوید که دیالوگ خود را به شیوه ای قابل دسترس و مکمل ارائه می کنید.
اگر بازی شما دارای شخصیت هایی است، احتمالاً می خواهید که آنها با یکدیگر گفتگو کنند. یک سیستم گفتگو مکالمات تعاملی، پیشرفت داستان و توسعه شخصیت را فراهم می کند. کتابخانه Python Arcade ادغام یک سیستم گفتگو را در پایگاه کد موجود شما آسان می کند.
با یک سیستم گفتگو، می توانید مکالمات بین بازیکن و شخصیت های غیر بازیکن (NPC) ایجاد کنید. بازیکن می تواند پاسخ ها را انتخاب کند یا تصمیماتی بگیرد که بر روایت یا نتیجه بازی تأثیر می گذارد.
این سیستم به شما امکان می دهد داستان های متقاعد کننده بسازید و تعاملات پویا ایجاد کنید و تجربه گیم پلی فراگیرتری را ارائه دهید.
یک بازی ساده بسازید
برای شروع، یک بازی ساده با استفاده از کتابخانه Arcade ایجاد کنید. این به عنوان پایه ای برای اجرای سیستم گفتگو عمل خواهد کرد.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
یک فایل جدید به نام simple-game.py ایجاد کنید و یک کلاس Game تعریف کنید که از arcade.Window به ارث می برد. ابعاد صفحه نمایش را تنظیم کنید، موقعیت پخش و پلت فرم را مقداردهی اولیه کنید، و عملکرد اصلی طراحی را اجرا کنید. بازیکن می تواند با استفاده از کلیدهای جهت دار به چپ و راست حرکت کند.
این خروجی است:
افزودن جعبه گفتگو
اکنون که یک ساختار اولیه بازی دارید، یک کادر گفتگو اضافه کنید که هنگام برخورد بازیکن با دشمن ظاهر می شود. می توانید با استفاده از اشکال ساده یک جعبه گفتگو ایجاد کنید و آن را روی صفحه نمایش دهید.
یک پرچم dialogue_active را به کلاس Game اضافه کنید، که نشان می دهد آیا کادر گفتگو باید نشان داده شود. در روش on_update، برخورد دشمن را بررسی کنید و در صورت شناسایی، dialogue_active را روی True قرار دهید.
در متد on_draw، اگر دیالوگ فعال است، متد draw_dialogue_box را فراخوانی کنید. روش draw_dialogue_box یک مستطیل را به عنوان پسزمینه کادر گفتگو ترسیم میکند و یک پیام متنی نمایش میدهد.
یک فایل جدید با نام dialogue-box.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
# Inside the Game class
class Game(arcade.Window):
def __init__(self):
# ...
self.dialogue_active = False
def on_update(self, delta_time):
if self.check_enemy_collision():
self.dialogue_active = True
def on_draw(self):
# ...
if self.dialogue_active:
self.draw_dialogue_box()
def check_enemy_collision(self):
player_radius = 25
distance_x = abs(self.player_x - self.platform_x)
distance_y = abs(self.player_y - self.platform_y)
combined_radius = player_radius + 25
if distance_x < combined_radius and distance_y < combined_radius:
return True
else:
return False
def draw_dialogue_box(self):
text = "Hello, player! How are you?"
arcade.draw_rectangle_filled(SCREEN_WIDTH // 2,
SCREEN_HEIGHT // 2, 500, 200, white)
arcade.draw_text(text, SCREEN_WIDTH // 2,
SCREEN_HEIGHT // 2 + 20, black, font_size=16,
anchor_x="center", anchor_y="center")
در زیر خروجی است:
نمایش متن گفتگو
اکنون، می توانید سیستم گفتگوی خود را با نمایش پیام های متنی پویا تقویت کنید. فهرستی از رشته های گفتگو ایجاد کنید و برای شبیه سازی یک مکالمه از طریق آنها تکرار کنید. هر بار که کادر گفتگو ظاهر می شود، یک پیام جدید نشان می دهد.
# Inside the Game class
class Game(arcade.Window):
def __init__(self):
# ...
self.dialogue_active = False
self.dialogue_messages = [
"Hello, player! How are you?",
"Nice weather today, isn't it?",
"Beware of the enemies lurking ahead!"
]
self.dialogue_index = 0
def draw_dialogue_box(self):
arcade.draw_rectangle_filled(SCREEN_WIDTH // 2,
SCREEN_HEIGHT // 2, 500, 200, white)
arcade.draw_text(self.dialogue_messages[self.dialogue_index],
SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2 + 20, black, font_size=16,
anchor_x="center", anchor_y="center")
سه متغیر جدید را معرفی کنید: dialogue_messages، dialogue_index و dialogue_active. لیست dialogue_messages حاوی پیام های متنی است که کادر گفتگو نمایش داده می شود. dialogue_index پیام فعلی را برای نمایش ردیابی می کند. هر بار که کادر گفتگو ظاهر می شود، می توانید dialogue_index را برای نمایش پیام بعدی افزایش دهید.
اضافه کردن یک دکمه
برای تعاملیتر کردن سیستم گفتگو، دکمهای اضافه کنید تا وقتی پخشکننده فشار میدهد متن گفتگو را تغییر دهید. یک فایل جدید با نام multi-text.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
# Inside the Game class
class Game(arcade.Window):
def __init__(self):
# ...
self.dialogue_active = False
self.dialogue_messages = [
"Hello, player! How are you?",
"Nice weather today, isn't it?",
"Beware of the enemies lurking ahead!"
]
self.dialogue_index = 0
def on_mouse_press(self, x, y, button, modifiers):
index = (self.dialogue_index + 1) % len(self.dialogue_messages)
if self.dialogue_active:
if button == arcade.MOUSE_BUTTON_LEFT:
self.dialogue_index = index
def draw_dialogue_box(self):
# ...
arcade.draw_text("Next", SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2 - 50,
black, font_size=16, anchor_x="center", anchor_y="center")
متد on_mouse_press را به کلاس Game اضافه کنید. وقتی دیالوگ فعال است و دکمه سمت چپ ماوس را فشار می دهید، این روش dialogue_index را افزایش می دهد تا پیام بعدی در لیست dialogue_messages نمایش داده شود. عدسی % (self.dialogue_messages) تضمین میکند که نمایه در هنگام رسیدن به انتهای فهرست تا ابتدای فهرست قرار میگیرد.
از جمله ویژگی های اضافی
برای تقویت بیشتر سیستم گفتگو، می توانید ویژگی های اضافی زیر را اضافه کنید:
چند گزینه ای
به جای یک پیام واحد، می توانید گزینه های متعددی را برای پخش کننده ارائه دهید تا از بین آنها انتخاب کند. این به بازیکن اجازه می دهد تا بر نتیجه گفتگو تأثیر بگذارد یا تصمیماتی بگیرد که بر پیشرفت بازی تأثیر بگذارد.
برای پیاده سازی این، می توانید روش draw_dialogue_box را تغییر دهید تا لیستی از انتخاب ها نمایش داده شود و بر اساس آن انتخاب بازیکن را مدیریت کنید.
پرتره های شخصیت
برای افزودن استعداد بصری به سیستم گفتگوی خود، می توانید پرتره شخصیت ها را در کنار متن قرار دهید. هر شخصیت می تواند یک تصویر یا جن مربوطه داشته باشد که آنها را در طول مکالمه نشان می دهد. نمایش پرتره های شخصیت می تواند به بازیکنان کمک کند تا گوینده را شناسایی کنند و به تجربه داستان گویی عمق دهند.
انیمیشن متن
می توانید متن را متحرک کنید تا از نظر بصری جذاب تر شود. برای مثال، میتوانید متن را به تدریج، یک کاراکتر، برای شبیهسازی تایپ کردن، نشان دهید. این باعث ایجاد حس انتظار می شود و می تواند دیالوگ را برای بازیکن جذاب تر کند.
جلوه های صوتی
افزودن جلوه های صوتی به سیستم گفتگوی شما می تواند فضای کلی بازی را بهبود بخشد. به عنوان مثال، می توانید جلوه های صوتی را هنگامی که کادر گفتگو ظاهر می شود یا زمانی که پخش کننده یک گزینه گفتگو را انتخاب می کند، پخش کنید. این نشانههای صوتی میتوانند مکالمه را فراگیرتر و تاثیرگذارتر کنند.
بهترین شیوه ها برای سیستم گفتگو
هنگام اجرای یک سیستم گفتگو، بهترین شیوه های زیر را در نظر داشته باشید:
پاک کردن رابط کاربری
اطمینان حاصل کنید که کادر گفتگو و متن خوانا و به درستی روی صفحه قرار گرفته اند. از فونتها، رنگها و اندازههای مناسب برای آسانتر خواندن متن استفاده کنید.
صدای شخصیت ثابت
در نحوه صحبت شخصیت ها و لحنی که در طول دیالوگ استفاده می کنند، یکنواختی را حفظ کنید. این به ایجاد مکالمات باورپذیر و جذاب کمک می کند.
ارتباط با گیم پلی
اطمینان حاصل کنید که دیالوگ به طور معناداری به روایت بازی کمک می کند یا اطلاعات مرتبطی را در اختیار بازیکن قرار می دهد. از گفتگوهای بیش از حد یا نامربوط که ممکن است جریان بازی را مختل کند، خودداری کنید.
تست و تکرار
برای شناسایی هر گونه مشکل یا ناسازگاری، سیستم گفتگوی خود را به طور کامل آزمایش کنید. برای بهبود کیفیت کلی و تأثیر مکالمات، دیالوگ خود را بر اساس بازخورد بازیکن تکرار کنید.
با سیستم دیالوگ بازی ها را سرگرم کننده تر کنید
افزودن یک سیستم گفتگو به بازی های خود با استفاده از کتابخانه Arcade در پایتون می تواند تجربه بازیکن را تا حد زیادی افزایش دهد. مکالمات تعاملی، داستان سرایی و توسعه شخصیت را فعال می کند و بازی های شما را فراگیرتر، جذاب تر و سرگرم کننده تر می کند.