Jangan hitung angka dalam "pi",
"E" sama tak terhingga.
Dan jika Anda menulisnya dari akhir, apa lagi?
Martin Gardner "Tic Tac Toe"Untuk artikel ini, saya ingin memilih epigraf yang berbeda, tetapi merasa terlalu menyedihkan.
Rilis berikutnya ditunda lagi. Selama waktu ini, saya berhasil berganti pekerjaan! Bekerja di tempat baru membutuhkan banyak energi, tetapi saya terus menemukan waktu untuk hobi kecil saya. Dan saya harus mengatakan, apa yang harus saya hadapi dalam proses menjadi semakin sulit. Aku akan memberitahumu tentang itu. Saya ingin memulai dengan epigraf lain, tetapi yang ini juga tidak buruk.
Kali ini, ada
mankal baru dan "
game transisi " (ini adalah
Halma dan kerabatnya). Semacam balapan di mana Anda harus mengambil rumah lawan Anda dengan potongan Anda di depannya. Angka (baik milik kita dan orang lain) dapat dilompati (seperti pada
catur ), tetapi tidak ada tangkapan. Apa yang saya jelaskan kepada Anda? Tentunya, banyak dari Anda memainkan
Corners di masa kecil Anda.
Sekilas, gim ini terlihat sederhana, tetapi masalahnya sudah mulai pada tingkat kernel. Ingat, saya
berbicara tentang gerakan majemuk? Untuk banyak alasan, lebih mudah untuk mewakili mereka sebagai yang komposit - sebagai satu kesatuan, dan bukan sebagai urutan gerakan parsial. Ini lebih nyaman untuk AI, dan dari sudut pandang desain, ada permainan yang uraiannya dalam bentuk gerakan majemuk terlihat jauh lebih alami. Tapi ada satu masalah.
Pada checker, saat melakukan gerakan komposit, bagian-bagian tersebut dilepas dari papan (mungkin di akhir gerakan). Di Sudut - Anda dapat melompati bagian Anda sendiri atau lawan hingga tak terbatas. Secara harfiah. Dan tidak ada ekstensi di sini yang disimpan, karena semuanya berjalan dalam siklus tanpa mencapainya, di kernel, bahkan pada tahap menghasilkan daftar gerakan. Saya harus mengubah logika ini, menerapkan opsi (
deteksi-loop ) di sana, yang akan layak dipikirkan sebelumnya.
Bot juga tidak mudah.Masalah utama dengan rangkaian permainan ini adalah tidak mudah memilih fungsi evaluasi yang cukup mewakili situasi di papan tulis. Karena tujuan permainan ini adalah untuk mencapai "rumah" lawan, dimungkinkan untuk memperkirakan jarak total dari semua bagian ke bidang target (
Manhattan atau
Euclidean - tidak ada perbedaan), tetapi di Halm, di bawah serangkaian keadaan yang sukses, potongan-potongan itu dapat melompati seluruh papan sekaligus, jadi perkiraan seperti itu memberi sedikit.
Dengan bidang target, semuanya juga tidak jelas. Anda tidak dapat mengarahkan semua angka ke bidang yang sama. Sosok pertama yang sampai kepadanya tepat di sana dan membawanya. Akan ideal untuk menentukan bidang target optimal untuk masing-masing angka dan pindah ke mereka, tetapi sulit, dalam rencana komputasi. Selain itu, situasi di papan tulis berubah dengan setiap gerakan. Secara umum, saya memutuskan untuk tidak melihat jauh ke depan dan membatasi diri pada
algoritma heuristik murni.
Dengan penilaian kualitas stroke seperti ituDagaz.AI.heuristic = function(ai, design, board, move) { var t = getTargets(design, board, board.player); var m = getMove(move); var r = 1; if (m !== null) { if (!design.inZone(0, board.player, m.start)) { if (_.indexOf(t.first, m.end) >= 0) { r = 1000 + getDistance(t.first, m.start) - getDistance(t.first, m.end); } if (_.indexOf(t.goal, m.end) >= 0) { r = 700 + getDistance(t.first, m.start) - getDistance(t.first, m.end); } if ((r == 1) && (_.indexOf(t.second, m.end) >= 0)) { r = 500 - getDistance(t.second, m.end); } } if (r == 1) { if (design.inZone(2, board.player, m.end) && !design.inZone(2, board.player, m.start)) { r = 300; } } if (bestFound(design, board, 300)) return -1; if (r == 1) { var goals = getGoals(design, board, board.player); if (!_.isUndefined(goals[m.start])) { var goal = goals[m.start]; if (m.next == goal.next) { r = 100 + distance(goal.end, m.start) - distance(goal.end, m.end); } } } if (notBest(design, board, r)) return -1; var b = board.apply(move); if (isRestricted(design, b, board.player)) return -1; } return r; }
Bukan solusi yang ideal, tetapi untuk memulainya cukup berhasil. Jika bot melihat gerakan yang memungkinkan untuk "melompat" ke "rumah" musuh, ia memilihnya. Jika tidak, secara bertahap mengurangi jarak ke target, mencoba menghindari kemacetan. Situasi paling menyedihkan dapat terjadi jika satu pemain (secara tidak sengaja atau sengaja) meninggalkan karyanya di "rumah", dan yang lainnya - "menguncinya" dengan dua baris potongannya.
Tentu saja, kemungkinan situasi seperti itu cukup rendah.Berkat aturan yang diusulkan oleh Sidney Saxon, penemu dan kolektor game dari New York. Sarannya adalah sebagai berikut: jika sepotong memiliki kemampuan untuk meninggalkan "rumahnya", dengan melompat melalui sepotong lawan atau dengan rantai lompatan mulai dari gerakan seperti itu, ia harus melakukannya. Saya mencoba berbagai versi aturan, tidak termasuk kemungkinan mengunci angka di "rumah" mereka sendiri dan menemukan aturan Sidney Saxon yang paling sukses. Setelah meninggalkan "rumahnya", bidak tidak lagi dapat kembali ke sana (meskipun ia memiliki hak untuk melewatinya dalam proses menyelesaikan langkah).
Untuk berjaga-jaga, saya melarang gerakan "mengunci" lawan (jika Anda tidak harus melihat banyak gerakan ke depan, Anda dapat membiarkan sendiri heuristik yang rumit) dengan menetapkan peringkat negatif untuknya, tetapi situasi "mengunci" bidang target kosong tidak kalah berbahaya untuk bot (terutama bot ini) nyata dalam
Halma klasik , dengan gerakannya yang murni ortogonal). Secara umum, bot ini memiliki ruang untuk tumbuh.
Dalam permainan di mana potongan diizinkan untuk diambil, itu masih lebih rumit. Dan ada banyak permainan seperti itu! Mungkin yang paling terkenal adalah
Camelot , ditemukan oleh George Parker pada 1930. Tapi secara pribadi, saya suka game yang kurang terkenal, dibangun berdasarkan mekanik yang sama.
Game ini adalah ceritanya sendiri! Kembali pada tahun 1908, para suffragists datang dengan itu untuk memajukan pandangan politik mereka. Semuanya ada di sini: House of Commons,
Albert Hall , penjara kota dan rumah sakit. Para
suffragis wanita
sedang bertarung dengan polisi. Tujuan mereka adalah membawa 6 orang mereka ke House of Commons. Mereka tidak bisa memasuki markas mereka, Albert Hall. Bentuk bergerak ke segala arah. Melompati potongan musuh dan musuh juga diperbolehkan.
Serangkaian lompatan, bagaimanapun, bisa panjang sewenang-wenang. Jika kasus ini terjadi di "arena", figur musuh, ketika melompati mereka, ditebang dan dikirim ke penjara atau rumah sakit. Figur biasa hanya dipotong secara diagonal, besar (polisi dan pemimpin suffragist) - ke segala arah. Ketika 6 angka direkrut di penjara dan rumah sakit, mereka dapat "ditukar" dengan memasukkan kembali permainan. Dengan demikian, potongan-potongan, seperti di
Shogi atau
Pillar Chequers , tidak pernah meninggalkan permainan.
Secara umum, seluruh rilis ini hanya pada topik opsi tersebut. Sebagai contoh, saya akhirnya menguasai transformasi yang benar dari
Catur (sampai sekarang, semua pion berubah menjadi ratu, yang, secara umum, salah). Saya tidak terlalu repot dengan ini dan menggambar dialog pilihan tepat di kanvas. Ternyata cukup baik (jika saya bisa melepaskan tangan sehingga mereka dapat dibedakan dari tikar, itu akan menjadi luar biasa secara umum).
Perbaikan "nuklir" lainnya dikaitkan dengan peningkatan antarmuka pengguna dan memiliki latar belakang sendiri. Sudah ada
mekanisme dalam proyek ini untuk waktu yang cukup lama yang memungkinkan Anda untuk menyandikan posisi saat ini dengan mengirimkannya melalui URL. Mempertimbangkan bahwa deskripsi dari semua status gim dalam format ini ditulis ke log, ini sangat membantu dalam debugging. Itu hanya pengguna yang tidak tahu apa-apa tentang log browser, ini tidak banyak berguna.
Tidak, tidak, ini tidak semuanya baik!Ada sejumlah game, gameplaynya terdiri dari banyak (mungkin heterogen) tahap. Sebagai contoh, Anda dapat mengutip game populer 2008 -
Kamisado . Setiap tahap permainan ini (sebelum melewati salah satu angka ke horisontal terakhir) relatif singkat, tetapi setelah selesai, permainan berlanjut. Para pemain, sesuai dengan aturan yang disepakati, mengatur ulang potongan mereka di baris pertama dan lagi-lagi mencoba mencapai horizontal terakhir sebelum lawan (sosok yang membawa kemenangan di tahap sebelumnya menerima kemampuan baru).
Aspek permainan inilah yang diotomatisasi opsi "
tingkat progresif ", yang secara otomatis pindah ke tahap permainan selanjutnya ketika salah satu pemain menang. Dan karena pengaturan awal angka-angka berbeda dari satu tahap ke tahap lainnya, itu dihitung oleh modul
pengaturan umum dan diteruskan ke tahap berikutnya dari permainan melalui
URL .
Bersamaan dengan kesempatan ini, ada jalan lain, yang memungkinkan Anda melakukan diversifikasi pengaturan awal angka. Opsi "
selector " memungkinkan Anda untuk menyandikan beberapa pengaturan awal (dan bahkan konfigurasi papan) dalam satu
file JS . Refresh beranda
Reversi Anda dan Anda akan mengerti apa yang saya maksud.
Plug-in baru dirancang untuk menyelesaikan masalah. Secara struktural, ini adalah pohon biasa di mana semua status permainan yang ditampilkan dalam sesi permainan disimpan (dan karena pohon ini, di masa depan, seluruh sejarah permainan dapat diunggah ke file
SGF ). Pengguna memiliki kemampuan untuk "membalik" keadaan ini menggunakan tombol-tombol yang muncul di bagian atas layar.
Ini benar-benar nyaman, tetapi Anda bisa mendapatkan lebih banyak manfaat dari dua panah di bagian atas. Inilah yang dilakukan oleh opsi "
mode penasihat ". Jika pengguna berpikir lebih lama dari waktu yang ditentukan, bot yang ia mainkan, menghitung arahnya dan menempatkan status permainan baru di "sesi-manajer". Langkah yang diusulkan dapat diterima hanya dengan menekan tombol "maju". Dan jika Anda tidak suka bergerak, Anda selalu dapat mengembalikannya.
Banyak kegembiraan, dalam proses pengembangan, membawa suara (sepertinya, yang jauh lebih mudah).
Implementasi pertama terlalu naif. Saya tidak tahu apa hubungannya, tetapi di suatu tempat di tengah permainan, suara berhenti bermain tanpa ada pesan di log. Ini memanifestasikan dirinya di semua browser yang saya miliki, sampai saya mulai menembolok objek Suara yang dibuat dalam memori. Tapi kemudian masalah lain datang.
Jika suara dimainkan untuk waktu yang lama, dan bot
berpikir cukup cepat (seperti dalam
umpan , misalnya), maka suara gerakannya hanya "ditelan", yang tampak sangat tidak menyenangkan. Di sini saya harus dukun untuk waktu yang lama dan berakhir dengan
tongkat ketiak . Dengan set flag "clonable", saya masih membuat beberapa instance Sound, satu untuk setiap pemain (bahkan jika mereka kehilangan suara yang sama). Tentu saja, ini tidak membantu dengan cara apa pun dengan IE, yang menolak (jelas karena alasan agama) untuk menangani file "wav" dan "ogg". Browser ini, bagi saya, bekerja secara diam-diam!
Kalau tidak, pembebasannya tidak terjadi.
Halme dan
mankalam terdiri dari beberapa
permainan catur ,
serta banyak variasi Shogi yang saya baca dalam terbitan berikutnya tentang
Il fogliaccio degli astratti dan
permainan sederhana lainnya dari kawan-kawan Cina. Oh ya, ada satu hal lagi:
Hanya sebuah simulator kecil dari memori jangka pendek. Hal ini diperlukan untuk membuka pasangan yang sama (ratu dengan ratu, raja dengan raja, dll) dengan warna yang sama. Poin diberikan untuk ini dan untuk semua hal tentang semua 200 klik. Karena bonus diberikan pada poin (untuk berganti setelan merah dan hitam, misalnya), Anda dapat bersaing dengan teman-teman tentang siapa yang memiliki memori lebih baik. Lakukan itu!
Dan semua Tahun Baru Selamat!