Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Platform Agnostic
Gamedevelopment

Generasi Prosedur untuk Teka-teki Mudah

by
Length:MediumLanguages:

Malay (Melayu) translation by Adjatay Bashroh Aldad (you can also view the original English article)

Final product image
What You'll Be Creating

Teka-teki adalah sebahagian daripada permainan untuk banyak genre. Sama ada mudah atau kompleks, teka-teki yang dibangunkan secara manual dengan cepat boleh menjadi rumit. Tutorial ini bertujuan untuk meringankan beban itu dan membuka jalan untuk aspek reka bentuk yang lain yang lebih menyeronokkan.

Bersama-sama kita akan mencipta penjana untuk menyusun teka-teki "bersarang" prosedur mudah. Jenis teka-teki yang akan kami tumpukan adalah "kunci dan kekunci" tradisional yang paling sering diulangi sebagai: dapatkan item x untuk membuka kunci kawasan y. Jenis teka-teki ini boleh menjadi membosankan bagi pasukan yang menjalankan beberapa jenis permainan, terutama crawler bawah tanah, kotak pasir, dan permainan peranan di mana teka-teki lebih sering bergantung pada kandungan dan penerokaan.

Dengan menggunakan generasi prosedur, matlamat kami adalah untuk mewujudkan satu fungsi yang mengambil beberapa parameter dan mengembalikan aset yang lebih kompleks untuk permainan kami. Menerapkan kaedah ini akan memberikan pulangan eksponen pada masa pemaju tanpa mengorbankan kualiti permainan. Keresahan pemaju mungkin juga merosot sebagai kesan sampingan yang bahagia.

Apa yang saya perlu tahu?

Untuk mengikuti, anda perlu mengenali bahasa pengaturcaraan pilihan anda. Memandangkan kebanyakan apa yang kita sedang berbincang adalah data sahaja dan umum kepada pseudocode, apa-apa bahasa pengaturcaraan berorientasikan objek akan mencukupi.

Sebenarnya, beberapa penyunting drag-and-drop juga akan berfungsi. Jika anda ingin mencipta demo yang boleh dimainkan penjana yang disebut di sini, anda juga akan memerlukan beberapa kebiasaan dengan perpustakaan permainan kegemaran anda.

Mewujudkan Penjana

Mari kita mulakan dengan melihat beberapa pseudocode. Blok bangunan paling asas sistem kami akan menjadi kunci dan bilik. Dalam sistem ini, pemain dihalang daripada memasuki pintu bilik kecuali mereka memiliki kekuncinya. Inilah yang kedua-dua objek kelihatan seperti kelas:

Kelas utama kami hanya memegang dua keping maklumat sekarang: lokasi kunci, dan jika pemain mempunyai kunci dalam inventori itu. Dua fungsi adalah inisialisasi dan pickup. Inisialisasi menentukan asas-asas kunci baru, sementara pickup adalah untuk apabila pemain berinteraksi dengan kunci.

Sebaliknya, kelas bilik kami juga mengandungi dua pembolehubah: isLocked, yang memegang keadaan semasa kunci bilik, dan assocKey, yang memegang objek Kunci yang membuka ruang khusus ini. Ia mengandungi fungsi untuk permulaan juga satu untuk memanggil untuk membuka kunci pintu, dan satu lagi untuk memeriksa sama ada pintu kini dibuka.

Pintu dan kekunci tunggal adalah menyeronokkan, tetapi kita boleh membiasakannya dengan bersarang. Melaksanakan fungsi ini akan membolehkan kami membuat pintu masuk sementara berfungsi sebagai penjana utama kami. Untuk mengekalkan sarang, kita perlu menambah beberapa pembolehubah tambahan ke pintu kami juga:

Kod penjana ini melakukan perkara berikut:

  1. Mengambil dalam parameter untuk teka-teki yang dihasilkan kami (khususnya berapa banyak lapisan dalam ruang bersarang harus pergi).

  2. Mewujudkan dua tatasusunan: satu untuk bilik yang diperiksa untuk potensi bersarang, dan satu lagi untuk mendaftarkan bilik yang sudah bersarang.

  3. Mewujudkan bilik awal untuk mengandungi keseluruhan adegan dan kemudian tambahkannya kepada array untuk kami semak kemudian.

  4. Mengambil bilik di hadapan array untuk memasuki gelung.

  5. Memeriksa kedalaman bilik semasa terhadap kedalaman maksimum yang disediakan (ini memutuskan jika kita membuat bilik kanak-kanak lebih lanjut atau jika kita menyelesaikan proses tersebut).

  6. Menubuhkan sebuah bilik baru dan mengisi dengan maklumat yang diperlukan dari bilik induk.

  7. Menambah bilik baru ke array bilikToCheck dan mengalihkan bilik sebelumnya ke array siap.

  8. Mengulangi proses ini sehingga setiap bilik dalam array selesai.

Sekarang kita boleh mempunyai banyak bilik seperti mesin kita boleh mengendalikan, tetapi kita masih memerlukan kunci. Penempatan utama mempunyai satu cabaran utama: keboleharapan. Di mana sahaja kita meletakkan kunci, kita perlu memastikan bahawa pemain boleh mengaksesnya! Tidak kira betapa hebat cache kunci tersembunyi seolah-olah, jika pemain tidak dapat mencapainya, dia berjaya terperangkap. Agar pemain meneruskan teka-teki, kunci mesti diperolehi.

Kaedah yang paling mudah untuk memastikan kesolvenan dalam teka-teki kami ialah menggunakan sistem hierarki hubungan objek ibu bapa dan kanak-kanak. Memandangkan setiap bilik berada di dalam yang lain, kami menjangkakan bahawa pemain mesti mempunyai akses kepada ibu bapa setiap bilik untuk mencapainya. Jadi, selagi kunci di atas bilik di rantai hierarki, kami menjamin pemain kami dapat memperoleh akses.

Untuk menambahkan penjanaan utama kepada generasi prosedural kami, kami akan memasukkan kod berikut ke dalam fungsi utama kami:

Kod tambahan ini sekarang akan menghasilkan senarai semua bilik yang berada di atas bilik semasa anda di hierarki peta. Kemudian kami memilih salah satu dari mereka secara rawak, dan menetapkan lokasi kunci ke bilik itu. Selepas itu, kami memberikan kunci kepada bilik yang ia buka kunci.

Apabila dipanggil, fungsi penjana kami sekarang akan membuat dan mengembalikan sebilangan bilik dengan kunci, berpotensi menjimatkan jam masa pembangunan!

Itu membungkus bahagian pseudocode penjana teka-teki mudah kita, jadi sekarang mari kita lakukannya.

Demo Generasi Teka Tekan Prosedur

Kami membina demo kami menggunakan JavaScript dan perpustakaan Crafty.js untuk memastikan ia sebagai cahaya yang mungkin, membolehkan kami mengekalkan program kami di bawah 150 baris kod. Terdapat tiga komponen utama demo kami seperti yang dinyatakan di bawah:

  1. Pemain boleh bergerak di setiap peringkat, kunci pikap, dan membuka kunci pintu.

  2. Penjana yang akan kami gunakan untuk membuat peta baru secara automatik setiap kali demo dijalankan.

  3. Pelanjutan untuk penjana kami untuk mengintegrasikan dengan Crafty.js, yang membolehkan kami menyimpan objek, perlanggaran, dan maklumat entiti.

Pseudocode di atas bertindak sebagai alat penjelasan, jadi melaksanakan sistem dalam bahasa pengaturcaraan anda sendiri akan memerlukan beberapa pengubahsuaian.

Untuk demo kami, sebahagian daripada kelas dipermudahkan untuk kegunaan yang lebih berkesan dalam JavaScript. Ini termasuk menggugurkan fungsi tertentu yang berkaitan dengan kelas, memandangkan JavaScript membolehkan akses lebih mudah kepada pembolehubah dalam kelas.

Untuk membuat bahagian permainan demo kami, kami memulakan Crafty.js, dan kemudian entiti pemain. Seterusnya kami memberikan entiti pemain kami kawalan empat arah asas dan beberapa pengesanan perlanggaran kecil untuk menghalang masuk bilik terkunci.

Bilik-bilik kini diberikan entiti Kerajinan, menyimpan maklumat mengenai saiz, lokasi, dan warna mereka untuk perwakilan visual. Kami juga akan menambah fungsi menarik untuk membolehkan kami mencipta bilik dan menariknya ke skrin.

Kami akan menyediakan kunci dengan penambahan yang serupa, termasuk penyimpanan entiti, ukuran, lokasi, dan warna. Kekunci juga akan dikodkan warna agar sesuai dengan bilik yang mereka buka kunci. Akhirnya, kita kini boleh meletakkan kunci dan membuat entiti mereka menggunakan fungsi menarik baru.

Akhir sekali, kami akan mengembangkan fungsi pembantu kecil yang mencipta dan mengembalikan nilai warna heksadesimal rawak untuk menghapuskan beban memilih warna. Melainkan jika anda suka warna-warna pewarna, tentu saja.

Apa yang saya lakukan Seterusnya?

Sekarang bahawa anda mempunyai penjana mudah anda sendiri, berikut adalah beberapa idea untuk memperluas contoh kami:

  1. Port generator untuk membolehkan penggunaan dalam bahasa pengaturcaraan anda pilihan.

  2. Panjangkan penjana untuk memasukkan bilik cawangan untuk penyesuaian lanjut.

  3. Tambah keupayaan untuk mengendalikan pintu bilik pelbagai ke penjana kami untuk membolehkan teka-teki yang lebih rumit.

  4. Luaskan penjana untuk membolehkan penempatan utama di lokasi yang lebih rumit untuk meningkatkan penyelesaian masalah pemain. Ini amat menarik apabila dipasangkan dengan pelbagai laluan untuk pemain.

Mengakhiri

Sekarang bahawa kami telah mencipta penjana teka-teki ini bersama-sama, gunakan konsep-konsep yang ditunjukkan untuk memudahkan kitaran pembangunan anda sendiri. Tugas-tugas berulang apakah yang anda lakukan? Apa yang paling mengganggu anda tentang membuat permainan anda?

Kemungkinan, dengan sedikit perancangan dan penjanaan prosedur, anda boleh membuat proses lebih mudah. Mudah-mudahan, penjana kami akan membolehkan anda memberi tumpuan kepada bahagian-bahagian permainan yang lebih menarik sambil memotong keluar duniawi.

Nasib baik, dan saya akan melihat anda dalam komen!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.