Maaf untuk judul yang jelek tapi saya tidak punya cara yang lebih baik untuk mengatakannya ...
Jadi ada game luar biasa dari Nintendo (ya!) Di Wii yang disebut WiiPlay . Ada 9 minigame di dalamnya, dan favorit saya disebut Tank! . Ini tentang menghancurkan tank musuh COM tanpa membuat dirimu hancur. Berikut screenshot dari level:
Salah satu cara untuk menghancurkan tank adalah dengan menembakkan peluru. Ada tangki musuh hijau limau yang menembakkan peluru berkecepatan tinggi yang memantul (ke dinding dan blok) dua kali. Anda dapat melihat bagaimana tank pemain dapat langsung hancur jika tetap di tempat sekarang, karena tangki kapur di tengah dapat menembakkan peluru yang mengikuti jalur hijau yang saya gambar.
Sebagai seorang programmer amatir, saya sendiri bertanya-tanya bagaimana tangki kapur menentukan arah mana yang harus ditembakkan untuk memukul tangki pemain.
Saya memikirkannya sendiri tetapi tidak menemukan algoritma yang memungkinkan. Saya akan menjelaskan kesimpulan saya jika mereka menginspirasi seseorang. Hanya untuk kesederhanaan selama penjelasan saya, saya menganggap dinding sebagai permukaan yang dapat dipantulkan peluru . Dengan demikian, balok persegi yang terisolasi membentuk empat dinding.
Saya menyimpulkan bahwa 2 poin di mana peluru ricochets selalu terletak di satu sisi jajar genjang atau menjadi titik berlawanan dari jajaran genjang. Tank musuh yang ditembakkan dan tank pemain yang dibidiknya tidak harus dengan 2 simpul lainnya, tetapi jelas terletak pada garis-garis yang bertautan ke salah satu dari keempat sisi jajaran genjang. Berikut adalah ilustrasi dari 4 kemungkinan cara jajar genjang dapat dibentuk:
HOR-VER berarti peluru pertama mengenai dinding horizontal, kemudian mengenai dinding vertikal.
Dan kemudian saya mandek. Saya berpikir untuk bergerak di sekitar garis yang menghubungkan tangki musuh dan tangki pemain di sekitar peta untuk melihat apakah itu membentuk jajaran genjang dengan dua hit dengan dinding apa pun, tetapi ini tidak selalu berhasil karena tangki musuh dan tangki pemain tidak tentu saja kebetulan dengan simpul dari jajaran genjang.
Juga, saya tidak yakin dengan alur umum dari algoritma. Apakah algoritma mengambil salah satu dari 2 struktur berikut, atau mungkin saya salah dengan keduanya?
- Terus mencari tahu jalur yang mungkin dan selalu tandai satu sebagai yang terbaik (bisa menjadi yang terpendek, paling tidak jelas, paling tak terhindarkan, atau penilaian gabungan dan tertimbang berdasarkan beberapa kriteria) dan lupakan sisanya. Yang tersisa setelah semua perhitungan adalah yang terbaik untuk diambil.
- Pertama-tama tentukan semua dinding yang pertama-tama dapat dijangkau dengan peluru (peluru tidak perlu memantul ke dinding lain untuk mencapai masing-masing dinding ini), kemudian tentukan semua rentang yang dapat dicapai pada setiap dinding ini (kadang-kadang mustahil untuk mencapai titik jauh pada dinding tanpa memantul jika dinding lain berdiri di dekat Anda), kemudian tentukan kembali semua dinding yang dapat dijangkau dengan memantul, dan semua rentang dapat dicapai pada dinding ini. Keempat proses ini dapat dilakukan dengan cara yang mirip dengan penelusuran sinar. Selama setiap proses, jika tangki pemain terkena sinar apa pun, cari tahu jalur peluru sesuai dengan sinar itu.
Menurut pendapat saya, algoritma ini sulit diketahui karena:
- sebuah peluru bisa ditembakkan ke segala arah; dan
- ada banyak titik di dinding mana pun, seperti dalam matematika, di mana ada banyak titik di garis.
Tapi orang-orang Nintendo tetap melakukannya, jadi ... ada yang punya ide?