مگر اینکه بازی شما خیلی کوتاه باشد، به حفظ پیشرفت کمک می کند. حتی بازی های کوتاه می توانند از ذخیره امتیازات بالا بهره مند شوند.
افزودن یک سیستم ذخیره و بارگذاری به بازی شما می تواند تجربه بازیکن را تا حد زیادی بهبود بخشد. به بازیکنان این امکان را می دهد تا پیشرفت خود را ادامه دهند، جلسات بازی را از سر بگیرند و با استراتژی های مختلف بدون از دست دادن دستاوردهای سخت به دست آمده آزمایش کنند.
از اینکه چقدر ساده است که این ویژگی را با استفاده از کتابخانه Arcade Python به بازی خود اضافه کنید، شگفت زده خواهید شد.
یک بازی ساده بسازید
با ایجاد یک بازی ساده شروع کنید که در آن بازیکن می تواند به چپ و راست حرکت کند.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
یک فایل جدید با نام simple-game.py ایجاد کنید و کد زیر را اضافه کنید:
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
blue = arcade.color.BLUE
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.player_x = width // 2
def on_draw(self):
arcade.start_render()
arcade.draw_rectangle_filled(self.game_state.player_x,
50, 50, 50, blue)
def update(self, delta_time):
pass
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= PLAYER_SPEED
elif key == arcade.key.RIGHT:
self.player_x += PLAYER_SPEED
def main():
window = GameWindow(SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
if __name__ == '__main__':
main()
کد پنجره ای با مستطیل آبی به نمایشگر پخش کننده ایجاد می کند. بازیکن می تواند با استفاده از کلیدهای جهت دار چپ و راست به چپ و راست حرکت کند.
مدیریت ایالات بازی
برای پیاده سازی یک سیستم ذخیره و بارگذاری، باید حالت های مختلف بازی را مدیریت کنید. حالت بازی نشان دهنده وضعیت فعلی بازی، از جمله موقعیت اشیاء، امتیازات و سایر داده های مرتبط است. برای این مثال، فقط روی مختصات x بازیکن تمرکز کنید.
برای مدیریت وضعیت های بازی، یک کلاس GameState معرفی کنید که داده های بازی را محصور می کند و روش هایی را برای ذخیره و بارگذاری آن ارائه می دهد. این هم کد:
class GameState:
def __init__(self):
self.player_x = 0
ذخیره داده های بازی
برای ذخیره داده های بازی، کلاس GameWindow را گسترش دهید و هر زمان که لازم بود، روشی برای ذخیره وضعیت بازی اضافه کنید. برای سادگی از فرمت JSON استفاده کنید. این هم کد:
در روش save_game یک فرهنگ لغت پایتون حاوی داده های مربوط به بازی ایجاد کنید. سپس آن را در یک فایل JSON به نام save.json سریال کنید.
import json
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.game_state = GameState()
def save_game(self):
data = {
'player_x': self.game_state.player_x
}
with open('save.json', 'w') as file:
json.dump(data, file)
print(data)
def on_draw(self):
arcade.start_render()
arcade.draw_rectangle_filled(self.game_state.player_x,
50, 50, 50, blue)
def update(self, delta_time):
pass
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.game_state.player_x -= PLAYER_SPEED
elif key == arcade.key.RIGHT:
self.game_state.player_x += PLAYER_SPEED
elif key == arcade.key.S:
self.save_game()
بارگیری داده های بازی
برای بارگذاری اطلاعات بازی، کلاس GameWindow را بیشتر گسترش دهید و روشی برای بارگیری وضعیت بازی اضافه کنید. یک فایل جدید با نام load-game.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.game_state = GameState()
self.load_game()
def load_game(self):
try:
with open('save.json', 'r') as file:
data = json.load(file)
self.game_state.player_x = data['player_x']
except FileNotFoundError:
pass
def on_key_press(self, key, modifiers):
if key == arcade.key.L:
self.load_game()
روش load_game سعی می کند فایل save.json را باز کند و داده های بازی را بازیابی کند. سپس وضعیت بازی را با داده های بارگذاری شده به روز می کند. اگر فایل وجود نداشته باشد، فقط میتوانید استثنا را نادیده بگیرید و حالت پیشفرض بازی را رها کنید.
از جمله ویژگی های اضافی
میتوانید ویژگیهای بیشتری را برای بهبود سیستم ذخیره و بارگذاری بازی اضافه کنید.
ذخیره نمرات بالا
ذخیره امتیازات بالا در کنار حالت بازی یک ویژگی رایج در بسیاری از بازی ها است. با استفاده از این سیستم می توانید نمرات را مدیریت کرده و امتیاز بالا را ذخیره کنید. یک فایل جدید با نام high-score.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.high_score = 0
def load_game(self):
try:
with open('save.json', 'r') as file:
data = json.load(file)
print(data)
self.player_x = data.get('player_x', self.player_x)
self.high_score = data.get('high_score', self.high_score)
except FileNotFoundError:
pass
def save_game(self):
data = {
'player_x': self.player_x,
'high_score': self.high_score
}
with open('save.json', 'w') as file:
json.dump(data, file)
print(data)
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= PLAYER_SPEED
elif key == arcade.key.RIGHT:
self.player_x += PLAYER_SPEED
self.high_score += 1
قابلیت ذخیره خودکار
برای ایجاد آرامش در بازیکنان و جلوگیری از از دست دادن پیشرفت، می توانید به طور خودکار وضعیت بازی را در فواصل زمانی معین ذخیره کنید. یک فایل جدید با نام auto-save.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
import time
class GameWindow(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
self.game_state = GameState()
# Save every 6 seconds
self.autosave_interval = 6
self.last_save_time = time.time()
def update(self, delta_time):
current_time = time.time()
time_diff = current_time - self.last_save_time
if time_diff >= self.autosave_interval:
self.save_game()
print("Saved")
self.last_save_time = current_time
در این قطعه کد، روش به روز رسانی بررسی می کند که آیا فاصله زمانی مشخص شده از آخرین ذخیره گذشته است یا خیر. اگر چنین است، متد save_game از کلاس GameWindow را برای ذخیره خودکار حالت بازی فعال می کند. مقدار autosave_interval را با توجه به نیازهای بازی خود تنظیم کنید.
اعتبارسنجی داده های بازی
اعتبارسنجی داده های بازی بارگذاری شده برای اطمینان از یکپارچگی و سازگاری آن ضروری است. شما به راحتی می توانید اعتبار سنجی داده ها را در سیستم ذخیره و بارگذاری ما بگنجانید:
class GameState:
def __init__(self):
self.player_x = 0
def save_state(self):
if self.is_valid_state():
data = {
'player_x': self.player_x
}
with open('save.json', 'w') as file:
json.dump(data, file)
def load_state(self):
with open('save.json', 'r') as file:
data = json.load(file)
if self.validate_loaded_data(data):
self.player_x = data['player_x']
else:
print("Error!")
def is_valid_state(self):
# Perform validation logic here
# Return True if the state is valid, False otherwise
pass
def validate_loaded_data(self, data):
# Perform validation on the loaded data
# Return True if the data is valid, False otherwise
pass
با گنجاندن این ویژگیهای اضافی در سیستم ذخیره و بارگذاری، میتوانید یک تجربه گیمپلی همهکارهتر و قویتر ایجاد کنید، به بازیکنان این امکان را میدهید که چندین حالت بازی را ذخیره کنند، نمرات بالا را ردیابی کنند، ذخیره خودکار را فعال کنند و از یکپارچگی دادهها اطمینان حاصل کنند.
بهترین روش ها برای سیستم ذخیره و بارگذاری
پیاده سازی سیستم ذخیره و بارگذاری یکی از جنبه های مهم توسعه بازی است. برای اطمینان از یک سیستم قوی و قابل اعتماد، پیروی از بهترین شیوه ها ضروری است. در اینجا چند روش کلیدی وجود دارد که باید در نظر بگیرید:
رمزگذاری داده های حساس
اگر بازی شما حاوی اطلاعات حساسی مانند گذرواژه، داده های شخصی یا خریدهای درون برنامه ای است، رمزگذاری وضعیت ذخیره شده بازی بسیار مهم است. رمزگذاری یک لایه امنیتی اضافی اضافه می کند، از حریم خصوصی بازیکن محافظت می کند و از دسترسی غیرمجاز به داده های آنها جلوگیری می کند. از الگوریتم ها و کتابخانه های رمزگذاری برای محافظت از اطلاعات حساس استفاده کنید.
اعتبارسنجی داده های بارگذاری شده
قبل از بارگیری داده های بازی، اعتبارسنجی آن برای اطمینان از یکپارچگی و سازگاری آن ضروری است. بررسی کنید که داده های بارگذاری شده به قالب، ساختار و محدودیت های مورد انتظار بازی شما پایبند باشد.
برای جلوگیری از خرابی یا تقلب، بررسی های اعتبار سنجی را در فیلدهای داده مهم انجام دهید. برای مدیریت خطاهای احتمالی یا داده های غیرمنتظره، مکانیسم های معتبر اعتبارسنجی داده ها را پیاده سازی کنید.
خطاها را با مهربانی مدیریت کنید
هنگام برخورد با عملیات ورودی/خروجی فایل، ممکن است خطاهایی رخ دهد. رسیدگی به این خطاها و ارائه پیام های خطای آموزنده به بازیکن بسیار مهم است. در حین عملیات ذخیره و بارگذاری، استثناهایی مانند FileNotFoundError یا PermissionError را بگیرید و رسیدگی کنید.
نمایش پیام های خطای کاربر پسند برای راهنمایی بازیکنان و جلوگیری از ناامیدی. علاوه بر این، برای کمک به تشخیص و رفع مشکلات، ثبت خطا را پیاده سازی کنید.
عملکرد ذخیره و بارگذاری را آزمایش کنید
قابلیت ذخیره و بارگذاری بازی خود را به طور کامل آزمایش کنید تا از قابلیت اطمینان و صحت آن اطمینان حاصل کنید. موارد آزمایشی ایجاد کنید که سناریوهای مختلفی را پوشش میدهد، مانند ذخیره در حالتهای مختلف بازی، بارگیری از فایلهای ذخیره معتبر و نامعتبر، و موارد لبه آزمایش.
تأیید کنید که وضعیت بازی به درستی ذخیره و بارگذاری شده است و رفتار مورد انتظار رخ می دهد. چارچوبهای تست خودکار میتوانند به ایجاد مجموعههای آزمایشی جامع کمک کنند.
با سیستم ذخیره و بارگذاری بازی ها را سرگرم کننده تر کنید
افزودن سیستم ذخیره و بارگذاری میتواند با ایجاد حس تداوم و پیشرفت، بازیها را جذابتر کند. بازیکنان می توانند آزادانه آزمایش کنند، روش های مختلف را امتحان کنند و بعداً بدون از دست دادن دستاوردهای خود به بازی بازگردند.
این ویژگی همچنین به بازیکنان اجازه می دهد تا با دوستان خود رقابت کنند یا خود را به چالش بکشند تا امتیازات بالای قبلی خود را شکست دهند و قابلیت پخش مجدد و تعامل طولانی مدت را به بازی شما اضافه کند.