Đang tải dữ liệu cho một game nhập vai


8

Tôi đang tạo một game nhập vai văn bản nhỏ như một cách để thực hành python và tôi đang gặp phải một câu hỏi về cách tải dữ liệu. Trò chơi này là một trò chơi miền tây hoang dã, mặc dù điều đó không liên quan lắm và tôi cần lưu trữ danh sách vũ khí và tài sản của chúng, cũng như danh sách các nhân vật, kịch bản, v.v. Tôi đã có ý tưởng hay về cách thể hiện dữ liệu này là các lớp nhưng tôi không rõ về cách lưu trữ và tải dữ liệu.

Câu hỏi chính của tôi xoay quanh mối quan hệ giữa dữ liệu và các lớp. Tôi đã đọc qua một số bài đăng ở đây trên SE và nhiều trong số chúng liên quan đến việc lưu trữ, vì vậy tôi có một số thông tin tốt ở đó.

Khi nào tôi nên tải dữ liệu đó vào? Ví dụ, người chơi chọn từ một số vũ khí khi trò chơi bắt đầu. Tôi có nên nạp vào tất cả các vũ khí và khởi tạo tất cả các đối tượng vũ khí tại thời điểm đó không? Lớp vũ khí có nên hiển thị vũ khí từ cơ sở dữ liệu mà không cần khởi tạo chúng không?

Cảm ơn vì bất kì sự giúp đỡ.

Câu trả lời:


7

Vì bạn nói một game nhập vai văn bản "nhỏ", lời khuyên của tôi là chỉ nên tải trước mọi thứ. Nếu chúng ta không nói về một lượng lớn nội dung, thì nó sẽ không tạo ra sự khác biệt lớn đối với thời gian khởi động và nó giữ mọi thứ, như Bjorn khuyên, đơn giản.

Một điều xảy ra với tôi, khi đọc câu hỏi của bạn, là bạn có thể muốn xem xét sự khác biệt giữa vũ khíloại vũ khí . Sở thích của tôi là luôn có sự phân biệt rõ ràng giữa hai loại và cả hai đều được mô hình hóa theo mã để tôi có thể đặt câu hỏi về loại vũ khí mà không nhất thiết phải có một ví dụ trong tay. (Một cách để làm điều này là để loại vũ khí là lớp, với các phương thức lớp cho phép bạn tương tác với nó và vũ khí là một ví dụ của lớp đó. Tôi thực sự không thích cách tiếp cận này vì nó không thể hoặc là không thể vô cùng lộn xộn để vũ khí thay đổi loại. Rõ ràng điều đó sẽ không liên quan đến tất cả các trò chơi.)


Làm thế nào bạn sẽ phân biệt chúng trong mã? Tôi thực sự đã gặp phải vấn đề này.
timfreilly

1
Cách tôi có là các loại vũ khí là các đối tượng được quản lý thông qua mẫu "bộ định nghĩa được môi giới" mà tôi nói trong câu hỏi SO này: stackoverflow.com/questions/401720/ , và mỗi đối tượng vũ khí đều biết loại đó là gì mã ID Vì vậy, bạn có thể làm obj->setWeaponType(WEAPON_TYPE_SHOTGUN)hoặc bất cứ điều gì, và vũ khí tự cấu hình một cách thích hợp. Các số liệu về hiệu suất của vũ khí có thể sử dụng các giá trị của loại làm đường cơ sở nhưng cho phép kết quả cuối cùng được sửa đổi theo thể hiện. Đó là loại điều.
hỗn loạn

Đó là điều cần suy nghĩ, cảm ơn vì liên kết. Bạn sẽ làm gì trong tình huống muốn hiển thị danh sách các loại vũ khí có sẵn? Là loại yêu cầu đi qua phiên bản môi giới / loại?
timfreilly

1
@timfreilly: Nó phụ thuộc vào ngữ cảnh. Nếu đó là một cái gì đó giống như một cửa hàng, tôi thường sẽ có nơi chứa các vũ khí thực tế và hiển thị các mô tả của họ cho người chơi. Nếu đó là một cái gì đó giống như tổng quan về nhà phát triển hoặc giao diện trợ giúp, thì tôi sẽ hỏi người môi giới cho toàn bộ định nghĩa loại vũ khí và hiển thị thông tin về chúng.
hỗn loạn

4

Tải mọi thứ khi bắt đầu. Đừng làm phức tạp chương trình của bạn bằng cách chia dữ liệu giữa bộ nhớ và đĩa trừ khi bạn phải (ví dụ: khi có quá nhiều thứ để giữ trong bộ nhớ cùng một lúc).

Điều quan trọng là phải hiểu sự khác biệt giữa dữ liệu đại diện cho các thể hiện của một mặt hàng và dữ liệu đại diện cho loại mặt hàng. Nói chung một số trường hợp của cái trước chia sẻ một ví dụ chung của cái sau.


Tôi có thể sử dụng một số thông tin bổ sung ở đó. Làm thế nào để bạn mã sự khác biệt này?
timfreilly

1
@timfreilly: Tôi có một hệ thống phân cấp lớp mẫu cho một hệ thống vật phẩm như Kylotan mô tả tại gamedev.stackexchange.com/questions/4516/ . điều này thường được gọi là mô hình cân nặng.

Như Joe nói, mẫu Flykg là một cách để trình bày điều này, bằng cách chia sẻ ngầm định dữ liệu 'loại' đó qua các trường hợp. Cá nhân tôi thích đại diện cho họ một cách rõ ràng, ví dụ. với lớp MonsterInstance và lớp MonsterType. Mỗi phiên bản của MonsterInstance có một tham chiếu đến phiên bản MonsterType có liên quan.
Kylotan

(Tôi cũng sẽ làm những gì Kylotan nói, tôi vẫn gọi đó là một vật thể bay

0

Tôi không quen thuộc lắm với trăn. Lời khuyên chung tôi sẽ đưa ra là giữ cho nó đơn giản. Bạn nói rằng bạn đã có một ý tưởng về cách biểu diễn dữ liệu. Nếu bạn có một số lớp cho dữ liệu bạn muốn lưu trữ, bạn có thể lưu trữ chúng trong một danh sách. Danh sách đó sau đó có thể được tuần tự hóa vào đĩa onSave và deserialized onLoad. Để thực hiện lần đầu tiên và nếu dữ liệu không lớn, tôi sẽ tải mọi thứ khi bắt đầu trò chơi và lưu nó vào một số thời điểm nhất định.


0

Bạn có thể sử dụng SQLite . Sử dụng SQLite, bạn có thể tạo cơ sở dữ liệu trong bộ nhớ và trên ổ cứng và bạn không cần một DBMS khổng lồ như MySQL đã cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.