Saya sedang membuat game petualangan point and click, dan saya saat ini mencoba mencari cara terbaik untuk mengimplementasikan sistem komando.
Asumsikan antarmuka Pulau Monyet atau gaya Maniac Mansion, dengan palet kata kerja, dan objek dalam adegan dan inventaris. Mengklik ini, Anda membangun kalimat untuk dieksekusi.
misalnya, Anda dapat mengklik look at
dan kemudian pohon untuk "melihat pohon" atau mengklik apel, lalu give
, dan kemudian seorang gadis, untuk mendapatkan "beri apel untuk gadis".
Ada tiga kemungkinan bentuk kalimat:
verb
, misalnya "simpan"verb noun
, misalnya "mengambil apel", "lihat gurita"verb noun noun
, misalnya "beri acar pada anjing yang rabies", "gunakan linggis dengan toples"
Dalam situasi yang berbeda, saya ingin tindakan yang akan dilakukan ditentukan oleh objek yang berbeda.
Misalnya, untuk give
kata kerja, mungkin ada tindakan default yang didefinisikan yang membuat karakter mengatakan sesuatu seperti "Saya lebih suka berpegang pada itu", atau anjing gila mungkin mendefinisikan tindakan di mana ia memakan apa pun yang Anda coba berikan. .
Jika antarmuka berfungsi seperti Maniac Mansion, maka Anda membuat kalimat, dan kemudian memerintahkannya untuk mengeksekusi (dalam Maniac Mansion, dengan mengklik kalimat tersebut, atau mengklik lagi pada hal terakhir yang Anda klik).
Jika itu berfungsi seperti Pulau Monyet, kalimat dieksekusi segera setelah selesai, yang menimbulkan masalah untuk kata kerja seperti use
yang kadang-kadang mungkin mengambil satu kata benda, dan lain kali dua.
Jadi bagaimana Anda menerapkan sistem yang menangani ini?
sumber
look
juga kata kerja dengan kata benda tunggal, dll.Jawaban:
Anda mungkin merasa lebih mudah digunakan jika Anda membalik urutan pemilihan. Jadi pengguna mengklik kata benda dan kemudian game menampilkan set kata kerja yang dapat dilakukan pada kata benda itu. Jika kata kerjanya membutuhkan objek (mis. "Give to ___", maka game menunggu pengguna untuk memilih objek sebelum melakukan tindakan.
Sesuatu seperti:
Dari segi implementasi, setiap objek dalam game perlu memiliki data untuk:
Karena tata bahasanya tidak benar-benar sarang atau apa pun, Anda seharusnya tidak perlu sesuatu yang rumit seperti pola juru bahasa.
sumber
Saya menyajikan solusi sederhana. Bisa diperpanjang tentunya.
Saya pikir daftar sederhana (kata kerja, objek1, objek2) akan menyelesaikannya:
Cara menangani default:
Beberapa contoh:
Itu dapat diperpanjang:
sumber
Ada dua masalah di sini: Menafsirkan input pemain ke dalam pohon sintaks, kemudian mengeksekusi pohon itu.
Untuk tahap pertama, saya ingin setiap tombol kata kerja membuat contoh kata kerja konkret yang berasal dari beberapa antarmuka kata kerja. Contoh itu akan melewati nomina atau kata kerja lebih lanjut untuk validasi. Jika valid, itu akan melampirkan kata benda ke pohon sintaksis internalnya, kalau tidak ia akan menolak dengan kesalahan yang sesuai.
Setelah setiap tombol ditekan, Anda bisa menanyakan pohon kata kerja apakah itu dalam keadaan valid untuk melanjutkan (untuk input gaya Pulau Kera).
Setelah naik ke tahap kedua, kata kerja konkret akan bertanggung jawab untuk mengurai pohonnya sendiri dan memperbarui status permainan.
Solusi yang lebih kompleks akan melibatkan penguraian pohon secara eksternal ke kata kerja. Setiap elemen pohon akan bertanggung jawab atas tindakan kecil yang bersama-sama menghasilkan hasil yang diinginkan. Pendekatan ini akan memungkinkan Anda untuk membuat lebih banyak kalimat yang muncul dari blok bangunan kecil.
Lihatlah pola Juru Bahasa untuk informasi lebih lanjut tentang tahap penguraian.
sumber