Bot Roket
Tahun ini adalah 3024. Orang-orang menjadi sumber daya yang terlalu langka untuk dipertaruhkan dalam perang, jadi pertempuran telah bergeser ke robot. Tugas Anda adalah membuat bot tidak seperti yang lain, roket siapa yang akan menghujani musuh Anda dan menembak semua ancaman yang masuk.
Gameplay
Bot
Gameplay berlangsung di grid 10x15. Bot Anda terletak di tepi bawah, dan memiliki tiga slot di titik 6,7 dan 8 dari kisi. Lawan Anda terletak di bagian atas grid, dengan tiga slot tepat di hadapan Anda.
Roket
Dari salah satu slot ini, Anda dapat menembakkan roket, dengan asumsi slot belum dihancurkan. Roket terdiri dari daftar arah yang diberikan padanya saat dibuat, dan sekali menembakkan arah ini tidak dapat diubah. Setiap belokan, roket akan mengkonsumsi bagian atas daftar, dan bergerak ke arah itu. Roket bergerak secara bersamaan. Jika dua roket berakhir di ubin yang sama, keduanya akan meledak. Jika roket kehabisan perintah, itu akan meledak. Jika roket kehabisan bahan bakar, setelah 100 bergerak, itu akan meledak. Ketika sebuah roket meledak, ia akan tetap berada di ubin itu selama 5 putaran, menyebabkan roket lain yang bergerak di sana meledak juga.
Catatan: Karena gerakan simultan, dua roket dapat saling melintas tanpa meledak, selama keduanya tidak mengakhiri putaran di ubin yang sama.
Tujuan
Tujuan dari setiap pertandingan adalah untuk menghancurkan slot lawan Anda sambil menjaga Anda tetap hidup. Sebuah roket dapat ditembakkan dari slot langsung apa pun yang Anda miliki, dan diberikan jalur yang ditentukan oleh Anda sebelum diluncurkan. Anda menembakkan roket setiap belokan kedua, artinya roket akan bergerak dua kali sebelum Anda dapat menembakkan roket lainnya. Duel berlangsung selama 200 putaran, atau sampai satu slot bot dihancurkan.
Mencetak gol
Di akhir pertandingan, Anda mendapatkan satu poin untuk setiap slot langsung yang Anda miliki, dan satu poin untuk setiap slot lawan yang Anda hancurkan. Ini berarti ini adalah pertandingan zero-sum, dan 6 poin akan diberikan setiap pertandingan.
Robin robin akan dijalankan sehingga setiap bot saling berhadapan satu sama lain. Jika ada bot yang menggunakan RNG, maka setiap pertarungan akan menjadi 1000 duel sebagai gantinya.
Penerapan
Kode untuk kompetisi dapat ditemukan di sini: https://github.com/Cain93/RocketBots
Setiap pengajuan harus memperluas Bot
kelas. Anda harus mengganti fireRocket
metode. Metode ini menerima larik kisi-kisi Rockets Rocket[][]
,, yang mewakili gameboard. Anda selalu terletak di bagian bawah dari grid, dengan slot di tempat [-1][6]
, [-1][7]
, [-1][8]
. Di grid, tempat yang tidak dihuni akan diwakili dengan null
. Jika roket ada di ubin, Anda dapat mengidentifikasi siapa pemiliknya dengan mengakses dis
bidang. "^" adalah roket Anda, dan "v" adalah lawan Anda.
Anda harus mengembalikan LinkedList of Integers yang memberikan instruksi untuk roket Anda. Untuk bergerak ke atas, gunakan 0. Untuk bergerak ke atas dan ke kanan, gunakan 1, tepat, gunakan 2, dll hingga 7 untuk naik dan turun. Roket akan bergerak sesuai urutan Anda mendorong Integer. Sebagai contoh, kode berikut akan membuat roket bergerak ke atas beberapa putaran, zig-zag beberapa putaran dan kemudian meledak.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Untuk mengubah slot tempat menembakkan roket, ubah curSlot
bidang. 0 adalah slot paling kiri Anda, dan 2 adalah slot paling kanan Anda. Untuk memeriksa apakah ada slot yang hancur, gunakan getSlot(int slotNumber)
.
Jika roket mengakhiri giliran pada slot, slot itu akan dihancurkan. Anda tidak perlu meledakkan roket secara manual.
Catatan: Roket muncul di lokasi slot yang ditembakkan, tetapi akan bergerak satu kali sebelum tabrakan dievaluasi. Jadi jika Anda menembakkan roket dari slot 0, dan langkah pertama benar (2), maka Anda akan menghancurkan slot tengah Anda sendiri. Namun, atas dan kanan (1) adalah langkah yang aman.
Jika Anda ingin memberi nama bot Anda, ganti name()
metode tersebut.
Bot akan dibangun kembali untuk setiap duel, sehingga setiap variabel statis akan diatur ulang.
Semoga berhasil!
Semoga roket Anda terbang dengan benar dan lawan Anda hanyalah serpihan logam yang membara.
Petunjuk:
Dengan sengaja meledakkan roket untuk menciptakan ledakan adalah cara yang lebih mudah untuk bertahan daripada mencoba menembak jatuh roket lawan.
Bot Contoh
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Skor
Skor dari 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324
sumber
Jawaban:
Pembela
Bek menggunakan jenis pertahanan baru: Roket berpatroli di depan slot. Ini memberi keuntungan besar, karena roket hidup untuk 100 putaran, bukan 5 putaran (seperti ledakan).
sumber
Zigzagoon
Slot luar melebar (sedikit), lalu maju dan kembali ke slot musuh. Slot tengah memotret pola zig-zag di tengah.
Setiap putaran lainnya (3 putaran), masuk ke mode pertahanan dan hanya meledak beberapa roket di dekat slot saya sendiri. Modus serangan roket kemudian pergi di sekitar mereka. Tidak ada yang terlalu mewah, hanya sesuatu untuk membuat kontes berjalan.
sumber
Terminator
Saya bangga mempersembahkan Terminator !!!
Setiap roket bergerak paling kiri / kanan dari tengah dan kembali pada slot musuh. Setiap dua belokan, roket pertahanan diluncurkan lurus dan meledak di dekat slot untuk melindunginya.
sumber
HatTrickBot
Saya punya DoubleTapBot untuk CodeBot 3, yang memukul dua kali secara bergantian, inilah HatTrickBot: Menekan semua 3 tempat sekaligus!
Selalu mungkin untuk mencegah roket mengenai jika Anda tahu di mana itu akan jatuh. Tapi saya tidak berpikir ada banyak bot yang akan dapat melindungi slot mereka terhadap serangan 3 roket.
Ngomong-ngomong, ya, itu mengerikan untuk melihat yang lain jika dengan saklar berulang. Saya bisa membuat var untuk menghidupkan dengan nilai-nilai unik untuk setiap kombinasi status slot dan turnConter. Tetapi akan lebih sulit untuk membaca (saya harus menyimpan makna dari nilai-nilai dalam komentar ... membosankan!) :)
sumber
Kura-kura darat
Jika saya melindungi semua markas saya, saya punya 3 poin. Basis hanya dapat diserang dari 5 lokasi jika saya mendapatkan grid dengan baik. Rocket bertahan 5 giliran di lapangan ...
Bot ini menggunakan semua ini untuk mencocokkan tujuannya: bertahan dengan setidaknya 50% poin di saku. Ia menembakkan 3 roket, lalu menutupi dirinya sendiri
sumber
SideShooter
Pemotretan pertama melalui menara pertama (paling kanan) dengan salah satu dari dua cara berbeda. Kemudian, ia menembak melalui menara terakhir (paling kiri) dengan salah satu dari dua cara berbeda. Kemudian ia membuat "dinding" dengan menara kedua (tengah) dengan meledakkan roket di depan setiap menara. Proses ini diulangi.
Jika permainan berlangsung selama lebih dari 30 putaran, SideShooter menjadi bosan dan berubah sedikit. Alih-alih membuat "dinding" dengan menara kedua (tengah), ia menembak lurus. Sisa-sisa menara berperilaku dengan cara yang sama.
sumber
do...while
pernyataan melakukan loop tak terbatas ...Penembak jitu
Sniper pertama kali memblokir kedua sisi dan kemudian mulai menembak lurus.
sumber
Tiga Tembakan
Kami mendapat beberapa tembakan aneh. Tidak ada pertahanan sejati, tetapi polanya sedemikian rupa sehingga akan sulit untuk menembus tembakan rudal yang aneh ini. (atau itulah idenya. kemungkinan besar tidak akan berhasil.)
Catatan
sumber
MoreDakka
MoreDakka menembak ke lima arah tanpa henti (sampai menara dihancurkan oleh rudal lainnya).
sumber
StraightShot
Menembaki mereka.
sumber
Ini entri saya sendiri
WallE
Menembak beberapa roket offset, dan membangun dinding di tepi dan tengahnya. Setelah 100 putaran, mulai menargetkan slot tengah.
sumber