Salvo · Bahan Renungan
Di balik tindakan sederhana mengeklik sel-sel, tersembunyi sebuah mesin deterministik yang memodelkan armada tersembunyi, penalaran berbobot probabilitas, dan duel klasik antara penyembunyian dan penemuan. 3
Ditulis dan disunting dalam bahasa Inggris. Versi bahasa Indonesia ini dihasilkan oleh terjemahan mesin; jika ketepatan menjadi penting, naskah asli berbahasa Inggris adalah yang berlaku. Baca naskah asli dalam bahasa Inggris →
Di jantung permainan ini terdapat sepasang objek Board, satu mewakili posisi tersembunyi Anda dan yang lain mewakili posisi tersembunyi lawan. Setiap papan memuat satu armada kapal yang ditempatkan pada grid bergaris, tetapi lokasinya tetap tersembunyi dari pihak lain. Anda menembak grid musuh sementara AI menembak grid Anda, dan setiap tembakan entah mengenai kapal atau jatuh ke perairan kosong. Arsitektur dua papan ini menetapkan asimetri informasi mendasar dari duel armada tersembunyi: setiap pihak mengetahui papannya sendiri secara lengkap, tetapi hanya dapat menyimpulkan konfigurasi pihak lain dari pola tembakannya. 3
Simetri susunan inilah yang memberi permainan ini karakternya. Tidak ada pihak yang melihat kapal pihak lain secara langsung. Sebaliknya, kedua pihak harus membangun model mental tentang grid tersembunyi dari umpan balik yang jarang berupa kena dan meleset. Setiap tembakan menjadi data, setiap tembakan yang kena mempersempit kemungkinan, dan setiap tembakan yang meleset menyingkirkan wilayah dari pertimbangan. Koordinator permainan pada mesin mengelola kedua papan ini, memastikan bahwa tembakan dicatat, bahwa tembakan yang kena diatribusikan dengan benar, dan bahwa permainan hanya berakhir ketika seluruh armada salah satu pihak telah ditenggelamkan. 3
Sebelum permainan dimulai, mesin memanggil randomFleet untuk menata kapal-kapal AI secara acak. Keacakan ini tidak sembarangan; ia menggunakan seed, artinya suatu nilai seed tertentu akan selalu menghasilkan tata letak yang sama. Determinisme ber-seed ini adalah pilihan desain yang membuat permainan dapat direproduksi dan diuji. Jika Anda menjalankan permainan dengan seed yang sama, Anda akan mendapatkan penempatan kapal yang sama, urutan keputusan AI yang sama, dan hasil yang sama. Sifat ini berharga untuk proses debugging dan untuk memahami bagaimana AI berperilaku dalam berbagai kondisi. 3
Begitu armada tertata, aturan yang mengatur permainan bersifat tetap dan deterministik. AI tidak melempar dadu, dan mesin tidak memasukkan keacakan di tengah permainan. Setiap keputusan yang dibuat AI mengikuti model probabilitas yang dipeliharanya, dan setiap tembakan yang Anda lepaskan dicatat dan dianalisis. Satu-satunya sumber variasi adalah seed yang menentukan penempatan armada awal. Ini berarti permainan pada akhirnya adalah sebuah teka-teki: dengan batasan aturan dan umpan balik dari tembakan, dapatkah Anda menyimpulkan konfigurasi tersembunyi sebelum AI menyimpulkan konfigurasi Anda? 3
Ketika Anda melepaskan tembakan, mesin mencatatnya pada papan sasaran dan memeriksa apakah tembakan itu kena atau meleset. Ini dilakukan melalui fungsi fire, yang memperbarui keadaan papan dan menentukan hasilnya. Tembakan yang kena menandai sel tersebut sebagai ditempati kapal, sedangkan tembakan yang meleset menandainya sebagai perairan kosong. Mesin kemudian memeriksa apakah kapal yang memuat sel itu telah tenggelam sepenuhnya dengan memeriksa semua selnya. Jika semua sel sebuah kapal telah terkena, kapal itu tenggelam, dan informasi ini disampaikan kepada kedua pihak. 3
Kondisi kemenangan sederhana tetapi berdampak besar. Satu pihak menang ketika semua kapal lawan telah tenggelam. Ini diperiksa melalui fungsi allSunk, yang memeriksa apakah setiap kapal di papan lawan telah terkena sepenuhnya. Permainan segera berakhir ketika kondisi ini terpenuhi. Sifat semua-atau-tidak-sama-sekali dari kondisi kemenangan ini berarti setiap tembakan penting, dan bahwa tekanan untuk menenggelamkan kapal dengan cepat diimbangi oleh kebutuhan untuk tidak membocorkan konfigurasi Anda sendiri. 3
Lawan dalam permainan ini bukanlah penembak acak biasa. Ia adalah AI penyasar berbasis probabilitas yang menimbang seberapa besar kemungkinan setiap sel tersembunyi memuat kapal. AI memelihara model probabilitas dari grid musuh, memperbaruinya seiring tembakan dilepaskan dan umpan balik diterima. Sel-sel yang tidak mungkin memuat kapal karena batasan penempatan kapal-kapal yang tersisa ditandai sebagai tidak mungkin, sedangkan sel-sel yang harus memuat kapal untuk mengakomodasi penempatan yang tersisa ditandai sebagai mungkin. AI kemudian menembak sel dengan probabilitas tertinggi, mengubah tebakan buta menjadi pencarian yang terinformasi. 3
Model probabilitas ini berlandaskan matematika kemungkinan, di mana peristiwa digambarkan dengan bilangan antara nol dan satu 2. Probabilitas nol berarti suatu peristiwa tidak dapat terjadi, sedangkan probabilitas satu berarti peristiwa itu pasti terjadi. AI menggunakan gambaran numerik ini untuk memandu tembakannya, mengutamakan sel-sel di mana probabilitas menemukan kapal paling tinggi. Pendekatan inilah yang membedakan AI dari penembak yang murni acak dan memberinya perilaku berburu yang khas.
Perilaku AI dapat digambarkan dalam dua fase: berburu dan menyasar. Dalam fase berburu, AI mencari kapal dengan menembak sel-sel di mana kapal yang belum ditemukan paling mungkin berada. Ini adalah pencarian luas yang bertujuan menemukan kontak pertama dengan kapal musuh. Begitu sebuah tembakan kena tercatat, AI beralih ke fase menyasar, di mana ia memusatkan perhatian pada sel-sel tetangga dari tembakan yang kena itu untuk menuntaskan penenggelaman kapal tersebut. Pendekatan dua fase ini mencerminkan cara pemain manusia mendekati permainan: temukan kapalnya dulu, lalu tenggelamkan. 3
Peralihan antara berburu dan menyasar ditentukan oleh apakah tembakan terakhir kena atau meleset. Jika tembakan terakhir meleset, AI kembali ke mode berburu dan mencari sel-sel dengan probabilitas tertinggi. Jika tembakan terakhir kena, AI memasuki mode menyasar dan menembak sel-sel tetangga dari tembakan yang kena itu. Aturan sederhana ini, dipadukan dengan model probabilitas, menciptakan strategi yang koheren yang menyeimbangkan eksplorasi dan eksploitasi. AI mengeksplorasi grid untuk menemukan kapal dan mengeksploitasi pengetahuannya tentang sebuah tembakan yang kena untuk menenggelamkan kapal itu secara efisien. 3
AI memiliki tiga tingkat kekuatan kesulitan yang menyetel perilakunya. Tingkat-tingkat ini memengaruhi cara AI menimbang probabilitas dan mengambil keputusan. Pada tingkat yang lebih rendah, AI mungkin lebih sering membuat kesalahan atau kurang agresif dalam menyasar. Pada tingkat yang lebih tinggi, AI lebih konsisten dalam perhitungan probabilitasnya dan lebih kejam dalam menyasar. Ragam tingkat ini memungkinkan pemain menemukan taraf tantangan yang sesuai bagi mereka, dari permainan santai hingga kompetisi serius.
Implementasi persis dari tingkat-tingkat kekuatan ini berada di komponen AI pada mesin, yaitu kelas SalvoAI. Tingkat kesulitan mengubah cara AI menafsirkan model probabilitas dan cara ia menyeimbangkan eksplorasi dengan eksploitasi. Desain ini memungkinkan AI mudah diakses oleh pemain kasual sekaligus menantang bagi pemain berpengalaman, tanpa mengubah mekanika dasar permainan. 3
Di atas aturan klasik terdapat satu variasi: ping sonar. Kemampuan ini memungkinkan satu pihak mengungkap pembacaan area 3×3 dari grid musuh dengan mengorbankan tembakan pada giliran itu. Ping sonar mengungkap apakah setiap sel dalam area 3×3 tersebut memuat kapal atau merupakan perairan kosong. Informasi ini bisa sangat berharga untuk mempersempit lokasi kapal, tetapi harganya adalah kehilangan tembakan Anda pada giliran itu. 3
Keputusan untuk menggunakan ping sonar adalah keputusan strategis. Kapan informasi itu sepadan dengan harganya? Jika Anda kesulitan menemukan kapal, ping sonar dapat memberikan terobosan yang Anda butuhkan. Jika Anda hampir menenggelamkan sebuah kapal, harga kehilangan tembakan mungkin terlalu mahal. Ping sonar menambahkan lapisan pengelolaan sumber daya pada permainan, memaksa pemain menimbang nilai informasi terhadap nilai tindakan. 3
Variasi lain atas aturan klasik adalah pemindahan sekali per permainan. Setiap pihak boleh memindahkan salah satu kapalnya sendiri satu kali selama permainan. Manuver mengelak defensif ini tidak menghabiskan giliran, artinya Anda dapat memindahkan kapal dan tetap melepaskan tembakan pada giliran Anda. Kemampuan pemindahan memungkinkan Anda memindahkan kapal keluar dari bahaya ketika kapal itu terancam, atau memindahkannya ke lokasi yang lebih mudah dipertahankan. 3
Kemampuan pemindahan adalah opsi satu kali, dan itulah yang membuatnya berharga. Kapan sebaiknya Anda menggunakannya? Jika sebuah kapal hampir tenggelam, memindahkannya dapat menyelamatkannya. Jika Anda yakin dengan posisi Anda saat ini, memindahkan kapal mungkin sia-sia. Keputusan untuk memindahkan kapal adalah keputusan strategis yang menuntut pertimbangan cermat atas keadaan permainan saat ini dan kemungkinan tindakan lawan Anda. 3
Yang mendasari semua mekanika ini adalah aturan klasik satu tembakan per giliran. Setiap pihak melepaskan tepat satu tembakan per giliran, bergantian bolak-balik. Aturan ini menetapkan ritme permainan dan memastikan kedua pihak memiliki kesempatan yang setara untuk bertindak. Aturan satu-tembakan-per-giliran inilah yang menjadikan permainan ini duel kecerdasan, bukan perlombaan kecepatan. 3
Aturan klasik inilah yang mengakarkan permainan ini pada tradisi Battleship (Kapal Perang), permainan tebak-tebakan bertipe strategi untuk dua pemain yang dimainkan pada grid bergaris di mana armada setiap pemain disembunyikan dari lawan 1. Aturan satu-tembakan-per-giliran inilah yang menjadikan permainan ini ujian deduksi dan probabilitas, bukan ujian refleks. Aturan ini sederhana, tetapi inilah yang memberi permainan ini karakter dan tantangannya.
Mesin ini murni dan deterministik ber-seed, digerakkan oleh pembangkit bilangan acak ber-seed miliknya sendiri. Ini berarti setiap aspek permainan ditentukan oleh nilai seed yang diberikan di awal. Dengan seed yang sama, permainan akan selalu menghasilkan urutan peristiwa yang sama, dari penempatan armada awal hingga tembakan terakhir. Sifat ini membuat permainan dapat diuji, karena skenario yang sama dapat direproduksi dan diperiksa. 3
Determinisme ber-seed juga berimplikasi pada pemahaman permainan. Jika Anda ingin memahami bagaimana AI berperilaku dalam skenario tertentu, Anda dapat menjalankan permainan dengan seed tertentu dan mengamati hasilnya. Jika Anda ingin menguji strategi tertentu, Anda dapat menjalankan permainan beberapa kali dengan seed yang sama dan melihat bagaimana kinerjanya. Reproduksibilitas ini adalah fitur berharga bagi pemain maupun pengembang.
Board with a hidden fleet, the human fires at the enemy fleet and the AI at the human's, one shot per turn (classic rules), fire records a hit or miss, and a side wins when the opponent's ships are all sunk (allSunk); the opponent is a probability-targeting SalvoAI with three difficulty strengths that "hunts" for ships by favouring the cells where an undiscovered ship is most likely to sit and then "targets" the neighbours of a hit to finish it; two twists sit on the classic rules, a sonar ping reveals a 3×3 ship/empty readout but costs that turn's shot, and each side may reposition one of its own ships once per game (a dodge that does not cost the turn); and the engine is pure and seeded-deterministic.