Membuat konstanta / tabel game tersedia untuk kelas / rutinitas logika game secara modular

8

Misalkan saya memiliki permainan di mana ada beberapa konstanta dan bagan yang telah ditentukan (bagan XP, harga barang dan sebagainya). Itu dapat didefinisikan saat runtime, atau memuat dari file saat start-up. Pertanyaannya adalah bagaimana seharusnya rutinitas logika itu mengakses konstanta dan bagan?

Sebagai contoh, saya bisa mencoba menggunakan variabel global, tetapi itu menyebabkan semua kelas bergantung pada variabel untuk digabungkan dengan mereka.

Extrakun
sumber

Jawaban:

3

Ini benar-benar tergantung pada jenis (dan jumlah / ukuran) data apa yang Anda bicarakan. Jika itu adalah sedikit data yang dapat disimpan dengan aman di memori selama durasi eksekusi, sesuatu seperti kelas statis akan menjadi rekomendasi saya.

public static class Constants
{
    public static int[] Levels = { 0, 100, 200, 400, 800, 1600, 3200, 6400 }
}

Dengan cara ini, pengalaman yang diperlukan untuk mencapai Level X adalah Constatns.Levels[X - 1];dan mengakses data lain juga mudah, jika Anda memerlukan koleksi Item, Anda dapat menambahkannya di sini juga, jika data Item Anda terlalu besar untuk disimpan dalam memori, Anda dapat juga menerapkan logika caching di dalam kelas statis.

Menjadikannya statis menyimpan satu salinan dalam memori, dan memastikan bahwa setiap klien dari kelas ini mendapatkan data yang sama.

Meskipun ini benar-benar "memasangkan secara ketat" kelas Anda bersama-sama, kopling ketat bukanlah hal yang buruk jika desain benar-benar membutuhkannya, yang dalam kasus statistik Item dan grafik XP, itu adalah, IMHO, masuk akal untuk memasangkan erat ini. Saya selalu berusaha membuatnya sederhana, sampai sesuatu memaksanya menjadi rumit.

Nate
sumber
3

Buat objek untuk mewakili setiap bagian dan berikan objek itu ke fungsi yang membutuhkannya. Ini tidak berbeda dengan data lain - Anda menyebarkannya.

DeadMG
sumber
2

Saya sarankan menggunakan satu kelas yang dapat diakses secara global - sebut saja Kamus (menggunakan terminologi flash). Kamus pada dasarnya adalah daftar pasangan nama-nilai (data, aturan, konstanta) yang Anda inginkan dapat diakses di seluruh aplikasi Anda. Menggunakan nama (string) kelas-kelas lain akan dapat mengambil nilai-nilai (angka, string, kelas dll) yang dihubungkan ke kode Anda. Jadi implementasi Anda pada dasarnya adalah IOC kecuali instantiasi sebelumnya telah dilakukan dalam Kamus. Anda juga dapat mendengarkan perubahan pada Kamus, dll.

kosmoknot
sumber
Pendekatan ini baik untuk debugging - Anda dapat menyalurkan kamus ke server http dan mengedit angka dengan cepat dari aplikasi lain, atau mencetak nilai di layar, dll.
tenpn
0

Nah jika Anda menggunakan Java maka saya akan merekomendasikan menempatkan data Anda dalam file XML dan menggunakan sesuatu seperti JAXB atau simple-xml untuk mendapatkan data yang Anda inginkan di objek yang benar.

Robert Massaioli
sumber
1
Jika saya tidak sepenuhnya salah, pertanyaannya bukan tentang bagaimana menyimpan dan memuat data, tetapi bagaimana memberikan akses ke data tersebut setelah dimuat (desain perangkat lunak, OOP).
bummzack