Bisakah saya mencegah gerakan diagonal dari menjelajahi lebih banyak peta?

57

Dalam kotak-ubin di mana gerakan di salah satu dari 8 arah mengambil jumlah belokan yang persis sama (aturan gaya papan catur), dapatkah saya mencegah gerakan diagonal menampilkan lebih banyak ubin baru daripada gerakan ortogonal?

Misalnya: Anda adalah kotak merah pada gambar di bawah ini. Sel-sel hijau saat ini terlihat oleh Anda (bidang pandang persegi). Anda dapat memindahkan jarak satu ubin di salah satu dari delapan arah.

Jika Anda bergerak ke timur laut , Anda akan menjelajahi 13 ubin baru (diperlihatkan dengan warna biru). Jika Anda sebaliknya pindah ke selatan , Anda hanya akan menjelajahi 7 ubin baru (diperlihatkan dengan warna ungu).

kisi dengan visibilitas tergantung pada posisi

Bagaimana saya bisa membuat perjalanan di setiap arah sama-sama menguntungkan untuk eksplorasi?

Tuan Smith
sumber
27
Ini adalah kelemahan mendasar dengan desain game seperti ini. Anda harus tidak mengizinkan gerakan diagonal atau beralih ke sesuatu seperti kisi hex yang tidak memiliki masalah ini.
Tetrad
1
@Tetrad Anda tidak salah tentang itu menjadi cacat, tetapi Anda mungkin tidak menyadari betapa lazimnya hal itu dalam game seperti ini .
Tn. Smith
8
Dalam setiap permainan di mana gerakan ortogonal dan diagonal sama cepatnya, akan selalu ada beberapa hal yang lebih baik untuk gerakan diagonal daripada gerakan ortogonal dan sebaliknya. Hanya saja tidak bisa dipecahkan - jika Anda mencolokkan satu lubang, lubang lainnya akan terbuka.
Patashu
3
Tidak seluruh jawaban, tetapi apakah mungkin dalam gim Anda untuk membuat gerakan diagonal membutuhkan waktu lebih lama dari yang ortogonal sebanding dengan panjang diagonal? Kedua, Anda dapat memiliki solusi campuran di mana gerakan menggunakan pola berlian dan jarak tampilan menggunakan yang persegi?
Vality
2
Lain tidak-cukup-jawaban: bergerak Orthogonal berperilaku seperti yang mereka lakukan sekarang, tetapi gerakan diagonal menyebabkan sumber cahaya menjadi "kabur" - itu tidak mengungkapkan semua 13 kotak yang baru saja datang ke jangkauan, tetapi hanya 7 (atau lebih) dari mereka, ditentukan secara acak.
Snowbody

Jawaban:

67

Dungeons and Dragons 3.5 (RPG pena-dan-kertas) memiliki solusi yang digunakan untuk perhitungan radius gerakan dan berbasis grid: pergerakan diagonal berharga 1,5 berapa biaya ortogonal. Karena diagonal dari unit square adalah sekitar 1,414, 1,5 cukup dekat.

Karena D&D 3.5 hanya mendukung gerakan bilangan bulat, cara ini sebenarnya dihitung adalah bahwa biaya pergerakan orthogonal "satu kotak." Gerakan diagonal pertama Anda juga hanya biaya "satu kotak," tetapi biaya diagonal kedua "dua kotak." Anda mengganti satu dan dua kotak untuk setiap gerakan diagonal. Menerapkan aturan gerakan ini di dalam gim Anda akan menangani beberapa masalah dengan gerakan diagonal.

Seperti yang ditunjukkan diagram ini, aturan gerakan ini menciptakan perkiraan lingkaran yang masuk akal dan juga tidak mati lebih dari 1 bila dibandingkan dengan jarak sebenarnya (ketika dalam 15 unit awal).

masukkan deskripsi gambar di sini

Jika visi / jari-jari eksplorasi Anda juga dihitung dengan cara ini, gerakan diagonal dan penemuan diagonal akan sedekat atau sejauh yang ortogonal.

Dane
sumber
Persis seperti yang ingin saya sarankan. Meskipun perlu dicatat, strategi ini jatuh dalam hal membatasi gerakan jika karakter hanya dapat bergerak satu ruang per putaran (yang tampaknya merupakan kasus dari diagram pertanyaan?). Anda bisa "mengingat" jika mereka berada diagonal ganjil / genap di antara belokan, meskipun ini mungkin membingungkan / membuat frustrasi pemain. Apapun, ini bekerja dengan baik untuk masalah visibilitas.
Alexis Beingessner
5
@AlexisBeingessner, benar. Dan si penanya memang mengindikasikan bahwa dia menginginkan gerakan seperti raja-catur, tetapi saya pikir karena ini adalah situs pengembangan game komputer, saya akan menunjukkan solusi permainan-permainan yang bagus. Jika ini lebih merupakan teka-teki atau pertanyaan matematika murni, saya harapkan di situs lain. Jika ini untuk permainan seperti nakal, beberapa dari mereka sudah mendukung berbagai kecepatan gerakan.
Dane
Sebagian besar permainan Roguelike tampaknya berbasis giliran, tetapi sebenarnya memiliki komponen waktu, jadi jika Anda bergerak secara diagonal, objek lain akan memiliki lebih banyak waktu untuk bereaksi sebelum Anda melakukan gerakan lain.
Kos
67

Anda perlu mengubah bentuk bidang tampilan.

Sehingga saat Anda bergerak ke segala arah, jumlah kotak baru yang sama akan terlihat.

Berikut ini satu kemungkinan:

contoh grid

ChargingPun
sumber
5
Menarik; Saya tidak pernah mempertimbangkan bidang pandang berlian. Namun, ada masalah dengan pandangan ini juga; itu ide yang buruk untuk bepergian diagonal sekarang, karena jika Anda melihat musuh saat bepergian diagonal, itu akan jauh lebih dekat dengan Anda daripada jika Anda bepergian secara ortogonal.
Tn. Smith
43
@ mr.smith, ya, itu masalah baru, tapi saya sudah memecahkan yang lama Anda ...
ChargingPun
Memang Anda melakukannya; sepertinya saya tidak cukup spesifik dengan pertanyaan itu.
Tn. Smith
8
Apakah bentuk lingkaran akan membantu di sini?
amitp
3
@amitp Ini adalah bentuk lingkaran - asalkan fungsi jarak Anda adalah jarak Manhattan.
Daniel Wagner
27

Agar gerakan diagonal dan ortogonal mengungkapkan kira-kira area yang sama, Anda memerlukan dua hal (masing-masing, sendiri, telah disarankan dalam jawaban atau komentar lain):

  1. Kisaran tampilan melingkar :

    Gambar rentang tampilan pseudo-melingkar

    Dengan sendirinya, ini tidak akan memberikan area yang sama persis terungkap untuk kedua jenis gerakan. Sebagai contoh, pada gambar di atas, gerakan ortogonal mengungkapkan 9 kotak, sedangkan gerakan diagonal mengungkapkan 13. Ini masih lebih baik daripada rasio 13/7 untuk area tampilan kuadrat dalam contoh Anda.

    Bahkan, ketika radius tampilan bertambah, rasio area yang terungkap per langkah diagonal / orthogonal cenderung tends2 ≈ 1.414 untuk area lingkaran, sedangkan rasio yang sama untuk area tampilan persegi cenderung 2.

  2. Gerakan diagonal yang lebih lambat :

    Dalam kehidupan nyata, berjalan secara diagonal melintasi lapangan persegi membutuhkan waktu lebih lama daripada berjalan di salah satu sisi. Bahkan, dibutuhkan sekitar √2 ≈ 1,414 kali lebih lama. Jika Anda ingin gerakan dalam gim Anda terasa realistis, Anda juga harus mewujudkannya di gim Anda.

    Dalam praktiknya, 3/2 = 1,5 adalah pendekatan yang cukup bagus untuk √2. Dengan demikian, Anda bisa membuat setiap langkah ortogonal mengambil dua unit waktu, dan membuat setiap langkah diagonal mengambil tiga. Dengan contoh area tampilan di atas, ini menghasilkan 9/2 = 4,5 kotak mengungkapkan per unit waktu untuk gerakan ortogonal, dan 13/3 = 4,33 kotak mengungkapkan per unit waktu untuk gerakan diagonal. Cukup dekat, kan?

    Sebagai alternatif, jika Anda ingin tetap berpegang pada "1 langkah = 1 unit waktu" untuk pergerakan ortogonal, Anda dapat menggunakan sesuatu seperti sistem D & D yang disarankan Dane dan membuat setiap langkah diagonal kedua membutuhkan giliran tambahan. (Namun, jika Anda melakukan itu, Anda harus memberikan setiap unit penghitung eksplisit tentang berapa banyak langkah diagonal yang telah mereka ambil; jika tidak, Anda mungkin berakhir dengan eksploitasi seperti, katakanlah, E, NE, E, NE, .. . urutan gerakan yang memungkinkan pemain untuk mengeksplorasi lebih cepat daripada yang dimaksudkan.)

Ilmari Karonen
sumber
Cara mudah untuk mencegah eksploitasi seperti itu adalah dengan mengatakan bahwa biaya pergerakan diagonal membutuhkan dua kutu kecuali jika didahului oleh langkah ke arah yang sama yang mengambil dua kutu.
supercat
1
@supercat: Benar, tetapi itu akan membuat urutan E, NE, E, NE, ... terasa kurang efisien untuk dijelajahi daripada gerakan ortogonal / diagonal lurus, yang mungkin juga tidak diinginkan.
Ilmari Karonen
Itu akan meninggalkan urutan yang kurang efisien, tetapi jadi apa? Tidak semua metode eksplorasi harus sama efisiennya. Sebenarnya, mungkin tidak buruk untuk memiliki hukuman waktu untuk perubahan orientasi, dengan pengecualian untuk kasus-kasus di mana perpindahan sebelum atau sesudahnya adalah diagonal bermuatan ganda.
supercat
2
Saya melakukan sesuatu yang mirip beberapa waktu lalu, dan saya menyelesaikannya dengan memiliki gerakan orthogonal biaya dua "kutu" per persegi, dan gerakan diagonal harganya tiga.
Mason Wheeler
11

Karena Anda menggunakan kisi dan tahu ke arah mana pengguna melanjutkan, tidak ada yang menghalangi Anda untuk mengadaptasi jawaban sebelumnya dan menggunakan bidang tampilan yang berbeda tergantung pada arah.

Misalnya Anda dapat memperluas bidang untuk memasukkan sudut ketika Anda melakukan perjalanan dalam arah mata angin dan mengecilkannya dua kotak di setiap ujung dalam kotak diagonal Anda sehingga masing-masing membuka 9 kotak.

Alternatif lain tergantung pada bagaimana pencahayaan Anda bekerja adalah dengan menggunakan perkiraan lingkaran yang lebih baik dengan antialiasing, untuk mengungkapkan sebagian kotak.

pengguna43497
sumber
Itu adalah kompromi yang menarik; jika Anda bepergian secara diagonal, tidak semua sel yang biasanya terlihat akan terlihat. Anda bisa menunggu giliran (agar sel-sel itu dieksplorasi) atau terus bergerak.
Tn. Smith
8
jawaban mana yang merupakan "jawaban sebelumnya"?
Mooing Duck
7

Bagaimana, daripada memiliki rentang tampilan tetap, memiliki area visibilitas pemain tergantung pada arah yang dihadapi pemain, serta mungkin arah yang dihadapi pemain dalam beberapa belokan terakhir (pemain yang bergerak ke utara mungkin bisa segera ambil langkah ke selatan, tetapi mungkin perlu beberapa putaran untuk mendapatkan jarak tampilan maksimum ke arah itu). Seorang pemain yang menuju utara keluar dari koridor sempit ke sebuah ruangan besar dan terus melakukan perjalanan ke utara akan memiliki visibilitas terbatas ke timur dan barat, dan mungkin harus. Ketika pemain berhenti bergerak, seseorang dapat membuat sistem secara otomatis "menjelajahi" area tak terlihat yang berada dalam radius penglihatan pemain saat ini, tetapi ketika pemain aktif bergerak, bidang pandang harus lebih dibatasi.

supercat
sumber
3

Sebagai alternatif untuk bidang pandang yang lebih kompleks (yang seperti dibahas di atas menambah masalahnya sendiri karena kendala tata letak berbasis kotak), Anda dapat mencoba untuk meniru efek gerakan dalam permainan yang tidak didasarkan pada diskrit. kisi. Di mana gerakan bebas dimungkinkan, gerakan diagonal dari satu unit akan persis seperti itu, bukan gerakan ~ 1,41 unit yang terlihat dengan kotak persegi.

Meskipun Anda tidak dapat memaksakan satu gerakan unit tanpa kehilangan grid descreet Anda (yang akan mengubah desain game Anda cukup signifikan) mungkin Anda bisa melacak pergerakan ekstra yang diambil dan menjatuhkan bergerak kemudian: melacak ekstra 0,41 dan setelah mereka total lebih dari itu 1,00 memiliki unit yang melewati langkah. Atau sebaliknya: anggap diagonal normal, tambahkan 0,41 untuk setiap gerakan horizontal atau vertikal, dan berikan kredit gerakan ekstra satu kali lebih besar dari 1 (atau 1,41 untuk gerakan diagonal).

Anda harus berhati-hati bagaimana Anda menyajikan ini kepada pemain Anda dengan cara yang membuatnya terlihat halus dan adil. Dalam skenario multi-manusia-pemain, perubahan seperti itu bisa menjadi sesuatu yang para pemain manfaatkan secara strategis - ini mungkin masalah, atau mungkin ada cara alami untuk mencampuradukkan hal ini dengan mekanik permainan (mungkin memungkinkan pemain untuk menyimpan sedikit jumlah "kredit bergerak yang tidak digunakan" yang dapat mereka gunakan untuk bereaksi dengan cepat di lain waktu dan mendapatkan 0,41 detik umpan bergerak ke dalam (atau mengambil dari) kumpulan itu.

Ini akan bekerja paling baik jika entitas kontrol pemain bergerak bergerak dari satu unit setiap belokan. Misalnya, tiga titik gerakan dapat digunakan sebagai tiga gerakan horzontal, atau dua yang diagonal dengan 0,16 tersisa di kumpulan untuk nanti. Setelah itu mencapai 1,00 pemain mendapat "gratis" hor / sangat bergerak dan di 1,41 gratis diagonal. Anda dapat membatasi ekstra pada 1,5 untuk memaksanya digunakan atau hilang pada saat itu untuk menghentikan pemain menjaga energi yang tersimpan ini untuk waktu yang lama atau membiarkannya menumpuk.

Jelas ini adalah komplikasi dari aturan permainan Anda yang mungkin benar-benar tidak diinginkan, dan itu akan tidak praktis untuk permainan yang tidak terkomputerisasi, tetapi jika Anda bisa membuatnya bekerja dalam aturan permainan Anda yang ada, itu akan membatasi perbedaan eksplorasi antara arah gerakan tanpa perlu untuk meninggalkan format kisi.

David Spillett
sumber
2

Anda bisa membuat pemain bergerak dua ruang jika mereka bergerak ke atas, bawah, kiri atau kanan, dan hanya satu secara diagonal. Itu tidak akan sepenuhnya meratakannya, tetapi akan jauh lebih dekat.

drdavehere
sumber
Ini adalah ide yang bagus tapi saya percaya setara dengan hanya melarang gerakan diagonal (karena diagonal hanya dua gerakan ortogonal)
Vality