Perencanaan game dan desain perangkat lunak? Saya merasa bahwa UML tidak nyaman

21

Di universitas saya, mereka selalu menekankan dan gembar-gembor tentang desain dan hal-hal UML, di mana saya merasa itu tidak akan bekerja dengan baik dengan desain struktur game. Sekarang, saya hanya ingin saran profesional tentang bagaimana saya harus mulai merancang game saya? Ceritanya adalah saya memiliki beberapa keterampilan dalam pemrograman dan telah melakukan banyak permainan kecil seperti membuat beberapa platformer 2D bekerja sampai batas tertentu. Masalah yang saya temukan tentang program saya adalah kualitas desain yang buruk. Setelah pengkodean sebentar, hal-hal mulai memecah karena perencanaan yang buruk (Ketika saya menambahkan fitur baru, itu cenderung membuat saya harus mengkode ulang seluruh program). Namun, untuk merencanakan semuanya tanpa cacat desain tunggal agak terlalu ideal. Karena itu, ada saran untuk bagaimana saya harus merencanakan permainan saya? Bagaimana saya harus memasukkannya ke dalam gambar yang terlihat, sehingga saya dan teman-teman saya dapat melihat desainnya?

Saya berencana untuk mulai membuat kode permainan dengan teman saya. Ini akan menjadi kerja tim pertama saya, jadi saran profesional apa pun akan menyenangkan. Apakah ada alternatif lain selain UML?

Pertanyaan lain adalah bagaimana "prototyping" biasanya terlihat?

pengguna1542
sumber
26
UML adalah omong kosong. Ini adalah paradigma yang dirancang dengan buruk untuk membuat pengusaha merasa seperti mereka memproduksi dan memahami sesuatu sementara mereka sebenarnya hanya menciptakan kendala yang tidak berguna.
o0 '.
Walaupun saya benar-benar berpikir bahwa UML memiliki tempat dalam perangkat lunak bisnis, itu tidak dirancang untuk mendesain sesuatu yang terlalu interaktif. Cobalah untuk menemukan beberapa Dokumen Desain Game untuk game yang ada untuk melihat bagaimana mereka menangani hal-hal formal, sesuatu seperti ini: delta3d.org/filemgmt_data/files/… juga mencoba untuk mengingat untuk melakukan banyak prototipe dan jangan takut untuk 'membuang' barang-barang (di sini membuang berarti menyimpan dalam sistem kontrol sumber Anda dan tidak secara aktif menggunakannya).
Roy T.
4
Saya menggunakan xmind untuk merencanakan apa saja. Saya tidak akan menggunakan hal teknis seperti UML kecuali saya terpaksa. Penting untuk memvisualisasikan hal-hal sebelum menjadi teknis. Pemetaan pikiran adalah teman Anda. Anda dapat menggunakannya untuk merencanakan hal-hal teknis juga.
He Shiming
Imho, masalah besar dengan UML adalah kurangnya alat untuk mengkonversi diagram menjadi misalnya kelas dan deklarasi fungsi dan sebaliknya. UML adalah alat yang hebat untuk memvisualisasikan dan mengkomunikasikan ide-ide di antara anggota tim, tetapi cara sebagian besar alur kerja UML tanpa alat membuat Anda melakukan hal-hal tertentu dua kali membuat UML berlebihan untuk proyek kecil dan / atau hobi. Secara pribadi, saya menggunakan pena dan kertas untuk memvisualisasikan hubungan antara kelas & entitas dalam semacam pseudo-UML. Sangat menyenangkan untuk mendapatkan gambaran umum tentang interaksi kelas dan hierarki.
Exilyth

Jawaban:

18

Saya hanya ingin saran profesional tentang bagaimana saya harus mulai merancang game saya?

Desain game adalah spesifikasi gameplay, aset, sistem penilaian, dll - ini tidak spesifik untuk perangkat lunak. Karena itu, UML adalah alat yang salah untuk tugas itu.

Ketika datang untuk merancang kode untuk mengimplementasikan sistem ini, UML adalah alat yang baik untuk tugas tersebut, memberikan tim Anda mengetahuinya, dan tetap berpegang pada jenis diagram yang lebih umum. Biasanya, ketika mencoba mendesain fitur, Anda akan tahu apakah Anda perlu menggunakan deskripsi atau diagram. Jika Anda perlu menggunakan diagram, UML memberi Anda cara menggambar standar, yang merupakan hal yang baik.

Setelah pengkodean sebentar, hal-hal mulai memecah karena perencanaan yang buruk (Ketika saya menambahkan fitur baru, itu cenderung membuat saya harus mengkode ulang seluruh program).

Itu umumnya masalah dengan cara Anda memprogram, daripada bagaimana Anda merencanakan. Perangkat lunak yang baik biasanya mudah diperluas dan digunakan kembali. Jika Anda tetap berpegang pada praktik pemrograman yang baik, masalah ini akan berkurang. Tetapi perencanaan yang lebih baik juga akan membantu, dan Anda tidak perlu diagram yang rumit untuk ini. Hanya memiliki daftar fitur berarti bahwa ketika Anda membuat kode satu hal, Anda memiliki fitur lain dalam pikiran dan dapat menganggapnya sebagai kode Anda.

Karena itu, ada saran untuk bagaimana saya harus merencanakan permainan saya? Bagaimana saya harus memasukkannya ke dalam gambar yang terlihat, sehingga saya dan teman-teman saya dapat melihat desainnya?

Sepertinya Anda mencampur 2 masalah di sini, desain game, dan desain kode.

Saya sarankan pertama-tama menulis desain game dasar, menentukan fitur yang Anda butuhkan, grafik dan suara yang Anda butuhkan, bagaimana game dimenangkan dan hilang, dll. Cari 'dokumen desain' jika Anda memerlukan bantuan di sana.

Dari sana, Anda akan memiliki gagasan tentang fitur-fitur yang perlu Anda kode. Anda dapat melihat setiap fitur secara bergantian dan mencoba memikirkan cara menerapkannya. Diagram dapat membantu menunjukkan hubungan antara berbagai kelas dan objek dalam gim Anda, tetapi keterampilan mengetahui objek mana yang perlu ada adalah sesuatu yang harus Anda pelajari melalui latihan dan / atau bacaan lebih lanjut.

Juga, coba kerjakan proyek yang lebih kecil, kurang ambisius. Itu akan membuat Anda terbiasa menulis kode kerja yang baik, tanpa perlu perencanaan atau penulisan ulang yang luas.

Kylotan
sumber
Saya kira saya mencampurnya. Saya rasa saya bisa mengatakan saya benar-benar memiliki beberapa ide sistem permainan kasar. Namun, saya ingin tahu bagaimana cara mengatasi masalah desain "kode" saya secara efektif? Atau dengan kata lain, menerjemahkan struktur permainan saya ke dalam kode secara efektif? Saya biasanya harus memilih antara mengambil waktu lama untuk menggeneralisasi kode atau pengkodean spesifik cepat. Biasanya yang pertama mengambil neraka dari saya, jadi saya pergi yang kedua dan kemudian menabrak dinding ...
user1542
2
Sepertinya Anda masih belum berpengalaman dengan pemodelan perangkat lunak (pemodelan adalah proses menerjemahkan desain abstrak menjadi implementasi konkret). Saya khawatir ini hanya akan benar-benar menjadi lebih baik dengan pengalaman. Cara yang baik untuk memeriksa apakah Anda membuat kemajuan adalah dengan melihat kode Anda yang berumur 6+ bulan dari waktu ke waktu. Jika Anda tidak menemukan sesuatu yang akan Anda tulis secara berbeda (atau sekadar lebih baik) jika Anda menulis ulang hal itu, maka Anda mungkin belum membaik dalam rentang waktu itu.
TravisG
Setuju dengan heishe - pengalaman adalah satu-satunya solusi nyata di sini, dikombinasikan dengan pembelajaran untuk menjadikan pengalaman itu berharga. Cobalah untuk membaca dan memahami konsep-konsep dasar seperti enkapsulasi dan abstraksi, yang lebih kompleks seperti Hukum Demeter dan Prinsip Tanggung Jawab Tunggal, dan memahami Pola Desain dengan cukup baik untuk melihat di mana beberapa orang dapat membantu Anda. Pengetahuan itu, dikombinasikan dengan praktik, memberi Anda alat untuk menerjemahkan gagasan ke dalam kode kerja.
Kylotan
2

Tidak memahami sesuatu membuatnya mudah untuk diberhentikan. UML adalah alat teknik yang digunakan untuk mengkomunikasikan ide-ide yang Anda miliki secara terstruktur. Game adalah sistem yang dapat direkayasa seperti yang lainnya. Jika ada, kompleksitas dan dinamika permainan membuat representasi visual dari bagian-bagian itu dan interaksinya sangat berharga.

Diagram UML adalah pandangan yang berbeda dari model sistem yang sedang dibahas. Saya mulai dengan menggunakan kasing untuk seseorang yang duduk di depan program saya dan memulainya. Dalam kasus permainan ada dua jenis pengguna: desainer dan pemain. Saya menulis use case untuk masing-masing hal yang saya bisa lihat sedang mereka kerjakan. Lalu saya membuat beberapa kartu CRC untuk mencari tahu layanan apa yang perlu saya sediakan. Lalu saya membuat diagram kelas untuk antarmuka yang akan menyediakan layanan ini dan hubungan mereka. Ini didasarkan pada kartu CRC. Berikutnya adalah diagram dinamis untuk acara-acara seperti inisialisasi yang membutuhkan perencanaan dan orkestrasi. Kemudian diagram statis yang lebih rinci menunjukkan kelas yang mengimplementasikan antarmuka.

Semua sementara saya menulis kode dan membuat prototipe dan mengembangkannya ke arah menyediakan layanan untuk mendukung memenuhi persyaratan permainan saya. Tidak ada yang dibangun yang tidak mendukung pengguna melalui kasus penggunaan. Saya menulis beberapa elemen diagram yang tidak berguna, tetapi antara pengkodean antarmuka dan diagram, saya menulis sangat sedikit kode yang tidak berguna. Diagram memberi saya kepercayaan diri bahwa saya memahami cara kelas yang saya tulis cocok dengan keseluruhan sistem.

Poin yang saya coba sampaikan adalah bahwa program sepele dapat ditulis tanpa rencana, tetapi permainan sama sekali tidak sepele. Beberapa waktu yang lalu, ketika OOP masih baru, ada banyak eksperimen dan beberapa praktik terbaik muncul. Komunitas pengembangan perangkat lunak sepakat bahwa kami membutuhkan bahasa untuk menulis dan menganalisis desain perangkat lunak. UML adalah bahasa yang kami kembangkan. Kita semua tahu dan memahaminya, jadi jika Anda ingin menggunakan solusi orang lain untuk masalah Anda (buku, diskusi online, artikel, katalog pola, dll.) Dan tidak menemukan kembali roda Anda harus belajar membaca notasi standar. Sebagai bonus, ketika Anda memaksakan diri untuk memikirkan sistem Anda dalam bahasa lain, Anda mempelajari hal-hal yang tidak terduga.

Ada banyak metodologi berbeda, tetapi mereka semua mengidentifikasi masalah dan menggambarkan satu solusi secara sistematis. Ini rekayasa. UML sangat besar dan kompleks, tetapi tidak ada model yang menggunakan setiap konstruk. Itu seperti pisau tentara Swiss. Anda harus mengetahuinya dan mencari cara menggunakannya untuk mendukung proses rekayasa Anda. Yang penting bukanlah proses atau metodologi mana tetapi Anda memilikinya. Kalau tidak, Anda akan tenggelam dalam kompleksitas.

Sinthia V
sumber
2

Saya juga mengerjakan beberapa proyek game independen dengan seorang teman (tim 2-orang). Sebagai seseorang yang berada dalam situasi yang serupa dengan Anda, saya dapat menawarkan beberapa informasi menarik yang menurut saya bermanfaat.

  1. Jika ide Anda kasar, coba implementasikan satu per satu dalam proyek prototipe super kecil. Sebagai contoh, saya membuat game platform 2D sekarang, dan mendapatkan lompatan pemain yang tepat sangat penting bagi saya. Jadi, saya membuat proyek baru di mana hanya 2 hal yang terjadi adalah a) Menggambar pemain di layar, dan b) Mendeteksi input, dan menggambar ulang lompatan [karakter bahkan tidak bisa bergerak ke kiri atau ke kanan]
  2. Beberapa orang mungkin tidak menyukai saran ini, tetapi pikirkan tentang menulis manual game terlebih dahulu (untuk menjelaskan konsep, kontrol, tujuan). Ini dapat melakukan 2 hal untuk Anda - menghasilkan dokumen yang sangat dibutuhkan, tetapi juga menguraikan subsistem permainan Anda dan detail yang diperlukan untuk pemain. Jika Anda tahu sebelumnya apa yang perlu diketahui pemain, maka Anda tahu sebelumnya apa yang perlu Anda lakukan.
  3. Tulis kode dalam ukuran yang cukup kecil (alias termodulasi) potongan yang ) sehingga potongan-potongan yang diperhitungkan dapat dipindahkan, atau disusun dengan lebih baik tanpa merasa seolah-olah Anda sedang berusaha mengeluarkan semua spaghetti ukuran sedang dari sepiring pasta.

Semoga Anda menemukan setidaknya satu informasi bermanfaat di sana, dan semoga berhasil!

C. Griffin
sumber
1

Saya pikir ada beberapa takeaways berharga dari UML yang tidak dapat Anda tolak. di sisi lain, perlu diingat bahwa UML dibangun untuk proses bisnis , Anda tahu, sistem pemodelan yang memiliki banyak orang berinteraksi dengannya, semua dengan berbagai keinginan, kebutuhan, dan keinginan. UML mencoba memastikan Anda tidak meninggalkan apa pun atau kewalahan oleh detail.

UML adalah "cara standar untuk memvisualisasikan arsitektur sistem"

UML menjelaskan

  • kegiatan
  • aktor
  • proses bisnis
  • skema basis data
  • komponen (logis)
  • pernyataan bahasa pemrograman
  • komponen perangkat lunak yang dapat digunakan kembali

Tetapi jika Anda membuat game sederhana, apakah Anda benar-benar perlu memodelkan semua ini?

  • Aktor: Pemain.

Berapa banyak yang bisa membantu?

Memodelkan beberapa hal lain, sangat membantu. Misalnya jika Anda membuat MMO kecil, Anda pasti ingin skema basis data yang dirancang dengan baik.

Jadi, sementara kesimpulan dari UML sangat bagus (tahu apa yang Anda lakukan, tulis persyaratan, dan sketsa diagram alur di mana pun dibutuhkan), dan elemen-elemennya sangat berguna, saya cenderung merasakan proses UML lengkap adalah sedikit lubang putaran pasak persegi untuk game.

bobobobo
sumber
1
Aktor: desainer, artis, pemain jaringan, (jika Anda beruntung) pendukung keuangan, orang qa. Komunikasi antara perancang, pengembang, klien, pengguna akhir, dan pemrogram sangat buruk di setiap cabang industri perangkat lunak yang pernah saya lihat. UML adalah alat untuk memberikan bahasa yang umum bagi pemangku kepentingan untuk mendiskusikan suatu proyek. Ada tingkat permusuhan di dunia pengembangan terhadap hal-hal seperti dokumentasi (programmer) dan kontrol sumber / kolaborasi (desainer) yang benar-benar menurunkan kualitas proyek akhir. Sebagian besar hal ini dibangun oleh tim, jadi kami perlu berbagi.
Sinthia V
Aktor @SinthiaV tidak dimaksudkan untuk menjadi tim pengembang . Aktor dimaksudkan untuk menjadi orang yang berinteraksi dengan produk akhir .
bobobobo
Bagaimana dengan editor tingkat dan sumber daya dan mesin? Itulah use case yang saya maksud.
Sinthia V
0

UML bukan satu hal itu adalah kumpulan hal-hal yang beberapa di antaranya memiliki nilai yang lain tidak begitu banyak. gaya lama Use Cases (setidaknya apa yang kita sebut use case) menyatakan

  • nama
  • Persyaratan
  • prasyarat
  • pemicu
  • tindakan
  • tindakan alternatif
  • pengecualian

bisa sangat berguna. meskipun apa yang Anda temukan untuk "Gunakan Kasus" jika Anda melakukan pencarian web (gambar) lebih untuk perangkat lunak umum.

Saya juga akan memberikan kredit ke diagram Kelas. ini menunjukkan bahwa Anda dapat menunjukkan hubungan antara semua objek Anda, dan Anda tahu tata letak arsitektur Anda.

apa yang turun adalah bahwa set fitur Anda harus semuanya direncanakan, dan terkunci int (disewa dalam pengaturan kebutuhan / keinginan) sebelum pemodelan, dan pembuatan diagram bahkan dimulai. semua ini harus ada dalam Brief / Treatment / Script Anda (kadang-kadang disebut sebagai pitch, dokumen fitur, dan cerita). kemudian dari sana Anda akan melakukan hal-hal dokumen teknologi Anda yang memiliki model, dan diagram.

ada perusahaan yang menggunakan UML, tetapi ini biasanya perusahaan yang memiliki tim desain dan implementasi yang terpisah. perusahaan yang akan membuat semua dokumentasi mereka, dan kemudian memberikannya kepada tim kode-monyet untuk membuat prototipe / alpha. itu mengatakan bahwa jika Anda dapat memodelkan game Anda secara akurat, Anda harus dapat memberikannya kepada tim yang sama sekali berbeda dan meminta mereka memprogramnya meskipun ini lebih merupakan mimpi pipa daripada akurasi.

gardian06
sumber
0

Mereka akan mengajarkan Anda tentang UML di universitas Anda untuk membantu Anda mengkomunikasikan ide-ide Anda ke seluruh tim Anda, dan menunjukkan kepada para dosen bahwa Anda memiliki pengetahuan yang baik tentang prinsip-prinsip rekayasa perangkat lunak dasar.

Seperti diskusi apa pun tentang bahasa, alat, atau desain - biasanya tergantung pada bagaimana Anda menggunakannya. Pilih alat / bahasa / desain terbaik untuk pekerjaan itu dan buat cadangan pilihan Anda dengan alasan kuat. Saya akui UML tidak begitu fleksibel untuk produksi game, meskipun saya dapat mengatakan bahwa kami telah menggunakannya secara efektif untuk memodelkan fitur engine seperti komunikasi jaringan dan pengaturan waktu, manajemen tugas paralel, dan kasus penggunaan. Tidak ada yang lebih buruk daripada menjelaskan hal yang sama kepada 5 anggota tim yang berbeda 10 kali berbeda karena mereka tidak mengerti. Ini dokumentasinya, bacalah.

Bergantung pada seberapa solid desain Anda, dan seberapa disiplin tim Anda, bisa sangat produktif untuk dapat memodelkan konstruksi Anda sendiri di sekitar konstruksi yang belum dimulai, dan tahu persis bagaimana mereka akan beroperasi karena dokumentasi.

Meskipun demikian, Anda mungkin akan mendengar (dan menyadari dengan keras) bahwa ini adalah DOKUMEN HIDUP, dan kecuali jika ditinjau dan diperbarui secara berkala, mereka akan menjadi usang dengan cepat dan secara efektif tidak berguna.

Estetikus
sumber