
Sudah menjadi tradisi bahwa setelah kompetisi pemrograman olahraga, pemenang atau hanya pemain memposting artikel tentang Habré untuk mengatakan betapa hebatnya berpartisipasi dalam kompetisi dan sebagai pilihan untuk menang di dalamnya. Tentu saja, banyak yang dapat diperoleh dari artikelnya untuk kompetisi di masa depan.
Tapi saya pikir ada beberapa artikel tentang berpartisipasi dalam kompetisi saat ini pada tahap pengujian beta, jelas bahwa Anda tidak dapat mempublikasikan kode keputusan, masih belum diketahui seberapa baik keputusan ini dan banyak yang masih belum diketahui, karena sekarang, ini hanyalah awal dari turnamen, tetapi itulah daya tariknya. Penulis memberi pembaca kesempatan untuk mampir di kereta berangkat dan menikmati perjalanan Tahun Baru ke dunia strategi permainan.
Pertama, terima kasih telah membuka artikel, saya ingin berbagi rahasia segera: ini akan menjadi serangkaian artikel di mana saya berharap untuk menyentuh algoritma genetika dan jaringan saraf. Sementara itu, sebagaimana telah ditulis di atas, selamat datang di perjalanan ke CodeBall Piala AI Rusia.
Tautan ke halaman mulai cepat dari kejuaraan.Pada tautan di atas, pembaca akan dapat menemukan aturan kejuaraan, aturan permainan itu sendiri dan bagian utama dari peralatan matematika yang diperlukan untuk membuat bot. Juga di halaman mulai cepat ada contoh bot sudah ditulis untuk berbagai bahasa pemrograman, yang sangat memudahkan awal.
Mari kita mulai dengan judul kejuaraan CodeBall yang sederhana.
Kombinasi yang bagus dari kode kata dan bola, hampir sepak bola. Aturan dan logika permainan juga mirip dengan sepakbola, tetapi dengan setiap putaran mereka menjadi lebih rumit / jadi kami akan mengambil kondisi awal pertandingan sebagai basis.
Inti dari permainan, sebagaimana dinyatakan dalam lagu baru-baru ini: pemain harus mencetak gol, dan kiper harus memukul bola.
Bidang bermain skematis:

Harap dicatat bahwa bot bergerak di bidang lantai arena XZ, sumbu Y bertanggung jawab atas ketinggian objek game.
Juga secara skematis objek permainan (bola dan bot (penyelenggara menyebutnya robot))

Sekarang beberapa teks untuk mendukung gambar. Lapangan bermain adalah ruang tertutup tiga dimensi, baik bola maupun bot tidak bisa melampauinya. Di ruang ini, ada dua area "gerbang" ketika memukul di mana bola dianggap dicetak oleh salah satu pemain. Agar tujuan dihitung, bola harus benar-benar di belakang garis gawang (ditunjukkan oleh garis putus-putus pada gambar).
Untuk menyederhanakan perhitungan tumbukan (tumbukan) benda-benda permainan (arena, bola, bot), bot dan bola dianggap bola ideal (bola), yang digambarkan dengan nilai-nilai berikut: jari-jari bola, koordinat pusat bola, massa, kecepatan. Arena ini juga dijelaskan oleh primitif matematika ideal, sehingga perhitungan tumbukan dihilangkan tanpa partisipasi dari poligon, yang sangat menyederhanakan tugas. Jika Anda menelusuri aturan kejuaraan sampai akhir, maka pembaca akan menemukan program pada kode semu, yang hanya bertanggung jawab untuk perhitungan di atas. Pseudo-code ini, setelah sedikit upaya fisik, diterjemahkan ke dalam bahasa pemrograman pilihan Anda dan cukup bisa diterapkan. Tetapi lebih lanjut tentang itu nanti.
Beberapa kata tentang fisika dunia game. Untuk memberikan kredibilitas terhadap apa yang terjadi di arena, gravitasi diperkenalkan, yaitu, bot dan bola terus-menerus dipengaruhi oleh gaya gravitasi yang diarahkan ke bawah relatif terhadap lantai arena. Bentuk lain dari interaksi fisik seperti gesekan atau kecepatan sudut (rotasi) objek diabaikan oleh penyelenggara demi kesederhanaan deskripsi dunia fisik. Ketika mengenai dinding arena, bola kehilangan sebagian energinya, tetapi ini tidak terlalu menyulitkan dunia dan dapat dimengerti dari luar bahwa tidak ada cara untuk membuat mesin gerak abadi dalam bentuk bola.
Untuk membuat dunia tampak lebih masuk akal, skema perhitungan dengan Ticks dan Mikrotiks telah diterapkan. Dalam
artikel pertamanya, penulis membahas secara rinci konsep waktu bermain jati. Dalam kompetisi ini, kita dapat melihat mesin fisik dalam kode sumber, seperti katanya, itu akan berguna bagi kita di masa depan, dan menemukan bahwa untuk para pemain ada Tics, dan di dalam mesin semuanya terjadi di Mikrotik, secara default 100 Mikrotik dalam satu centang, yang memungkinkan untuk lebih akurat menggambarkan benturan benda dan menghindari hal-hal yang tidak menyenangkan seperti kegagalan benda di luar arena atau kegagalan benda menjadi satu sama lain yang menyebabkan kesalahan dalam interaksi di antara mereka.

Kami memilah-milah dunia (arena) dan waktu permainan, mari kita lihat objek permainan: bot dan bola. Bola yang telah kami temukan dari aturan kompetisi adalah bola. Singkatnya, bot adalah bola dari jari-jari yang lebih kecil dan massa yang lebih besar, yang dapat diberikan perintah: menunjukkan kecepatan yang diinginkan (ini adalah vektor tiga dimensi yang mengandung arah dan panjang atau besarnya kecepatan) dan kekuatan lompatan jika lompatan saat ini disarankan dari sudut pandang logika permainan. Pada tahap kompetisi ini, sebuah penyederhanaan telah diperkenalkan bahwa jika bot dalam penerbangan (tidak menyentuh dinding arena), maka ia tidak memiliki kemampuan untuk mengeksekusi perintah untuk mengubah kecepatan.
Kami beralih ke yang paling sulit atau sebaliknya sederhana, itu semua tergantung pada pengalaman pembaca dalam bekerja dengan vektor tiga dimensi. Deskripsi lokasi objek game. Gambar dukungan

Mari kita pergi ke botani.
Pada setiap centang game, strategi Anda akan menerima objek berikut:
Bola:
class Ball: x: Float
dan daftar bot, dengan data untuk setiap bot:
class Robot: id: Int player_id: Int is_teammate: Bool
Anda dapat segera melihat bahwa tidak nyaman untuk bekerja dengan data ini, diinginkan untuk memperkenalkan kelas (objek) vektor 3D dan vektor kelas 2D. Banyak yang akan tergantung pada bahasa pemrograman pilihan Anda. Biasanya kelas-kelas ini sudah ditulis dan mudah ditemukan di Internet untuk bahasa pemrograman yang diinginkan. Penulis sekarang menulis bot di c ++, tetapi akan mencoba membatasi dirinya untuk pseudo-code. Jika Anda memperkenalkan kelas vektor penuh, operasi penjumlahan, pengurangan, penggandaan, normalisasi, dan operasi vektor lainnya akan tetap berada di dalam kelas, yang akan sangat menyederhanakan pekerjaan pada strategi.
Ada juga kelas pemain yang menunjukkan bot mana dari daftar milik Anda, yang mana:
class Player: id: Int me: Bool
Setelah mengirimkan data tentang dunia game ke input strategi Anda, mesin game memberi Anda kontrol dan memulai penghitung waktu untuk perhitungan, waktu untuk perhitungan terbatas, rata-rata, sekitar 20 milidetik untuk semua tindakan di dalam centang. Ada kecurigaan bahwa saat ini juga termasuk waktu untuk deserialisasi data yang diterima dan
cerita bersambung data yang dikirim oleh strategi Anda ke server. Tetapi karena jumlah bot adalah 4 (lawan 2 dan 2 Anda, maka di babak final jumlah total bot akan meningkat menjadi 6), waktu untuk operasi ini dapat diabaikan.
Waktunya telah tiba bagi tim.
Sebagai contoh, kami ingin memberi bot perintah untuk bergerak ke arah bola. Untuk menemukan vektor yang diinginkan dari arah kecepatan, perlu untuk mengurangi posisi bot dari posisi bola, kita mendapatkan vektor arah ke bola, maka dapat dinormalisasi dan dikalikan dengan kecepatan maksimum bot dari konstanta dunia. Dalam gambar lebih banyak

Mungkin pembaca memperhatikan pada slide bahwa perhitungan dapat dilakukan untuk vektor 3D dan vektor 2D. Jika kita memperhitungkan fakta bahwa bot menghabiskan lebih banyak waktu di bidang lantai arena, maka menyederhanakan perhitungan menjadi dua koordinat tidak akan memengaruhi keakuratan perhitungan untuk mencegat bola. Tentu saja, Anda tidak boleh lupa tentang ketinggian bola, tetapi dengan mempertimbangkan gravitasi, cepat atau lambat akan tenggelam ke bot.
Bot melompat adalah penambahan kecepatan vertikal (kecepatan vertikal), arah lompatan bot akan bertepatan dengan arah kecepatan bot saat ini dengan penambahan komponen di sepanjang sumbu Y.
Jika kita menambahkan logika pergerakan yang lebih kompleks ke kata-kata di atas, maka kita bisa mendapatkan perilaku bot sebagai berikut:
Sekarang ada kotak pasir
di situs tempat Anda bisa menonton pertandingan, tetapi tidak ada yang terasa jika Anda menulis strategi dan mengikuti gimnya. Secara eksperimental ditetapkan bahwa bahkan strategi paling sederhana yang terdiri dari beberapa puluh baris kode dapat bermain dengan cukup baik.
Dari bentuk-bentuk sederhana strategi yang muncul di benak, strategi mengalokasikan satu bot untuk melindungi gerbang, bot kedua membuat penyerang. Tugas utama penyerang adalah mengejar bola dan, jika berhasil, serang ke arah gawang lawan. Bermain bot sebagai penjaga gawang biasanya terbatas dalam pergerakannya di sekitar lapangan, dan terutama beroperasi di area gawang. Semua hal ini dengan mudah dijelaskan menggunakan konstruksi if-else dari bahasa yang Anda pilih. Bagaimanapun, pembaca saya harus datang dengan dan membuat strategi pada tahap ini. Menurut ketentuan kompetisi, Anda tidak dapat mempublikasikan kode sumber strategi. Tetapi saya pikir tidak dilarang untuk membahas pendekatan untuk merancang strategi.
Sepertinya saya bahwa penyelenggara kontes memilih topik yang menarik untuk turnamen, satu-satunya situs agak lambat, tapi saya harap ini akan segera diperbaiki.
beberapa momen permainan yang indah dari peserta kejuaraan:
Saya menunggu umpan balik dalam komentar mengenai artikel tersebut, apa yang harus dipikirkan lebih detail.
Pada artikel selanjutnya saya akan mencoba menjelaskan metode untuk memprediksi perilaku bola pada waktunya untuk permainan bot yang lebih bermakna dalam strategi Anda.
Sementara itu, selamat untuk Tahun Baru 2019 mendatang!
Untuk dilanjutkan.