로켓 봇
년은 3024 년입니다. 사람들은 전쟁에서 위험에 처할 자원이 너무 부족 해져서 전투가 로봇으로 옮겨갔습니다. 당신의 임무는 다른 사람과 같이 봇을 구성하는 것입니다. 누가 로켓을 쓰면 적을 파괴하고 들어오는 모든 위협을 격추시킵니다.
게임 플레이
봇
게임 플레이는 10x15 그리드에서 이루어집니다. 봇은 아래쪽 가장자리에 있으며 그리드의 6,7 및 8 지점에 3 개의 슬롯이 있습니다. 상대는 당신의 맞은 편에 3 개의 슬롯이있는 그리드의 상단에 있습니다.
로켓
이 슬롯 중 하나에서 슬롯이 파괴되지 않았다고 가정하면 로켓을 발사 할 수 있습니다. 로켓은 생성 될 때 주어진 방향 목록으로 구성되며, 일단 발사되면 방향을 변경할 수 없습니다. 매 턴마다 로켓은 목록의 맨 위를 소비하고 그 방향으로 움직입니다. 로켓은 동시에 움직입니다. 두 개의 로켓이 같은 타일에서 끝나면 둘 다 폭발합니다. 로켓에 명령이 없으면 폭발합니다. 로켓에 연료가 부족하면 100 번 움직 인 후 폭발합니다. 로켓이 폭발하면 그 타일에 5 턴 동안 남아 다른 로켓도 폭발합니다.
참고 : 두 개의 로켓이 동시에 움직이므로 동일한 타일에서 턴을 끝내지 않는 한 두 개의 로켓이 폭발하지 않고 서로 통과 할 수 있습니다.
골
각 경기의 목표는 당신의 슬롯을 살리면서 상대 슬롯을 파괴하는 것입니다. 귀하가 가진 라이브 슬롯에서 로켓을 발사 할 수 있으며, 발사되기 전에 귀하가 지정한 경로가 제공됩니다. 매 초마다 로켓을 발사합니다. 즉, 다른 로켓을 발사하기 전에 로켓이 두 번 움직입니다. 결투는 200 턴 동안 또는 하나의 봇 슬롯이 모두 파괴 될 때까지 지속됩니다.
채점
경기가 끝나면, 당신은 당신이 가진 각각의 라이브 슬롯에 대해 하나의 포인트를, 당신이 파괴 한 각 상대 슬롯에 대해 하나의 포인트를 얻습니다. 즉, 제로섬 게임이며 각 경기마다 6 점을 얻습니다.
라운드 로빈이 실행되어 각 봇이 서로 봇을 한 번만 향하도록합니다. 봇이 RNG를 사용하는 경우 각 매치업은 1000 개의 결투가됩니다.
이행
대회 코드는 https://github.com/Cain93/RocketBots 에서 확인할 수 있습니다.
각 제출물은 Bot
수업을 연장해야합니다 . fireRocket
메소드 를 대체해야합니다 . 이 방법 Rocket[][]
은 게임 보드를 나타내는 로켓의 그리드 배열을받습니다 . 당신은 항상 지점에서 슬롯, 그리드의 하단에 위치하고 있습니다 [-1][6]
, [-1][7]
, [-1][8]
. 그리드에서 빈 점은로 표시됩니다 null
. 로켓이 타일에 존재하면 dis
필드 에 액세스하여 로켓이 속한 사람을 식별 할 수 있습니다 . "^"는 로켓이고 "v"는 상대입니다.
로켓에 대한 지침을 제공하는 연결된 정수 목록을 반환해야합니다. 위로 이동하려면 0을 사용하십시오. 위와 오른쪽으로 이동하려면 1을 사용하고, 오른쪽, 2를 사용하여 위와 왼쪽에 7을 사용하십시오. 정수를 누른 순서대로 로켓이 움직입니다. 예를 들어, 다음 코드는 로켓을 몇 차례 위로 움직이고 지그재그로 몇 차례 돌리면 폭발합니다.
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);
로켓을 발사 할 슬롯을 변경하려면 curSlot
필드를 변경하십시오 . 0은 가장 왼쪽 슬롯이고 2는 가장 오른쪽 슬롯입니다. 슬롯이 손상되었는지 확인하려면을 사용하십시오 getSlot(int slotNumber)
.
로켓이 슬롯을 켜면 해당 슬롯이 파괴됩니다. 로켓을 수동으로 폭발시킬 필요는 없습니다.
참고 : 발사 된 슬롯 위치에 로켓이 생성되지만 충돌이 평가되기 전에 한 번 이동합니다. 따라서 슬롯 0에서 로켓을 발사하고 첫 번째 이동이 올바른 경우 (2) 자신의 중간 슬롯을 파괴하게됩니다. 그러나 위와 오른쪽 (1)은 안전한 이동입니다.
봇 이름을 지정하려면 name()
메소드를 재정의하십시오 .
각 결투마다 봇이 다시 작성되므로 정적 변수가 재설정됩니다.
행운을 빕니다!
로켓이 날아가고 상대방이 금속 조각처럼 번쩍이기를 바랍니다.
힌트:
의도적으로 로켓을 폭발시켜 폭발을 일으키는 것은 상대 로켓을 격추시키는 것보다 방어하기 쉬운 방법입니다.
봇 예
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;
}
}
점수
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