Memuat data untuk RPG

8

Saya membuat RPG teks kecil sebagai cara untuk berlatih python dan saya mengalami pertanyaan tentang cara memuat data. Gim ini adalah gim liar barat, meskipun itu tidak terlalu relevan, dan saya perlu menyimpan daftar senjata dan propertinya, serta daftar karakter, skenario, dll. Saya punya ide bagus tentang cara mewakili data ini sebagai kelas tapi saya tidak jelas tentang cara menyimpan dan memuat data.

Pertanyaan utama saya berkisar pada hubungan antara data dan kelas. Saya telah membaca beberapa posting di sini di SE dan banyak dari mereka berhubungan dengan penyimpanan, jadi saya punya beberapa informasi bagus di sana.

Kapan saya harus memuat data itu? Misalnya, pemain memilih dari beberapa senjata saat permainan dimulai. Haruskah saya memuat semua senjata dan instantiate semua objek senjata pada saat itu? Haruskah kelas senjata memiliki kemampuan untuk menunjukkan senjata dari database tanpa membuat instance mereka?

Terima kasih atas bantuannya.

timfreilly
sumber

Jawaban:

7

Karena Anda mengatakan RPG teks "kecil", saran saya adalah dengan hanya memuat semuanya. Jika kita tidak berbicara tentang sejumlah besar konten, maka itu seharusnya tidak membuat perbedaan besar pada waktu startup, dan itu membuat segalanya, seperti yang disarankan Bjorn, sederhana.

Satu hal yang terjadi pada saya, membaca pertanyaan Anda, adalah Anda mungkin ingin mempertimbangkan perbedaan antara senjata dan jenis senjata . Preferensi saya adalah selalu memiliki perbedaan yang jelas antara keduanya, dan memiliki keduanya dimodelkan dalam kode sehingga saya dapat mengajukan pertanyaan tentang jenis senjata tanpa harus memiliki contoh di tangan. (Salah satu cara untuk melakukan ini adalah dengan membuat jenis senjata menjadi kelas, dengan metode kelas yang memungkinkan Anda untuk berinteraksi dengannya, dan senjata menjadi contoh kelas itu. Saya sebenarnya tidak suka pendekatan ini karena dengan demikian tidak mungkin atau sangat berantakan untuk senjata untuk mengubah jenis. Jelas itu tidak akan relevan untuk semua game.)

kekacauan
sumber
Bagaimana Anda membedakan ini dalam kode? Saya memang mengalami masalah ini.
timfreilly
1
Cara saya memilikinya adalah bahwa jenis senjata adalah objek yang dikelola melalui pola "set definisi yang diperantarai" yang saya bicarakan dalam pertanyaan SO ini: stackoverflow.com/questions/401720/… , dan masing-masing objek senjata tahu jenisnya melalui kode ID. Jadi, Anda dapat melakukan obj->setWeaponType(WEAPON_TYPE_SHOTGUN)atau apa pun, dan senjata mengkonfigurasi sendiri dengan tepat. Metrik kinerja senjata mungkin menggunakan nilai-nilai tipe sebagai baseline tetapi memungkinkan hasil akhir untuk dimodifikasi oleh instance. Hal semacam itu.
chaos
Itu sesuatu untuk dipikirkan, terima kasih untuk tautannya. Apa yang akan Anda lakukan dalam situasi di mana Anda ingin menampilkan daftar jenis senjata yang tersedia? Apakah permintaan semacam itu masuk ke versi broker / tipe?
timfreilly
1
@timfreilly: Tergantung pada konteks. Jika itu seperti toko, saya biasanya memiliki tempat yang penuh dengan contoh senjata dan menampilkan deskripsi mereka kepada pemain. Jika itu sesuatu seperti ikhtisar pengembang atau antarmuka bantuan, maka saya akan meminta daemon broker untuk set lengkap definisi jenis senjata dan menampilkan informasi tentang mereka.
chaos
4

Muat semuanya di awal. Jangan menyulitkan program Anda dengan memisahkan data antara memori dan disk kecuali Anda harus (mis. Ketika ada terlalu banyak untuk disimpan dalam memori sekaligus).

Yang penting adalah untuk memahami perbedaan antara data yang mewakili contoh item dan data yang mewakili jenis item. Secara umum beberapa contoh dari mantan berbagi satu contoh umum yang terakhir.

Kylotan
sumber
Saya dapat menggunakan beberapa informasi tambahan di sana. Bagaimana cara Anda mengkode perbedaan ini?
timfreilly
1
@timfreilly: Saya memiliki hierarki kelas sampel untuk sistem item seperti yang dijelaskan Kylotan di gamedev.stackexchange.com/questions/4516/… ; ini sering disebut pola bobot terbang.
Seperti kata Joe, pola Flyweight adalah salah satu cara untuk mempresentasikan ini, dengan secara implisit membagikan data 'ketik' tersebut di seluruh instance. Saya pribadi lebih suka untuk mewakili mereka secara eksplisit, misalnya. dengan kelas MonsterInstance dan kelas MonsterType. Setiap instance dari MonsterInstance memiliki referensi ke instance MonsterType yang relevan.
Kylotan
(Saya akan melakukan apa yang dikatakan Kylotan juga, saya masih akan menyebutnya objek kelas terbang.)
0

Saya tidak begitu terbiasa dengan python. Saran umum yang akan saya berikan adalah membuatnya sederhana. Anda mengatakan bahwa Anda sudah mendapatkan ide tentang cara merepresentasikan data. Jika Anda mendapatkan beberapa kelas untuk data yang ingin Anda simpan, Anda bisa menyimpannya dalam daftar. Daftar itu kemudian dapat diserialisasi ke disk onSave dan deserialized onLoad. Untuk implementasi pertama dan jika datanya tidak sebesar itu, saya akan memuat semuanya pada awal permainan dan menyimpannya pada waktu tertentu.

Bjorn
sumber
0

Anda bisa menggunakan SQLite . Menggunakan SQLite, Anda dapat membuat database di memori dan di hard drive, dan Anda tidak perlu DBMS raksasa seperti MySQL yang diinstal.

grizwako
sumber