Anda adalah titik giat yang ingin meningkatkan lahan di bawah kendalinya. Ini cukup sederhana - bepergian ke luar tanah Anda saat ini dan kembali ke tanah Anda dan semua yang ada di dalam lingkaran itu sekarang dimiliki oleh Anda. Tapi ada yang menangkap. Jika beberapa titik lain entah bagaimana menemukan lingkaran Anda dan melewatinya, Anda mati.
Jika Anda belum mencobanya, buka Splix.io dan coba permainan. Gunakan tombol panah untuk mengontrol gerakan Anda.
GIF
Kredit: http://splix.io/
Spesifik
Semua pemain mulai dari posisi acak di papan 200x200. (Saya berhak mengubah ini :). Anda akan memiliki sejumlah gerakan tertentu untuk mengumpulkan poin sebanyak mungkin. Poin dihitung dengan:
- Jumlah pemain yang kamu bunuh 300 kali
- Jumlah tanah yang Anda miliki di akhir putaran
Ini memunculkan poin bahwa orang lain dapat mencuri tanah Anda. Jika mereka memulai loop yang memotong sebagian tanah Anda, mereka dapat mengklaimnya. Jika Anda mati selama putaran, Anda kehilangan semua poin untuk putaran itu.
Setiap babak memiliki kelompok pemain yang dipilih secara acak (maks. 5 pemain unik) (dapat berubah). Setiap pemain berpartisipasi dalam jumlah putaran yang sama. Skor akhir bot Anda ditentukan oleh skor rata-rata per-pertandingannya. Setiap game terdiri dari 2000 putaran (juga dapat berubah). Semua bot melakukan gerakan pada saat bersamaan.
Kasus Kematian
Kepala Butt
Kedua pemain mati ketika mereka saling berhadapan. Ini masih benar bahkan ketika kedua pemain berada di ujung ruang mereka.
Namun, ketika hanya satu pemain di negaranya, pemain lainnya mati.
Garis Salib
Dalam hal ini, hanya pemain ungu yang mati.
Anda tidak dapat melewati batas Anda sendiri.
Keluar dari papan
Jika seorang pemain mencoba untuk keluar dari papan, dia akan mati dan kehilangan semua poin.
Menangkap area
Seorang pemain akan menangkap area ketika dia memiliki jejak dan dia memasuki tanahnya sendiri lagi.
Merah mengisi di antara dua garis merah. Satu-satunya kasus di mana pemain tidak mengisi adalah ketika pemain lain berada di dalam loop. Untuk lebih jelasnya, ini hanya berlaku ketika pemain lain sendiri berada di loop, bukan hanya tanah yang dimiliki olehnya. Seorang pemain dapat merebut tanah dari orang lain. Jika seorang pemain tidak dapat mengisi area yang dikelilingi oleh jejaknya, jejak dikonversi langsung ke tanah normal. Jika pemain di dalam loop pemain lain mati, area dalam loop itu terisi. Setiap kali pemain meninggal, papan diperiksa ulang untuk area yang dapat diisi.
Detail pengontrol
Pengontrolnya ada di sini . Ini sangat mirip dengan game asli, tetapi perubahan kecil telah dibuat untuk membuat ini lebih cocok untuk KotH dan karena alasan teknis. Hal ini dibangun dengan @NathanMerrill 's KotHComm perpustakaan , dan dengan bantuan besar dari @NathanMerrill juga. Tolong beri tahu saya jika ada bug yang Anda temukan di controller di chat room . Agar konsisten dengan KotHComm, saya telah menggunakan koleksi Eclipse di seluruh pengontrol, tetapi bot dapat ditulis hanya dengan menggunakan perpustakaan Koleksi Java.
Semuanya dikemas dalam uberjar di halaman rilis github . Untuk menggunakannya, unduh dan lampirkan ke proyek Anda sehingga Anda dapat menggunakannya untuk auto-compleat (instruksi untuk IntelliJ , Eclipse ). Untuk menguji kiriman Anda, Anda menjalankan toples java -jar SplixKoTH-all.jar -d path\to\submissions\folder
. Pastikan path\to\submissions\folder
subfoler diberi nama java
, dan letakkan semua file Anda di sana. Jangan menggunakan nama paket di bot Anda (meskipun mungkin dengan KotHComm, itu hanya sedikit lebih banyak masalah). Untuk melihat semua opsi, gunakan --help
. Untuk memuat semua bot, gunakan --question-id 126815
.
Menulis bot
Untuk mulai menulis bot, Anda harus memperluas SplixPlayer
.
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- Di sinilah Anda memutuskan gerakan mana yang Anda inginkan bot Anda lakukan. Tidak boleh kembali nol.
HiddenPlayer getThisHidden()
- Dapatkan
HiddenPlayer
versithis
. Berguna untuk membandingkan bot Anda ke papan tulis.
- Dapatkan
enum Direction
- Nilai-nilai
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- Dapatkan
Direction
yang akan Anda dapatkan jika Anda belok kiri.
- Dapatkan
Direction RightTurn()
- Dapatkan
Direction
yang akan Anda dapatkan jika Anda belok ke kanan.
- Dapatkan
ReadOnlyBoard
Ini adalah kelas tempat Anda mengakses papan tulis. Anda bisa mendapatkan tampilan lokal (20x20) dari papan dengan posisi pemain ditampilkan, atau tampilan global (seluruh papan) dengan hanya informasi tentang siapa yang memiliki dan mengklaim posisi di papan tulis. Di sinilah Anda mendapatkan posisi Anda.
SquareRegion getBounds()
- Ambil kembali ukuran papan.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- Dapatkan peta global dewan.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- Sama seperti
getGlobal()
, kecuali bahwa itu terbatas pada area 20x20 di sekitar pemain Anda, dan itu menunjukkan posisi pemain.
- Sama seperti
Point2D getPosition(SplixPlayer me)
- Dapatkan posisi pemain Anda. Gunakan sebagai
board.getPosition(this)
.
- Dapatkan posisi pemain Anda. Gunakan sebagai
Point2D getSelfPosition(ReadOnlyBoard)
- Dapatkan posisi Anda di papan tulis. Pemakaian:
Point2D mypos = getSelfPosition(board)
- Dapatkan posisi Anda di papan tulis. Pemakaian:
ReadOnlyGame
ReadOnlyGame
hanya menyediakan akses ke jumlah belokan yang tersisa dalam game melalui int getRemainingIterations()
.
ReadOnlySplixPoint
HiddenPlayer getClaimer()
- Dapatkan
HiddenPlayer
versi siapa yang mengklaim poin - mengklaim = jejak.
- Dapatkan
HiddenPlayer getOwner()
- Dapatkan siapa yang memiliki poin.
HiddenPlayer getWhosOnSpot()
- Jika pemain diposisikan pada titik ini, kembalikan versi tersembunyi itu. Hanya bekerja di
getLocal()
.
- Jika pemain diposisikan pada titik ini, kembalikan versi tersembunyi itu. Hanya bekerja di
Point2D
Berbeda dengan kelas-kelas lain di sini, Point2D
terdapat di perpustakaan KotHComm.com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
- Bungkus
x
nilai agar berada dalam kisaranmaxX
.
- Bungkus
Point2D wrapY(int maxY)
- Bungkus
y
nilai agar berada dalam kisaranmaxY
.
- Bungkus
int cartesianDistance(Point2D other)
- Ini berarti berapa banyak putaran yang diperlukan bagi pemain untuk berpindah dari titik a ke titik b.
Dukungan Clojure
Compiler Clojure dibundel dengan SplixKoTH-all.jar
, sehingga Anda dapat menggunakan Clojure untuk bot Anda! Rujuk ke saya random_bot
untuk melihat cara menggunakannya.
Melakukan debug bot
Pengontrol dilengkapi dengan debugger untuk membantu menguji strategi. Untuk memulainya, jalankan toples dengan --gui
opsi.
Untuk melampirkan debugger ke toples Anda, ikuti instruksi ini untuk IntelliJ, atau instruksi ini untuk Eclipse (versi Eclipse belum teruji).
Jika Anda menggunakan debugger dengan kode Anda, Anda dapat menggunakan ini untuk membantu memvisualisasikan apa yang dilihat oleh bot Anda. Tetapkan breakpoint di awal makeMove
bot Anda, dan pastikan itu hanya menjeda utas saat ini. Selanjutnya, klik tombol mulai pada UI dan lewati kode Anda.
Sekarang, untuk menyatukan semuanya:
Menjalankan bot
Untuk menjalankan bot Anda dengan orang lain, Anda perlu menjalankan jar pada halaman rilis. Ini daftar bendera:
--iterations
(-i
) <=int
(standar500
)- Tentukan jumlah game yang akan dijalankan.
--test-bot
(-t
) <=String
- Jalankan hanya game yang termasuk dalam bot.
--directory
(-d
) <= Path- Direktori tempat menjalankan kiriman. Gunakan ini untuk menjalankan bot Anda. Pastikan bot Anda berada dalam subfolder dari path yang dinamai
java
.
- Direktori tempat menjalankan kiriman. Gunakan ini untuk menjalankan bot Anda. Pastikan bot Anda berada dalam subfolder dari path yang dinamai
--question-id
(-q
) <=int
(hanya digunakan126815
)- Unduh dan kompilasi kiriman lainnya dari situs.
--random-seed
(-r
) <=int
(standar ke nomor acak)- Berikan benih kepada pelari sehingga bot yang menggunakan acak dapat memiliki hasil yang direproduksi.
--gui
(-g
)- Jalankan debugger ui alih-alih menjalankan turnamen. Paling cocok digunakan dengan
--test-bot
.
- Jalankan debugger ui alih-alih menjalankan turnamen. Paling cocok digunakan dengan
--multi-thread
(-m
) <=boolean
(standartrue
)- Jalankan turnamen dalam mode multi-utas. Ini memungkinkan hasil yang lebih cepat jika komputer Anda memiliki banyak inti.
--thread-count
(-c
) <=int
(standar4
)- Jumlah utas untuk dijalankan jika multi-utas diizinkan.
--help
(-h
)- Cetak pesan bantuan yang mirip dengan ini.
Untuk menjalankan semua pengiriman di halaman ini, gunakan java -jar SplixKoTH-all.jar -q 126815
.
Memformat pos Anda
Untuk memastikan bahwa pengontrol dapat mengunduh semua bot, Anda harus mengikuti format ini.
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
Juga, jangan gunakan deklarasi paket.
Papan angka
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
Harap beri tahu saya jika ada bagian dari aturan yang tidak jelas, atau jika Anda menemukan kesalahan di controller di chat room .
Selamat bersenang-senang!
sumber
Jawaban:
ImNotACoward, Java
Bot ini adalah ahli bertahan hidup
pengecut. Jika tidak ada musuh di dekatnya, ia mengklaim bagian dari tanah itu. Jika loop dari pemain lain dapat dijangkau dengan aman, diamenusuk pemain lain di belakangmelibatkan pemain lain dalam duel. Jika pemain lain tidak dapat diserang dengan aman, iamelarikan dirimelakukan retret strategis ke negerinya sendiri.sumber
TrapBot, Java
Ini mungkin bot yang paling sederhana. Yang dilakukannya hanyalah menelusuri tepi papan, menggandakan diri untuk mengurangi risiko terbunuh.
sumber
random_bot, Clojure
Ini adalah RandomBot , tapi saya harus tetap berpegang pada konvensi penamaan, dan beberapa masalah mencegah saya menggunakan tanda hubung dalam nama, jadi garis bawah berkuasa! The
make-move
fn kembali vec dengan item pertama adalahDirection
Anda ingin pindah, dan yang kedua menjadi negara yang ingin diteruskan kembali kepada Anda pada giliran berikutnya. Jangan gunakan atom eksternal apa pun, karena kode ini dapat menjalankan beberapa game secara paralel.sumber
HunterBot, Jawa
Salah satu bot paling dasar. Itu mencari papan untuk tempat untuk membunuh orang lain, dan itu akan mengikuti jalan sesingkat mungkin untuk sampai ke posisi membunuh. Jika berada di luar wilayahnya, ia akan membuat gerakan acak hingga memiliki celah lain untuk membunuh pemain lain. Ia memiliki beberapa logika untuk mencegahnya berlari sendiri, dan ketika semua pemain lain mati, ia akan kembali ke rumahnya. Setelah di rumah itu hanya berjalan di kotak kecil.
sumber