/ / Cách lưu và tải dữ liệu trò chơi trong Arcade

Cách lưu và tải dữ liệu trò chơi trong Arcade

Việc thêm hệ thống lưu và tải vào trò chơi của bạn có thể nâng cao đáng kể trải nghiệm của người chơi. Nó cho phép người chơi tiếp tục tiến trình của họ, tiếp tục các phiên chơi trò chơi và thử nghiệm các chiến lược khác nhau mà không làm mất đi những thành tích khó kiếm được.


Bạn sẽ ngạc nhiên thú vị bởi việc thêm tính năng này vào trò chơi của bạn đơn giản như thế nào bằng thư viện Arcade của Python.


Tạo một trò chơi đơn giản

Bắt đầu bằng cách tạo một trò chơi đơn giản nơi người chơi có thể di chuyển sang trái và phải.

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 một tệp mới có tên đơn giản-game.py và thêm đoạn mã dưới đây:

 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()

Mã này tạo một cửa sổ có hình chữ nhật màu xanh đại diện cho trình phát. Người chơi có thể di chuyển sang trái và phải bằng các phím mũi tên trái và phải.

trò chơi đơn giản trong arcade với đối tượng người chơi

Quản lý trạng thái trò chơi

Để triển khai hệ thống lưu và tải, bạn cần quản lý các trạng thái trò chơi khác nhau. Trạng thái trò chơi biểu thị trạng thái hiện tại của trò chơi, bao gồm vị trí của các đối tượng, điểm số và các dữ liệu liên quan khác. Đối với ví dụ này, chỉ tập trung vào tọa độ x của người chơi.

Để quản lý trạng thái trò chơi, hãy giới thiệu một GameState lớp đóng gói dữ liệu của trò chơi và cung cấp các phương thức để lưu và tải dữ liệu đó. Đây là mã:

 class GameState:
    def __init__(self):
        self.player_x = 0

Lưu dữ liệu trò chơi

Để lưu dữ liệu trò chơi, hãy mở rộng Cửa sổ trò chơi class và thêm một phương thức để lưu trạng thái trò chơi bất cứ khi nào cần thiết. Sử dụng định dạng JSON cho đơn giản. Đây là mã:

bên trong lưu trò chơi phương pháp, hãy tạo một từ điển Python chứa dữ liệu trò chơi có liên quan. Sau đó tuần tự hóa nó thành một tệp JSON có tên lưu.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()

Đang tải dữ liệu trò chơi

Để tải dữ liệu trò chơi, hãy mở rộng Cửa sổ trò chơi class hơn nữa và thêm một phương thức để tải trạng thái trò chơi. Tạo một tệp mới có tên tải-game.py và thêm mã với các bản cập nhật bên dưới:

 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()

Các tải trò chơi phương thức cố gắng mở lưu.json tệp và truy xuất dữ liệu trò chơi. Sau đó, nó cập nhật trạng thái trò chơi với dữ liệu đã tải. Nếu tệp không tồn tại, bạn có thể bỏ qua ngoại lệ, để trạng thái trò chơi mặc định.

trò chơi arcade với đối tượng người chơi và tải dữ liệu trò chơi

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

Bạn có thể thêm nhiều tính năng hơn để cải thiện hệ thống lưu và tải của trò chơi.

Lưu điểm cao

Lưu điểm cao cùng với trạng thái trò chơi là một tính năng phổ biến trong nhiều trò chơi. Bạn có thể quản lý điểm và lưu điểm cao bằng hệ thống này. Tạo một tệp mới có tên điểm cao.py và thêm mã với các bản cập nhật bên dưới:

 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

Tính năng tự động lưu

Để giúp người chơi yên tâm và tránh mất tiến độ, bạn có thể tự động lưu trạng thái trò chơi theo định kỳ. Tạo một tệp mới có tên tự động lưu.py và thêm mã với các bản cập nhật bên dưới:

 import time

class GameWindow(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        self.game_state = GameState()

       
       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

Trong đoạn mã này, cập nhật kiểm tra xem khoảng thời gian đã chỉ định đã trôi qua kể từ lần lưu cuối cùng chưa. Nếu vậy, nó kích hoạt lưu trò chơi phương pháp của Cửa sổ trò chơi class để tự động lưu trạng thái trò chơi. Điều chỉnh autosave_interval giá trị theo yêu cầu của trò chơi của bạn.

Xác thực dữ liệu trò chơi

Xác thực dữ liệu trò chơi đã tải là điều cần thiết để đảm bảo tính toàn vẹn và nhất quán của nó. Bạn có thể dễ dàng kết hợp xác thực dữ liệu vào hệ thống lưu và tải của chúng tôi:

 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):
        
        
        pass

    def validate_loaded_data(self, data):
        
        
        pass

Bằng cách kết hợp các tính năng bổ sung này vào hệ thống lưu và tải, bạn có thể tạo trải nghiệm chơi trò chơi linh hoạt và mạnh mẽ hơn, cung cấp cho người chơi khả năng lưu nhiều trạng thái trò chơi, theo dõi điểm số cao, bật tự động lưu và đảm bảo tính toàn vẹn của dữ liệu.

Thực tiễn tốt nhất cho hệ thống lưu và tải

Triển khai hệ thống lưu và tải là một khía cạnh quan trọng của quá trình phát triển trò chơi. Để đảm bảo một hệ thống mạnh mẽ và đáng tin cậy, điều cần thiết là phải tuân theo các phương pháp hay nhất. Dưới đây là một số thực hành chính cần xem xét:

Mã hóa dữ liệu nhạy cảm

Nếu trò chơi của bạn bao gồm thông tin nhạy cảm như mật khẩu, dữ liệu cá nhân hoặc mua hàng trong ứng dụng, thì điều quan trọng là phải mã hóa trạng thái trò chơi đã lưu. Mã hóa bổ sung thêm một lớp bảo mật, bảo vệ quyền riêng tư của người chơi và ngăn truy cập trái phép vào dữ liệu của họ. Sử dụng các thuật toán và thư viện mã hóa để bảo vệ thông tin nhạy cảm.

Xác thực dữ liệu đã tải

Trước khi tải dữ liệu trò chơi, cần phải xác thực dữ liệu đó để đảm bảo tính toàn vẹn và nhất quán. Xác minh rằng dữ liệu được tải tuân theo định dạng, cấu trúc và ràng buộc dự kiến ​​của trò chơi của bạn.

Thực hiện kiểm tra xác thực trên các trường dữ liệu quan trọng để tránh sự cố hoặc gian lận. Triển khai các cơ chế xác thực dữ liệu mạnh mẽ để xử lý các lỗi tiềm ẩn hoặc dữ liệu không mong muốn.

Xử lý lỗi một cách duyên dáng

Khi xử lý các thao tác vào/ra tệp, lỗi có thể xảy ra. Điều quan trọng là phải xử lý các lỗi này một cách khéo léo và cung cấp các thông báo lỗi đầy đủ thông tin cho người chơi. Bắt và xử lý các ngoại lệ, chẳng hạn như FileNotFoundError hoặc QuyềnLỗitrong các hoạt động lưu và tải.

Hiển thị thông báo lỗi thân thiện với người dùng để hướng dẫn người chơi và ngăn chặn sự thất vọng. Ngoài ra, hãy cân nhắc triển khai ghi nhật ký lỗi để giúp chẩn đoán và khắc phục sự cố.

Kiểm tra chức năng lưu và tải

Kiểm tra kỹ lưỡng chức năng lưu và tải trò chơi của bạn để đảm bảo độ tin cậy và chính xác của trò chơi. Tạo các trường hợp thử nghiệm bao gồm các tình huống khác nhau, chẳng hạn như lưu ở các trạng thái trò chơi khác nhau, tải từ các tệp lưu hợp lệ và không hợp lệ cũng như thử nghiệm các trường hợp cạnh.

Xác thực rằng trạng thái trò chơi được lưu và tải đúng cách cũng như hành vi dự kiến ​​xảy ra. Các khung kiểm tra tự động có thể hỗ trợ tạo các bộ kiểm tra toàn diện.

Làm cho trò chơi trở nên thú vị hơn với hệ thống lưu và tải

Thêm hệ thống lưu và tải có thể làm cho trò chơi hấp dẫn hơn bằng cách cung cấp cho người chơi cảm giác liên tục và tiến bộ. Người chơi có thể tự do thử nghiệm, thử các cách tiếp cận khác nhau và quay lại trò chơi sau đó mà không bị mất thành tích.

Tính năng này cũng cho phép người chơi cạnh tranh với bạn bè hoặc thử thách bản thân để vượt qua số điểm cao trước đó của họ, tăng thêm khả năng chơi lại và gắn kết lâu dài cho trò chơi của bạn.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *