Apakah saya membuat kelas negara yang berisi banyak kota?
Tentu.
Apakah kota-kota berisi banyak kelas bangunan, sebagian besar berisi kelas orang?
Tentu.
Apakah saya membuat jalur menemukan kelas yang dapat diakses pemain untuk berkeliling?
Tentu.
Segala sesuatu yang Anda sarankan di atas tampaknya masuk akal. Ini mungkin bukan cara terbaik bagi Anda dalam jangka panjang, tapi itu tidak masalah. Ini jelas masuk akal bagi Anda karena model organisasi yang pertama kali datang kepada Anda. Sangat penting bagi Anda untuk mengambilnya dan memulai implementasi darinya. Ini akan membantu Anda memulai, membantu Anda mengatasi "kelumpuhan desain" awal ini yang sering menjangkiti pengembang di awal tugas, dan (jika terbukti cacat dalam beberapa cara) mengajari Anda satu atau dua hal tentang pro dan kontra dari pendekatan khusus untuk desain.
Anda secara alami telah mengambil konsep di kepala Anda dan mengelompokkannya ke dalam kode sesuai dengan beberapa aturan sederhana:
- Apakah konsep ini berbeda secara signifikan dalam perilaku atau dalam data dari objek lain yang sudah saya miliki? (Negara dan orang-orang berbagi sangat sedikit, jika ada, data atau perilaku yang berarti, sehingga mereka harus diwakili oleh tipe-tipe berbeda dalam game).
- Akankah saya perlu memanipulasi konsep ini dalam kode dengan cara yang signifikan (jika game Anda berurusan dengan orang secara individu, Anda mungkin memerlukan
Person
kelas itu, tetapi jika game hanya peduli tentang mereka secara agregat, seperti dalam versi SimCity sebelumnya, Anda mungkin tidak memerlukan tipe atau instance dari tipe itu untuk membuat pemetaan 1: 1 populasi kota ( int populationCount
mungkin cukup).
- Apakah konsep ini membutuhkan keadaan ? Jika demikian itu harus diringkas entah bagaimana yang memungkinkan saya untuk menyimpan keadaan ini (kelas) daripada banyak fungsi gratis. (Implementasi pathfinding tidak memiliki objek dunia nyata yang analog, tetapi membutuhkan pelacakan data seperti node mana dalam peta yang telah dipertimbangkan, dan yang lebih baik dilakukan melalui kelas daripada dengan menyimpannya dalam banyak) global tersembunyi dan membuat fungsi berdiri bebas).
Meskipun sederhana, menjawab pertanyaan-pertanyaan itu dapat memberi Anda banyak manfaat ketika mencoba memutuskan apakah dan bagaimana mengubah konsep mental menjadi kode sumber. Anda mungkin juga ingin membaca prinsip SOLID dari desain berorientasi objek .
Perhatikan bahwa saran dari sistem entitas / komponen yang dibuat dalam komentar juga merupakan pendekatan yang valid, meskipun saya akan menghindarinya di sini kecuali jika Anda melakukan re-lingkup proyek Anda menjadi lebih kecil (hanya karena mengambil dua tantangan besar baru dalam satu proyek dapat terlalu menakutkan dan dapat mencairkan manfaat pendidikan yang seharusnya Anda terima dari hanya berfokus pada satu). Dalam model berorientasi komponen, "tipe" dalam pertanyaan di atas menjadi lebih implisit: bukan tipe konkret dalam kode, tetapi tipe implisit yang didefinisikan oleh kumpulan komponen yang membentuk suatu entitas. Prinsip panduan yang sama dapat diterapkan.