aBOTcalypse
Desain bot untuk bersaing dalam tantangan King-of-the-Hill! Berikut ini ulangan dari game bot default.
Papan permainan ini 2D, seperti gim video gulir samping (tetapi tanpa gulir).
Bot yang valid harus menerima representasi string multiline dari wilayah papan yang dapat dilihatnya, dan menampilkan gerakan untuk bot tersebut.
Mekanika
Ini adalah game bertahan hidup. Kiamat telah tiba, dan hanya bot (dan persediaan batu yang tak ada habisnya disimpan di hammerspace ) tetap. Setiap bot diberi lokasi awal yang acak, pada ketinggian 0. Dalam gerakan tertentu, bot dapat beristirahat, bergerak, melempar batu, atau menjatuhkan batu. Bot dapat berbagi ruang dengan batu yang tidak bergerak, tetapi bot yang bertabrakan dengan bot lain atau meteor terbunuh, seperti bot yang terkena lemparan batu.
- Gravitasi: bot dan batu harus diletakkan di atas lantai papan atau di atas batu lain; bersandar pada sesuatu yang lain (udara, meteor, bot, dll.) meninggalkan satu "tidak didukung". Bot atau batu yang tidak didukung akan jatuh sampai mereka didukung; jatuhnya lebih dari satu ruang akan membunuh bot, dan bot di bawah batu atau bot yang jatuh juga terbunuh. Ini berarti bahwa mencoba untuk memindahkan atau drop up hanya akan berfungsi jika bot saat ini berbagi ruang dengan batu (jika tidak bot / batu akan jatuh kembali ke bawah 1 ruang). Sebuah ruang dapat menjadi "tidak didukung" jika batu di bawahnya jatuh atau dihancurkan oleh meteor atau proyektil .
- Meteor: Setiap belokan meteor memasuki papan dari atas. Meteor memiliki kecepatan magnitudo 2, dengan sudut acak yang dipilih secara seragam dalam kisaran [-180,0], dan posisi awal x acak. Meteor jatuh dalam garis lurus sepanjang lintasan yang diberikan sampai mereka menabrak sesuatu, pada titik mana mereka menghilang. Perhatikan bahwa pembulatan dalam gerakan meteor mengarah ke 0 (sesuai python
int()
). - Proyektil: Bot dapat memilih untuk melempar batu sejauh apa pun hingga ketinggiannya. Sebuah batu yang dilemparkan bergerak dalam garis lurus hingga menyentuh sesuatu (semua dalam satu belokan, tidak seperti meteor; batu yang dilemparkan tidak muncul di papan), pada kemiringan
- elevation / max distance
. Perhatikan bahwa batu yang dilempar memulai lintasannya di x + - 1 persegi. Misalnya, jika bot berada pada ketinggian 5, dan melempar ke kiri sejauh 1, batu akan mulai pada(x-1,5)
dan berakhir pada(x-2,0)
. Tabrakan hanya diperiksa dalam langkah-langkahdx=1
, dandy
dibulatkan ke 0 (sesuai pythonint()
).
Memasukkan
Setiap bot dapat melihat 20 piksel persegi di setiap arah (jarak Chebyshev = 20), hingga batas papan. Ada 8 karakter berbeda di setiap string input:
'#'
(batas papan)'.'
(udara)'@
'(meteor)'&'
(batu)'e'
/'s'
(bot musuh, atau dirinya sendiri)'E'
/'S'
(bot musuh, atau dirinya sendiri, berbagi ruang dengan batu)
Berikut ini contoh input (akan ada jeda baris \n
):
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............@...............#
.....................E........#
.....................&........#
.....................&........#
.....................&........#
.....................&........#
...........@.........&........#
....................s&........#
###############################
Keluaran
Ada empat tindakan yang bisa dilakukan setiap bot.
rest
(secara harfiah duduk dan tidak melakukan apa-apa)move <direction>
bergerak bot satu ruang di salah satu dari empat arah,up
,down
,left
, atauright
. Gerakan menyebabkan bot jatuh jika ruang baru tidak didukung oleh lantai atau batu (fall > 1 = bot.kill()
).drop <direction>
menempatkan ("menjatuhkan") batu ke arah yang ditunjukkan. Menjatuhkan batu ke atas (yaitu, menempatkan batu di bujur sangkar[bot_x, bot_y+1]
) atau ke samping menyebabkannya jatuh sampai tertopang (mungkin jatuh ke bot selamadrop up
).drop down
menempatkan batu di posisi yang sama dengan bot, jika belum ada batu di sana.throw <direction> <distance>
melempar batu sesuai mekanika "proyektil" di atas, dengan jarak maks yang ditunjukkan. Max jarak tidak relevan untuk melempar ke atas atau ke bawah - proyektil bertabrakan dengan kotak di bawah (untukdown
), atau upaya untuk bertabrakan dengan kotak di atas (untukup
) dan kemudian dengan kotak bot jika tidak mengenai apa pun (membunuh bot) .
Bot dalam kontes harus menampilkan string skalar dengan aksinya setelah menerima string input.
Antarmuka
Bot harus terdiri dari satu program yang dapat dipanggil melalui python 2 subprocess
. Perintah apa pun harus ditunjukkan, dan akan disimpan dalam file bernama command.txt
; sebelum permainan dimulai, pengontrol akan mengeksekusi setiap perintahcommand.txt
berurutan, dan kemudian perintah terakhir akan digunakan untuk meneruskan input ke bot sejak saat itu.
Bot mungkin memiliki satu file penyimpanan yang disebut storage.txt
di foldernya; bot "Default Thrower" menunjukkan contoh implementasi, menggunakan json untuk menyimpan kondisinya selama berbagai belokan. Selain itu, jangan ragu untuk menyertakan hasil debugging dalam penulisan sajaerrlog.txt
, yang akan saya sampaikan seandainya bot Anda gagal selama proses. Saya akan memastikan untuk menjalankan beberapa tes dengan setiap bot, untuk mencoba dan menemukan kesalahan sebelumnya.
Mencetak gol
Skor total bot sama dengan jumlah putaran yang bertahan, diakumulasikan pada X game dengan panjang maksimum Y. Saat ini, X,Y = 10, 500
,; jika bot bertahan lama, saya akan meningkatkan Y, dan jika mereka bertahan lama, saya akan meningkatkan X.
Kode pengontrol ditemukan di controller.py ; banyak terima kasih kepada @Nathan Merrill untuk koth DDOS-nya dari mana saya mengadaptasi kode Communicator.
&&&\n&S&\n###
? Mereka akan kebal terhadap meteor jatuh.