Enum Vs. Integer untuk Nilai Keterampilan


10

Saya menerapkan keterampilan dasar dan sistem atribut, meskipun saya memiliki pemikiran kedua tentang bagaimana saya harus melakukannya.

Sebagai contoh, saya bisa menggunakan Kamus / HashMap yang menggunakan enk SkillType untuk mewakili kunci, dan nilai integer yang mewakili nilai. Tetapi haruskah saya melakukan ini?

public class Skills
{
    public IDictionary<StatType, Int> skills; //StatType is enum, being the key; the int //is the value.

}

vs.

public class Skills
{
    public int LongBlade, Armor, Marksman; //...etc
}

Saya ingin tahu manfaat dari keamanan tipe di sini, bukan hanya menggunakan bilangan bulat dasar. Ada rekomendasi?


interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };Sebenarnya saya lebih suka ...
Martin Sojka

Jawaban:


8

Jika ada akhirnya akan menjadi:

  • berbagai macam jenis keterampilan di permainan Anda,
  • atau item pemberian kemampuan,
  • atau penggemar kemampuan-memberikan,
  • atau pohon kemampuan besar,

kemudian saya mulai lebih suka fleksibilitas string atau kunci integer dalam kamus daripada bidang contoh individu atau bahkan kamus dengan kunci enum.

Alasan saya - Karena Anda mungkin segera menyadari ...

Wah, alangkah baiknya jika saya bisa mengubah kemampuan matematika saya dan memilih unit (editor teks favorit saya | Excel | alat khusus).

... pada titik mana kamus dengan kunci string atau integer menjadi lebih cocok daripada harus mempertahankan nilai enum atau daftar panjang bidang contoh sendiri. Namun, alat tersebut dapat selalu ditulis untuk menghasilkan kode C # juga, sehingga Anda mungkin dapat menemukan hibrida yang bahagia.

Jika kompleksitas permainan Anda akan menjadi cukup sederhana dan beragam keterampilan Anda kecil, maka mengelola bidang contoh dengan tangan (alih-alih kamus & enum) tampaknya lebih nyaman dan menghindari tingkat tipuan, baik pada saat run-time dan "keystroke" - waktu.


Apa yang Anda maksud dengan kemampuan unit dan matematika? Saya tidak cukup mengikuti, setidaknya dalam hal itu. Saya ingin menggunakan enum, jika itu praktis.
blissfreak

Saya sebagian setuju dengan Anda, string bagus untuk level yang lebih tinggi (mis. API scripting) tetapi untuk memindahkan string bukanlah ide yang baik (memori dan batas waktu bergerak jumlah maksimum op yang dapat Anda lakukan per frame). Menjadi hibrida dapat menjadi opsi: entitas bernama dengan pengidentifikasi integer. Nama harus disimpan satu kali (mungkin dalam peta tunggal) dan entitas mengidentifikasi diri menggunakan bilangan bulat. Dengan melakukannya, Anda dapat meletakkan string di antarmuka Anda jika diperlukan dan berfungsi seolah-olah itu adalah enum.
FxIII

@fxiii Saya setuju, dan itulah sebabnya saya menyebutkan "string atau integer". Saya tidak membahas secara rinci, jadi terima kasih telah menyampaikan beberapa alasan dan cara sehubungan dengan penggunaan bilangan bulat.
DuckMaestro
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.