Tetangga Anda yang baik hati, Dokter Pohon, baru saja memberi Anda tiga makhluk ajaib yang disebut Codémon. Ada turnamen pertempuran di kota Colorville terdekat. Apakah Anda yang terbaik, seperti tidak ada yang pernah ada?
Gambaran
Ini adalah turnamen pertempuran. Setiap pemain mengendalikan tim yang terdiri dari tiga monster, dan tujuannya adalah untuk melumpuhkan (membunuh) tim lainnya. Ada 100 ronde, dengan poin diberikan untuk kemenangan dan dasi. Tim dengan poin terbanyak menang!
Monster
Codémon adalah makhluk kecil yang rumit. Ada lima jenis (elemen) untuk dipilih, tiga statistik, dan tiga slot gerak di masing-masing.
Jenis
Setiap Codémon ditugaskan satu jenis. Lima jenis itu adalah Normal, Psikis, Api, Air, dan Rumput. Masing-masing memiliki kekuatan dan kelemahannya. Kerusakan didasarkan pada grafik berikut:
Angka-angka adalah pengganda kerusakan. Misalnya, Fire attacking Water memiliki 0,5 modifier (setengah kerusakan), sedangkan Fire attacking Grass dua kali lipat (2).
Statistik
Setiap monster memiliki tiga statistik yang menentukan kemampuan bertarungnya. Serangan meningkatkan kerusakan yang terjadi. Pertahanan menurunkan kerusakan yang terjadi. Kecepatan memungkinkannya bergerak di depan mereka yang memiliki Kecepatan lebih rendah.
Setiap monster memiliki nilai awal 50 untuk setiap stat, dan maksimum 100. Saat Anda membuat monster, Anda akan dapat menetapkan 80 poin stat tambahan (masing-masing). Ingatlah bahwa tidak ada stat individual yang dapat melebihi 100. Jadi, Anda dapat memiliki distribusi 100/80/50, 90/80/60, atau 65/65/100, tetapi 120/50/60 ilegal. Setiap tim dengan statistik ilegal didiskualifikasi. Anda tidak diharuskan untuk menggunakan semua 80 poin, tetapi Anda mungkin tidak harus pergi dengan minimum 50/50/50.
Anda juga dapat mempertimbangkan HP sebagai stat, tetapi setiap Codémon memiliki 100 HP yang tidak dapat dimodifikasi. Ketika HP turun ke nol, mereka tidak dapat melanjutkan pertempuran. HP diisi ulang hingga 100 sebelum setiap pertempuran.
Bergerak
Setiap monster tahu tiga gerakan pertempuran. Tiga yang dipilih harus berbeda, jadi tidak ada Punch / Punch / Punch.
Ada 15 gerakan, tiga dari setiap jenis. Setiap jenis memiliki serangan langsung, serangan lebih lemah dengan efek, dan efek bergerak tunggal.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
mengacu pada jenis langkah. power
adalah kekuatannya yang mencolok. uses
menunjukkan berapa kali dapat digunakan per pertempuran ( -
tidak terbatas). usable
menunjukkan jenis apa yang dapat digunakan oleh (misalnya, Punch tidak dapat diberikan ke jenis Psikis, karena tidak ada P
). effect
menunjukkan efek apa yang dimiliki oleh gerakan. Ada kemungkinan 75% dari setiap efek bekerja, kecuali Heal, yang selalu berhasil.
Untuk efek yang mengubah statistik monster, efek dapat ditumpuk . Misalnya, menggunakan Weaken dua kali dapat menurunkan serangan lawan menjadi 0,64 efektivitas. Efek yang tidak mengubah statistik monster (Sleep, Burn, dll) tidak menumpuk .
Tidur membuat lawan tertidur, dengan kemungkinan 60% terbangun di awal setiap belokan. Tidak ada tindakan yang akan dilakukan oleh monster yang tidur.
Membakar merusak 10 HP lawan di akhir setiap belokan saat aktif . Racun bekerja dengan cara yang sama, tetapi mengambil jumlah yang meningkat setiap belokan. Pada belokan pertama, ini 5, dan mendapat 5 setiap belokan sesudahnya. Jadi, pada giliran keempat, itu akan merusak untuk 20. Ini adalah kerusakan datar, tidak terpengaruh oleh tipe monster atau dikenakan bonus.
Kebingungan dapat membuat monster menyerang dirinya sendiri daripada melakukan apa yang diperintahkan untuk dilakukan. Serangan ini memiliki kekuatan 10, dan memiliki peluang 30% terjadi pada giliran yang diberikan.
Agar jelas, efek bertahan hingga akhir pertempuran (kecuali Tidur, seperti disebutkan di atas).
Bergerak juga menerima 20% peningkatan kekuatan jika digunakan oleh monster dari tipe yang sesuai. Misalnya, monster Grass menggunakan Vine ditingkatkan, saat menggunakan Punch dia tidak.
Statistik Rahasia
Statistik dan tipe (tetapi tidak bergerak) dari setiap monster adalah pengetahuan umum. Lawan Anda akan dapat melihat apa yang mereka lawan, untuk memilih tindakan terbaik. Namun, ada juga bonus yang tersedia yang disembunyikan.
Khususnya, setelah setiap dua pertempuran, Anda akan diberikan satu poin status "bonus" untuk setiap monster di tim Anda. Poin diberikan kepada semua monster, hidup atau mati, pemenang atau pecundang. Anda dapat menetapkan ini ke salah satu dari tiga statistik yang Anda pilih. Anda tidak dapat menumpuknya di satu monster; setiap monster mendapat satu setiap kali. Poin-poin ini kebal terhadap batas 100. Karena akan ada 100 ronde pertempuran, ini berarti Anda bisa mendapatkan satu stat hingga 149 jika Anda membagikan semua bonus Anda untuk itu. Sekali lagi, lawan hanya akan melihat statistik "basis" Anda, jadi semakin jauh ke dalam turnamen Anda, semakin jauh pengetahuan mereka menyimpang dari kebenaran.
Pertarungan
Pertempuran terjadi antara tim tiga, dengan satu aktif di masing-masing tim sekaligus. Pada awalnya, Anda akan ditunjukkan tim lawan dan diminta untuk memilih monster mana yang akan menjadi pemain "aktif" pertama Anda.
Setelah itu, belokan dilakukan dengan langkah-langkah berikut:
- Switch: Switch monster wajib berlangsung (jika ada)
- Pilih aksi pertempuran
- Switch: Setiap switch monster opsional (dipilih sebagai aksi pertempuran) berlangsung
- Pemeriksaan Tidur: Peluang untuk bangun dari tidur
- Serangan 1: Jika mampu, monster yang lebih cepat menggunakan gerakan yang dipilihnya
- Serangan 2: Jika bisa, monster lain menggunakan gerakan yang dipilihnya
- Efek kerusakan: Berikan kerusakan luka bakar / racun pada monster hidup
"Speedier" berarti monster dengan kecepatan lebih tinggi. Jika kedua statistik kecepatan sama, itu dipilih oleh PRNG coin flip setiap belokan.
Di akhir setiap giliran di mana monster aktif Anda mati, Anda akan diminta untuk memilih yang baru aktif. Anda juga dapat memilih untuk mengganti monster aktif sebagai gerakan Anda untuk setiap belokan (asalkan Anda memiliki lebih dari satu yang hidup). Sekali lagi, jika Anda beralih sebagai gerakan Anda, Anda tidak akan membuat gerakan pertempuran yang berubah.
Monster tidak "diproses" saat tidak aktif. Ini berarti mereka tidak mengambil luka bakar / kerusakan racun, penghitung racun tidak akan menumpuk, tidak bangun dari tidur, dll. Tidak ada efek yang dihapus atau diubah ketika beralih . Ini bukan game pertarungan monster lainnya . Jika Anda beralih dengan serangan yang dibesarkan dan dibakar, mereka akan tetap ada ketika Anda kembali.
Efek damage terjadi baik Anda membunuh lawan aktif Anda atau tidak. Dengan cara ini, anggota dari kedua tim dapat mati dalam satu giliran.
Ketika satu tim kehabisan monster yang dapat digunakan, mereka kalah. Jika kedua tim kehabisan pada gilirannya yang sama, itu seri. Jika pertempuran berlangsung selama 1000 putaran, itu seri.
Formula untuk menentukan kerusakan adalah:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
dan effDefense
adalah efektif statistik untuk monster. Serangan efektif diperoleh dengan menambahkan Serangan dan Serangan Bonus, kemudian mengalikan (dengan 0,8 atau 1,25) jika ada efek mengubahnya. Ingatlah bahwa efek ini dapat ditumpuk.
Kerusakan hanya dapat 0 ketika pengubah tipe adalah 0 (Normal <--> Psikis) atau Kekuatan gerakan adalah 0 (Sembuhkan, Bakar, dll). Kalau tidak, minimum diberlakukan pada 1.
Turnamen
Turnamen berlangsung selama 100 putaran. Di setiap babak, tim dikocok dan dipasangkan satu sama lain secara acak. Jika ada jumlah tim yang ganjil, sisanya menerima bye (skor sebagai seri). Memenangkan pertempuran menghasilkan tim 2 poin, ikatan bernilai 1 , dan tidak kehilangan apa pun. Tim dengan poin terbanyak di akhir menang!
Jika tim terikat, turnamen dengan hanya tim yang terikat untuk tempat pertama akan dilakukan untuk menentukan urutan tiebreak.
Protokol
Pengontrol akan mengirimkan program Anda satu dari empat perintah. Karakter pertama menentukan jenis perintah, dengan data berikut jika perlu.
Program Anda akan menerima perintah sebagai argumen, dan akan merespons pada STDOUT dalam satu detik . Jangan tetap hidup mendengarkan STDIN, itu tidak akan ada di sana. Setiap perintah akan menghasilkan proses baru.
Anda dapat menulis data / status ke disk. Tempatkan file apa pun dalam subfolder dengan nama yang sama dengan tim Anda. Jangan menulis lebih dari 32 kilobyte data, atau Anda akan didiskualifikasi. Data akan bertahan di antara babak, tetapi akan dihapus di antara turnamen.
Perintah
Data Tim
Ini dikirim sekali pada awal turnamen untuk mendaftarkan tim Anda. Balasan Anda harus konstan , tidak berbeda untuk setiap turnamen.
Pertanyaan:
T
Tanggapan:
name|member0|member1|member2
name
adalah string dengan nama tim Anda. Harap gunakan hanya alfanumerik, untuk kemudahan parsing. memberN
adalah string anggota, yang memberikan detail setiap monster:
String anggota:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Sekali lagi, 'nama' adalah string, kali ini dengan nama monster ini. typeid
adalah tipenya. Id jenis berada dalam urutan yang ditunjukkan pada bagan di atas, dengan Normal = 0 dan Rumput = 4.
Tiga bidang berikutnya adalah statistik dasar Anda. Ingat batas yang dijelaskan di bagian statistik di atas.
Tiga yang terakhir adalah gerakan monster Anda. ID ditunjukkan pada diagram langkah di atas.
Contoh balasan data tim mungkin terlihat seperti ini:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Tim mana pun yang mengirim kembali sampah, format tidak benar, atau data ilegal di sini tidak akan berpartisipasi sebelum diperbaiki.
Pilih Aktif
Ini dikirim pada awal setiap pertempuran, dan ketika monster mati dan perlu diganti.
Pertanyaan:
C#battleState
battleState
menunjukkan keadaan pertempuran saat ini. Bersabarlah dengan saya di sini, ini jelek:
yourTeamState#theirTeamState
Di mana XteamState
terlihat seperti:
name:activeSlot|member0state|member1state|member2state
activeSlot
menunjukkan monster mana yang sedang aktif (0-2). Negara-negara anggota datang dalam dua rasa. Jika itu tim Anda , itu memberikan informasi tambahan. Begitu,
Status member Anda :
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
MemberXstate mereka :
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
hanyalah pengenal integer yang dapat Anda gunakan untuk melacak monster jika Anda tidak suka menggunakannya name
.
attack:defense:speed
adalah statistik dasar Anda .
poisonedturns
memberi tahu Anda berapa banyak belokan yang telah diracuni.
moveCountX
memberi tahu berapa banyak kegunaan yang tersisa untuk setiap gerakan. Jika 0, itu tidak dapat digunakan. Untuk gerakan tanpa batas, ini akan menjadi negatif.
bonus(stat)
adalah jumlah poin bonus yang telah Anda tetapkan untuk setiap stat.
effectid
adalah daftar efek berukuran variabel yang telah diterapkan pada monster Anda. Ada akan tidak menjadi trailing :
pada string, apakah ada efek yang aktif hadir atau tidak. Jika ada efek bertumpuk, mereka akan muncul sebagai beberapa efek dalam daftar.
Id efeknya adalah:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Tanggapan:
memberSlot
Satu-satunya respons yang diperlukan adalah nomor tunggal 0,1,2, yang memberi tahu anggota mana yang ingin Anda aktifkan. Ini harus menjadi anggota yang mampu bertarung. Jangan kirim kembali 1
jika anggota 1 sudah mati.
Aksi Pertempuran
Setiap belokan, Anda harus memutuskan apa yang harus dilakukan.
Pertanyaan:
A#battleState
Di battleState
sini persis seperti yang dijelaskan di atas.
Tanggapan:
Untuk menggunakan gerakan, kirim kembali slot yang digunakan. Misalnya, jika saya menetapkan Punch ke slot 0, mengirim 0
melakukan Punch.
Untuk beralih ke anggota lain, kirim slot anggota plus sepuluh . Jadi untuk beralih ke anggota 2, kirim 12
.
Apa pun yang tidak dalam [0,1,2,10,11,12] dianggap tidak valid dan tidak akan melakukan tindakan apa pun dalam belokan ini.
Statistik Bonus
Setelah setiap dua pertempuran, Anda menerima poin bonus rahasia untuk setiap anggota tim.
Pertanyaan:
B#yourTeamState
Status tim Anda sama seperti yang ditunjukkan di atas, jangan buat saya mengulanginya.
Tanggapan:
stat0:stat1:stat2
Respons Anda akan menunjukkan status apa yang harus ditingkatkan untuk setiap anggota tim. Serangan 0, Pertahanan 1, Kecepatan 2.
Jadi untuk meningkatkan kecepatan anggota, serangan anggota dua, dan pertahanan anggota tiga, Anda akan merespons dengan:
2:0:1
Pengendali
Pengontrol dapat ditemukan di BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Lemparkan saja semua file kelas yang dikompilasi, pengiriman, dan players.conf ke dalam folder dan jalankan.
Kelas utama pengendali disebut Tournament
. Penggunaannya adalah:
java Tournament [LOG_LEVEL]
Level log dari 0-4 memberikan peningkatan informasi. Level 0 menjalankan turnamen secara diam-diam dan hanya memberikan hasilnya, di mana level 3 memberikan komentar bergantian. Level 4 adalah output debug.
Anda dapat menambahkan kiriman ke turnamen di players.conf
Cukup tambahkan string baris perintah yang diperlukan untuk menjalankan program, satu per baris. Baris yang dimulai dengan #
adalah komentar.
Dalam posting Anda, sertakan perintah yang perlu saya tambahkan ke saya players.conf
, dan setiap langkah kompilasi (jika diperlukan).
Termasuk adalah tim dummy yang terdiri dari semua anggota Normal dengan tiga gerakan Normal. Mereka memilih bergerak secara acak dan memiliki statistik mengerikan. Bersenang-senang mengalahkan mereka.
Aturan Lain-lain
Anda tidak boleh membaca atau menulis ke sumber daya eksternal apa pun (kecuali dalam subfolder Anda sendiri, hingga 32 kB seperti disebutkan di atas).
Tim Anda harus masuk ke turnamen "buta". Itu berarti Anda tidak dapat menganalisis sumber orang lain untuk mengetahui apa yang akan dilakukan tim / monster tertentu dalam situasi tertentu. Anda dapat menganalisis pergerakan / statistik lawan dan terus mengikuti perkembangan turnamen, tetapi tidak ada hardcoding informasi ini di.
Jangan mengganggu proses / pengajuan lainnya. Tidak meminta mereka, menggunakan refleksi untuk mendapatkan data mereka, dll. Jangan main-main dengan komputer saya. Hanya saja, jangan mencobanya. Ini adalah kebijaksanaan saya. Pelanggar dapat dilarang masuk di masa depan.
Kontestan dibatasi hingga maksimal dua entri. Jika Anda mengirim lebih banyak, saya hanya akan mencetak dua yang pertama dikirimkan. Jika Anda ingin mencabut satu, hapus itu.
Entri mungkin tidak ada hanya untuk menopang entri lain. Juga, Anda tidak boleh mencoba mendiskualifikasi kontestan lain secara tidak langsung (misalnya, menggunakan nama tim karakter 27M untuk pemain DQ yang mencoba menulis ini ke disk). Setiap kiriman harus dimainkan untuk menang berdasarkan kemampuannya sendiri.
Program Anda dapat menghasilkan maksimum satu proses anak pada satu waktu (total keturunan, tidak langsung). Baik proses anak utama dan apa saja harus diakhiri secara langsung setelah memberikan hasil. Either way, pastikan Anda tidak melewati batas waktu.
Turnamen akan diadakan di komputer saya yang menjalankan Ubuntu dengan prosesor Intel i7 3770K.
Hasil
Ini adalah hasil dari pemain saat ini. Ini sangat dekat di antara para pesaing utama, dan saya berpikir tentang menabrak jumlah putaran hingga 500 (dan menyesuaikan jarak poin bonus untuk mencocokkan). Ada keberatan, komentar?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Hasil play-by-play penuh di Google Drive
bye
untuk jumlah pesaing yang tidak merata dan akan dipastikan bahwa pasangan pertandingan adil dan merata.
n^2
bukan n
. Dengan hanya 7 pesaing saat ini dan 100 putaran, itu adalah 2100 pertempuran (vs 300 apa adanya, dan 1500 dengan 500 putaran). Itu hanya menjadi lebih buruk karena lebih banyak entri yang masuk. Saya dapat mengurangi # putaran, tetapi saya ragu untuk melakukannya karena variabilitas yang melekat (mengenai status esp), dan memiliki kelipatan 50 (untuk poin bonus) lebih mudah.