Saya telah bermain-main untuk beberapa waktu dengan sebuah permainan dan saya memiliki cukup banyak masalah dengan sesuatu:
Saya memiliki dua karakter, yang masing-masing memiliki atribut (sekitar sepuluh) dalam rentang (antara 1 dan 20). Saya ingin menggunakan atribut ini untuk menghasilkan 'roll' sehingga roll yang lebih tinggi memenangkan pertemuan itu. Perlu dicatat bahwa kedua karakter tidak saling merusak / membela. Mereka berdua berguling-guling untuk melihat apakah mereka lulus apa yang kurasa bisa kita sebut pemeriksaan keterampilan. Keduanya bergulir untuk lulus / gagal terhadap nilai umum. Mereka tidak berinteraksi satu sama lain.
Namun, ketika salah satu karakter bahkan memiliki keunggulan numerik kecil, rumus apa pun yang saya hasilkan menghasilkan yang paling unggul yang memenangkan sebagian besar waktu. Ini tidak diinginkan.
Saya sudah mencoba memberi bobot pada atribut 'paling relevan' untuk pengujian pada 80% dan jumlah atribut lainnya pada 20%. Saya juga mencoba membandingkan rata-rata untuk menghasilkan perbedaan relatif dan menggunakannya untuk meningkatkan karakter yang lebih lemah. Kedua pendekatan menghasilkan keuntungan signifikan yang saya coba hapus (misalnya, jika saya menjalankan 5.000 kali pertemuan, itu secara teratur menghasilkan satu sisi memenangkan semua 5.000).
Menambahkan komponen "keberuntungan" hanya penting, tampaknya, jika itu tertimbang dalam mendukung karakter yang lebih rendah, dan saya belum mencapai keseimbangan yang baik di sana.
Pendekatan apa yang bisa saya ambil untuk menumpulkan dampak dari keuntungan numerik kecil tetapi masih mempertahankan dan meningkatkan keuntungan itu ketika kesenjangan relatif dalam atribut meningkat?
Sesuai permintaan, berikut adalah spesifik yang saya miliki sejauh ini. Beberapa hal yang belum saya pahami sehingga masih bersifat umum:
Saat ini, gulungan dihasilkan sebagai
0.8 * (mainAttribute) + 0.2 (1/3 * subAttA + 1/3 * subAttB * 1/3 subAttC)
Saat ini, ini menghasilkan angka di lingkungan 4.0. Atribut secara acak dihasilkan antara rentang yang ditentukan. Tes saat ini menggunakan satu karakter dengan atribut dari 2 hingga 4, dan lawan antara 3 dan 5. Diprediksi, ini menghasilkan rata-rata hampir 3 dan 4 masing-masing.
Dengan keunggulan satu poin ini, saya ingin melihat yang lebih kuat dari dua kemenangan di bidang 55% hingga 60% dari waktu, dengan peningkatan ini untuk memenangkan sekitar 80% dari waktu dengan keunggulan atribut rata-rata dari 5 atau 6, 90% dengan keunggulan 7 atau 8, menyisakan ruang untuk kemenangan yang tidak mungkin terjadi ketika jeda tumbuh lebih besar. Saya lebih suka untuk tidak pernah menjamin kemenangan, tetapi mungkin hal-hal menjadi sangat tidak mungkin - dengan nada menang 99,5% atau 99,6% dari waktu ketika kesenjangan menjadi sangat besar.
Formula saat ini menghasilkan angka non-acak. Keacakan datang dari pemilihan atribut mana yang relevan. Tidak semua atribut digunakan untuk setiap gulungan. Adalah mungkin bagi seseorang dengan atribut yang lebih lemah secara keseluruhan untuk menjadi lebih kuat di area yang relevan dengan gulungan itu, dan mencuri kemenangan. Tapi, bisa ditebak, itu jarang terjadi.
Upaya saya berikutnya adalah untuk menimbang kekuatan relatif mereka, dengan mengambil rata-rata semua statistik masing-masing, membaginya satu sama lain, dan menggunakan nilai itu untuk memberikan dorongan kecil pada karakter yang lebih rendah. Ini memuluskan beberapa hal, tetapi masih memiliki kecenderungan yang jelas untuk menghasilkan hal-hal seperti 5.000 kemenangan untuk satu orang dari 5.000 percobaan.
sumber
Jawaban:
Masalah dengan pendekatan Anda adalah bahwa Anda memutuskan hasil pertempuran saat Anda memutuskan stat utama. Ketika Anda memiliki 4 statistik utama, dan petarung hanya lebih baik di salah satu dari mereka, peluang menang mereka selalu 1 dalam 4, tidak peduli seberapa besar perbedaan sebenarnya. Saat Anda menginginkan hasil yang lebih berbutir halus, Anda membutuhkan lebih banyak keacakan berbutir halus.
Pertama-tama, saya pikir Anda dapat menyimpan pilihan acak Anda untuk atribut utama dan Anda juga dapat menyimpan rumus Anda jika Anda mau. Ini adalah angka yang mewakili seberapa besar keunggulan yang dimiliki pejuang ini dalam pertemuan khusus ini. Untuk sisa posting ini, saya akan merujuk ini sebagai adil
power
.Suatu metode yang saya gunakan dalam banyak permainan dan yang memberi saya pelayanan yang sangat baik ketika harus melakukan duel antara dua hal dengan yang pasti
power
, adalah dengan menggulirkan angka floating-point acak antara0
danpower
untuk keduanya dan melihat siapa yang terguling lebih tinggi. Berikut adalah daftar hasil yang diharapkan dari metode ini. Persentase tidak dihitung tetapi dihasilkan secara eksperimental dengan menjalankan 100000 pertarungan per kombinasi dan iterasi menghitung dan menghitung siapa yang menang seberapa sering:Yang menyenangkan tentang algoritma ini adalah bahwa ia berskala tidak peduli seberapa besar angka yang Anda hadapi. Peluang 0,3 vs 0,7 sama dengan peluang 3 vs 7, 300 vs 700.000.000 vs 7.000.000.000.
Ketika ini masih terlalu tidak terduga untuk selera Anda, Anda dapat membuat pertempuran lebih mudah diprediksi dengan menggulirkan beberapa angka acak untuk setiap pejuang dan menambahkannya. Karena hukum jumlah besar , banyak kejadian acak bahkan akan keluar dan menghasilkan hasil yang lebih mudah diprediksi. Berikut adalah tabel dengan jumlah iterasi yang berbeda.
Hasil 100% dan 0% pada tabel di atas adalah ilusi karena perbedaan pembulatan. Kecuali jika
power
seorang pejuang tepat 0 selalu ada kemungkinan bahwa mereka menang. Itu tidak terjadi pada tes di atas, jadi Anda bisa berharap itu di bawah 1: 100000.Anda mungkin juga melihat beberapa penyimpangan kecil yang dapat dikaitkan dengan perubahan suasana hati java.lang.Random dan mungkin tidak muncul ketika Anda menjalankan kode lagi dengan seed yang berbeda.
Program yang saya gunakan untuk menghasilkan tabel ini (Jawa).
Jika Anda ingin menggunakan kode ini di game Anda, itu dilisensikan di bawah WTF Public License Version 2 yang diterbitkan oleh Sam Hocevar .
sumber
1 - powerA / ( 2 * powerB )
.powerA < powerB
. Setelah powerA lebih besar, Anda perlu beralihpowerB / (2 * powerA)
.Kesalahan Anda menggunakan pendekatan "berbasis dadu". Anda menggunakan komputer, Anda dapat menggunakan sistem apa pun yang Anda suka. Buat tabel yang mengubah perbedaan nilai menjadi% peluang usia untuk menang dan kemudian Anda dapat mengatur nilai untuk apa pun yang Anda suka, mis.
(Anda hanya perlu melakukan setengah tabel, cukup selalu memilih A sebagai yang dengan stat yang lebih tinggi)
Jelas, angka-angka ini hanyalah sebuah contoh, Anda dapat membuatnya mengikuti distribusi apa pun yang Anda sukai.
sumber
Ini adalah pertanyaan yang cukup mendalam, jujur, dari sudut pandang mekanik game. Tetapi ada beberapa hal yang mungkin bisa membantu.
Pertama, inilah mengapa sebagian besar game memiliki komponen terpisah untuk hit dan damage, di mana ada "roll" untuk melihat apakah Anda menekan untuk damage, kemudian "roll" terhadap tabel damage atau range untuk karakter yang diberikan. Ini juga mengarah pada beberapa arketipe standar di seluruh genre, di mana Anda mungkin memiliki karakter yang lebih kecil, lebih cepat yang memiliki lebih sedikit hitpoint tetapi menangani lebih banyak kerusakan (penyihir meriam kaca, jenis penyamun tertentu) dan karakter yang lebih besar, lapis baja yang melanda lebih sedikit kerusakan (tank, prajurit) ).
Ini mengarah ke keseimbangan alami di mana karakter yang lebih kecil mungkin rapuh, tetapi menghindari dipukul sesering karena kemampuan tipe kelincahan, dan juga meratakan lapangan bermain dengan melakukan lebih banyak kerusakan (mantra, atau efek racun yang merusak lebih dari waktu). Tangki mungkin lebih lambat dan terkena lebih sering, tetapi sering memiliki kesehatan besar atau titik hit untuk mempertahankan, namun cenderung melakukan lebih sedikit kerusakan per hit (atau kerusakan per detik).
Latar belakang untuk ini adalah mengapa banyak game terus menerus melalui penyeimbangan senjata dan kelas dan statistik. World or Warcraft, Destiny, Diablo, Battlefield: semua jenis game dalam genre apa pun sering kali mengalami penyeimbangan dan penyetelan seiring waktu.
Ini mungkin bukan jawaban langsung, tetapi Anda memang meminta ide-ide umum. Jadi, mari kita juga mengevaluasi sistem permainan.
Bagaimana fungsi atribut itu? Jika semuanya sama (tidak ada pola dasar, tidak ada baju besi atau senjata yang lebih baik atau yang lainnya), maka sedikit keuntungan yang pasti akan melemparkan banyak hal demi satu sisi. Sambil menambahkan faset untuk memerangi menyulitkan sistem apa pun, ini juga memungkinkan lebih banyak fleksibilitas.
sumber
Ada dua hal besar.
Pertama, ingat Anda menggunakan komputer. Anda dapat membuat sistem apa pun yang Anda inginkan. Tidak perlu membatasi diri Anda pada roll d20, meskipun ini mudah dipahami untuk pemain. Hal-hal seperti melempar dadu 6 d6 mudah dilakukan di komputer dan hasilnya jauh lebih sedikit.
Kedua, melihat sistem lain seperti D & D jelas bahwa mereka hanya mengurangi efek atribut banyak. Alih-alih memiliki stat dasar Anda tambahkan 80% dari nilainya ke aturan, turunkan dan buat penambahannya lebih halus. Dalam D&D misalnya jika Anda memiliki 18 ketangkasan, Anda hanya mendapatkan 4 sebagai bonus untuk kelas baju besi Anda.
Jadi, singkatnya secara numerik semua yang perlu Anda lakukan adalah menurunkan domain Anda agar lebih sesuai dengan jangkauan Anda. Tapi secara kualitatif saya akan berpikir melihat sistem lain dan membuat hal-hal yang tampaknya kurang matematika akan membuat sistem yang lebih memuaskan bagi pemain.
sumber
Bagaimana dengan ini: Tambahkan konstanta, misalnya 1000, ke semua atribut yang bersangkutan. Maka perbedaan relatif menjadi sangat kecil.
sumber
Ketahui nomor Anda
Menambahkan sedikit ke jawaban Philipp , yaitu rand [x] dibandingkan dengan rand [y] mungkin tidak selalu menghasilkan apa yang diharapkan. Di bawah tabel di mana kita membandingkan A dengan B. Baik A dan B memiliki nilai 1 ... 10. Kami membandingkan dalam dua cara (catatan: rand () dalam hal ini menghasilkan bilangan bulat, yaitu. Gulungan):
Selain itu kami membandingkan
(dalam hal ini tidak relevan apakah itu> atau ≥ karena mereka sangat dekat). Tokoh-tokoh besar ini berada dalam kurung.
Sel memegang% 's. Setiap hasil memiliki 1 juta iterasi (dibuat menggunakan Dyalog APL ).
Jika melihat A = 2 dan B = 3 (dan 1 juta tes):
Mungkin mengejutkan:
Saya mungkin sebenarnya memecahkan Q ini secara berbeda, hanya dengan mengetikkan tangan tabel 10x10 dengan persentase yang bagus dan diinginkan (mungkin orang juga menginginkan penyimpangan?). Kemudian jika diperlukan interpolasi antara dua nilai, untuk mendapatkan persentase yang tepat, katakan itu karena beberapa alasan 53. Maka mudah untuk menghasilkan hit 53% kemungkinan, 0 atau 1, hanya dengan menjalankan rand (100) dan pengujian jika lebih kecil atau sama dengan 53 :-).
Begitulah yang disebutkan Jack Aidley .
sumber
0.0
dan1.0
. Dalam hal ini perbedaan antara>
dan>=
diabaikan. Anda mungkin ingin menunjukkannya.Pendekatan tradisional yang dirujuk oleh beberapa jawaban secara tersirat tetapi tidak ada yang benar-benar menguraikan adalah bahwa tugas tersebut membutuhkan die roll yang diperbaiki, dan menambahkan pengubah kemampuan yang berasal dari statistik Anda.
Misalnya, jika dua pemain mengikuti prosedur:
dan ulangi sampai satu sisi mengalahkan yang lain, lalu Anda mendapatkan angka dalam rentang Anda: inilah peluang kemenangan dengan keuntungan numerik tertentu untuk pengubahnya:
sumber
Karakter tidak saling menantang untuk supremasi. Mereka menantang persyaratan. Bagaimana jika keduanya melewati persyaratan. Yang menang? Saya terkejut Anda belum cukup menantang logika sehingga Anda bahkan pergi ke perhitungan dengan itu.
Either way, berikut adalah dua hal yang mungkin ada gunanya bagimu.
Menangkan case kebetulan dengan keuntungan:
JIKA lulus / pemeriksaan keterampilan adalah gulungan 10. Rolls 40. B Rolls 42. JIKA hanya satu yang harus menang. Mulai dari sama dengan A 50% Win / B 50% Win. Anda dapat menambahkan% untuk memenangkan peluang berdasarkan jumlah keuntungan. Roll B memiliki (42-40) / 40 = 5% keuntungan dalam hal roll. Menambahkannya secara langsung membuat peluang kemenangan B adalah 55%. Atau Anda dapat menentukan peluang kemenangan khusus per persen keuntungan. Katakan untuk setiap keuntungan 100% yang Anda tambahkan 10% peluang untuk menang. Jadi jika A Rolls 10 dan B roll 20. Kemudian A menang 40% dan B Menangkan 60% dari kasus.
Konsep keacakan yang adil:
Melakukan peluang 30% standar untuk menang, Anda mungkin berakhir dengan memenangkan 38 cek dari 100.
Beberapa orang menginginkan langkah ekstra dalam keadilan dan memastikan bahwa peluang 30% selalu menang tepat 30 dari 100 pertemuan dan cukup dengan keacakan tidak mengetahui pertemuan mana dalam urutan yang merupakan kemenangan dan yang merupakan kerugian.
Ini sangat berguna untuk ekonomi gim yang diperhitungkan dengan baik. Karena stat acak peluang 70% untuk menang. Katakanlah 70% kesempatan bagi gerombolan untuk menjatuhkan 5 emas. Massa mungkin akhirnya menjatuhkan emas 81 kali dari 100. Yang membuang pendapatan / pengeluaran tidak seimbang. Dan tergantung pada berapa banyak entitas / instance menggunakan gulungan inflasi dan / atau kekurangan seperti itu pasti diciptakan. Tentu saja banyak orang yang bahkan tidak memiliki perkiraan kasar tentang input / pengeluaran lengkap dari ekonomi mereka. Banyak orang yang cukup dengan melakukan poin ekonomi "paling banyak". Dan tinggalkan beberapa variabel generasi yang tidak dihitung dan susun perbedaan waktu bahkan dengan keacakan yang adil.
Inflasi dan kekurangan bukanlah masalah mereka sendiri. Anda dapat mengelola keacakan yang tidak adil dan bahkan variabel yang tidak terduga jika ekonomi Anda siap merespons inflasi dan kekurangan secara memadai.
Mengapa repot-repot dengan ini karena hukum banyak hal dalam jangka panjang?
Tidak setiap lingkungan dapat mempertahankan perilaku desainnya sembari mengandalkan hal-hal untuk meratakannya nanti ...
sumber