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