Pendekatan% attacker% dapat diperluas untuk mencakup beberapa informasi selain hanya nama-nama objek:
- Kata kerjanya bisa tunggal atau jamak. Ini tergantung pada subjeknya. "Anda menyerang X" (subjek orang ke-2 tunggal) vs. "Extrakun menyerang X" (subjek orang ke-3 tunggal) vs. " Serangan goblin X" (subjek orang ke-3 jamak). Sebagian besar kata kerja hanya perlu
-s
ditambahkan tetapi ada beberapa pengecualian.
- Kata benda mungkin merupakan kata benda yang tepat (" Goblin attack X") atau kata benda yang umum (" A goblin attack X"). Kata benda yang dimulai dengan bunyi vokal harus menggunakan "an" dan bukan "a". Ini mungkin kata benda yang umum tetapi hanya memiliki satu contoh dalam konteks saat ini (" Serangan goblin X").
- Kata benda dapat bervariasi jumlahnya, dari nol ("Anda tidak memukul goblin ") menjadi satu ("Anda menekan satu goblin ") hingga banyak ("Anda menekan tiga goblin "). Banyak kata benda hanya perlu
-s
atau -es
ditambahkan tetapi ada banyak pengecualian.
- Subjek dan objek mungkin sederhana (" goblin ") atau gabungan (" goblin dan saudara lelakinya ").
- Kata benda umum di awal kalimat harus ditulis dengan huruf besar, tetapi jika kata benda memiliki artikel atau jika kata majemuk, Anda hanya ingin menggunakan huruf besar kata pertama. Kata benda yang tepat selalu menggunakan huruf kapital.
- Posisi subjek ( " Dia memukul goblin ') dan posisi objek (' Goblin itu memukul dia ") menggunakan kata ganti yang berbeda.
- Posesif dapat dihasilkan dengan menambahkan
's
jika singular (" kapak goblin "), '
jika jamak (" kapak goblin "), tetapi kata ganti memiliki aturan sendiri (" Kapak Anda ").
Untuk bahasa Inggris, saya menulis Python perpustakaan generasi teks yang berasal dari MUD yang disebut JaysHouseMOO. Jangan ragu untuk mempelajari atau menyalin kode . Itu tidak memiliki perpustakaan yang baik dari kasus luar biasa; Anda harus menambahkannya dengan kata-kata yang digunakan dalam gim Anda. Saya khawatir kode porting saya tidak diuji secara luas. Mungkin juga perlu lebih banyak case yang ditambahkan untuk game (itu dirancang untuk MUD sosial, bukan MUD game).
Contoh Anda akan ditulis sebagai "%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
. Angka-angka %1
, %2
, %3
kirim mana objek adalah untuk diganti; I
Saya i
katakan untuk menambahkan artikel tidak langsung ("a", "an") jika perlu; n
memintanya untuk menampilkan kata benda tanpa artikel; :(inflicts)
mengatakannya untuk mengkonjugasikan kata kerja untuk objek itu.
Inilah output untuk ditampilkan kepada penyerang, pembela, dan semua orang:
$ python
>>> import msg
>>> m = "%1I %1:(inflicts) a serious wound (%2n damage) on %3i."
>>> attacker = msg.GenderedObject('Amit', 'm', 'proper')
>>> defender = msg.GenderedObject('goblin', 'm', 'unique')
>>> points = (12, 'point')
>>> msg.Msg().sub_parties({1: attacker, 2: points, 3: defender},
m, [attacker, defender])
(['You inflict a serious wound (12 points damage) on the goblin.',
'Amit inflicts a serious wound (12 points damage) on you.'],
'Amit inflicts a serious wound (12 points damage) on the goblin.')
Catatan jika Anda telah memberikannya (1, 'point')
akan mencetak "1 poin" bukan "1 poin". Itu adalah sesuatu yang mengganggu saya dalam teks game, jadi saya memastikan untuk menyertakan fitur agar mudah mencetaknya dengan benar.
Berikut contoh lain, dengan kata benda majemuk, dan "a" vs. "an":
>>> m = "%1I %1:(hits) %2'n %2'(head)."
>>> a1 = msg.GenderedObject('goblin', 'm', 'normal')
>>> a2 = msg.GenderedObject('orc', 'm', 'normal')
>>> d1 = msg.GenderedObject('Amit', 'm', 'proper')
>>> d2 = msg.GenderedObject('Extrakun', 'm', 'proper')
>>> msg.Msg().sub_parties({1: [a1, a2], 2: [d1, d2]}, m, [d1, d2])
(["A goblin and an orc hit your and Extrakun's heads.",
"A goblin and an orc hit Amit's and your heads."],
"A goblin and an orc hit Amit's and Extrakun's heads.")
Contoh-contoh ini dalam bahasa Inggris, dan hanya melacak laki-laki / perempuan, kata ganti, kata kerja tunggal / jamak, dan kata benda yang tepat / umum. Apa yang Anda perlu lacak akan bervariasi antar bahasa dan jenis teks dalam gim Anda. Di Spanyol ada kata ganti formal dan informal. Beberapa bahasa memiliki bentuk kata kerja maskulin dan feminin. Kata ganti orang Jepang bergantung pada status subjek relatif terhadap objek. Dalam beberapa bahasa konjugasi kata kerja dapat secara implisit memasukkan subjek. Tentukan semua jenis teks yang ingin Anda hasilkan dan bahasa yang ingin Anda terjemahkan, dan itu akan memberi tahu Anda apa yang perlu Anda lacak di objek permainan Anda. Saat Anda membuat konten, Anda dapat memasukkan anotasi yang diperlukan dan kasus luar biasa.
Alih-alih memiliki satu string, dan mencoba untuk menggantinya dengan benar, Anda dapat memiliki seluruh rangkaiannya. Mulai dengan objek. Anda tahu, saat membuat gerombolan, apa yang disebut sebagai. Anda dapat memberikannya properti khusus, terpisah dari namanya, untuk menggantikannya menjadi string serangan. Senjata dapat memiliki banyak string untuk variasi, dan dapat menggantikan secara lebih rinci. Alih-alih 'penyerang', mereka dapat meminta secara khusus untuk 'penyerang-ganti' atau 'penyerang-nama panggilan'. Gerombolan dapat memiliki versi jamak dari pengidentifikasi ini juga, jika 'lebah' Anda diwakili oleh banyak gerombolan dan bukan hanya satu gerombolan yang kebetulan disebut 'lebah'.
Jadi, Anda akan memiliki massa seperti
Kemudian string serangan Anda meminta item spesifik seperti itu ..
% attacker-ganti% hit% defender-specific_common% untuk% damage%! % defender-ganti% benar-benar merasakan yang itu!
sumber
Ada satu set modul untuk Perl yang dimulai dengan Lingua :: EN :: Inflect yang menangani masalah ini. Bahkan jika Anda menggunakan bahasa yang berbeda, pilihan API yang dibuat mungkin membantu Anda membingkai desain Anda sendiri.
sumber
Cara saya menangani ini adalah melalui serangkaian besar sistem yang, antara lain, melibatkan pemodelan pesan sebagai struktur data daripada string. Nilai-nilai untuk penyerang dan pembela adalah objek mereka yang sebenarnya; kata kerja ("menimbulkan" dalam pesan Anda) ditandai seperti itu, dan tahu objek untuk orang yang melakukannya, sehingga penyaji pesan tahu bahwa itu perlu ditampilkan pada orang pertama ke aktor dan orang kedua ke semua orang lain. Objek juga tahu apakah kata benda mereka tepat atau tidak (dan oleh karena itu, apakah "the" atau "a / an" harus diterapkan pada mereka), ada model data yang memungkinkan saya untuk menentukan bahwa "the" atau "a / an "Biasanya diharapkan akan diterapkan ke kata benda yang tidak tepat di posisi itu, dan banyak lagi.
Utas tentang Mudconnector ini sangat mirip dengan pertanyaan Anda, dan saya masuk ke perincian sistem saya di sana. Pada dasarnya, cara saya melakukannya adalah apa yang Anda inginkan jika Anda ingin sepenuhnya tidak dibatasi oleh kemampuan yang mendasari sistem pesan Anda dan bersedia membayar harga dalam kurva belajar untuk itu. (Mirip seperti vi vs nano.)
sumber
Saya akan menyarankan Anda untuk KISS (menjaganya tetap sederhana), dan memanfaatkan keuntungan dari antarmuka teks.
Sederhanakan, sederhanakan, sederhanakan. Hapus kerumitan bahkan sebelum Anda mulai berpikir tentang pengkodean. Alih-alih satu kalimat, gunakan dua kalimat untuk menggambarkan suatu peristiwa, seperti banyak game. Apakah Anda ingat gerbang Baldur ? Ini bukan permainan teks, tetapi kerusakan dijelaskan dengan teks;)
Membagi informasi antara sumber acara dan konsekuensinya.
Sebagai contoh :
Saya juga menyarankan untuk selalu menggunakan orang ketiga tunggal, apakah itu kata benda yang tepat atau umum.
Terlebih lagi, meskipun bahasa Inggris adalah bahasa internasional yang penting, jika Anda ingin memiliki lebih banyak dampak emosional, dan menyentuh pasar yang lebih besar, Anda mungkin perlu menerjemahkan permainan Anda ke bahasa lain.
Jika Anda bermaksud melakukannya, perlu diketahui bahwa struktur kalimat mungkin berbeda dalam bahasa lain. Menurut Wikipedia , 45% dari bahasa yang tersedia membangun kalimat dalam urutan SOV (subjek-objek-kata kerja), di mana 42% (seperti bahasa Inggris) membangun kalimat dalam urutan SVO; seperti bahasa inggris.
sumber