火箭机器人
那一年是3024年。人们已经变得资源稀缺,无法在战争中冒险,因此战斗已经转移到了机器人身上。您的任务是构造一个与众不同的机器人,该机器人的火箭将摧毁敌人的敌人,击落所有即将到来的威胁。
游戏玩法
机器人
游戏玩法在10x15的网格上进行。您的机器人位于底部边缘之外,并且在网格的位置6,7和8处具有三个插槽。您的对手位于网格的顶部,在您的对面有三个插槽。
火箭队
从任何一个插槽中,您都可以发射火箭,前提是该插槽尚未销毁。火箭由创建时给出的方向列表组成,一旦发射,这些方向就无法更改。每转一圈,火箭将消耗列表的顶部,并朝该方向移动。火箭同时移动。如果两枚火箭以相同的砖块结尾,它们都会爆炸。如果火箭用完了命令,它将爆炸。如果火箭用尽燃料,则在移动100次后会爆炸。火箭爆炸时,它将在该磁贴中保留5圈,从而导致其他任何在那里移动的火箭也爆炸。
注意: 由于同时运动,两个火箭可以彼此通过而不会爆炸,只要它们不都在相同的瓦片中结束转弯即可。
目标
每场比赛的目的都是在保持对手生存的同时消灭对手的位置。可以从您拥有的任何活动插槽中发射火箭,并在发射前为其指定路径。您每转一圈发射一枚火箭,这意味着火箭将移动两次,然后再发射另一枚。决斗持续200回合,或者直到一个机器人插槽全部被破坏。
计分
比赛结束时,您每拥有一个实时角子机就获得1分,而您摧毁的每个对手角子机则得到1分。这意味着这是一场零和游戏,每场比赛将获得6分。
轮循将运行,以便每个机器人都彼此面对一次。如果有任何机器人使用RNG,则每个对决将是1000次对决。
实作
比赛代码可以在这里找到:https : //github.com/Cain93/RocketBots
每次提交都应扩大Bot
班级。您必须重写该fireRocket
方法。此方法接收Rocket[][]
代表游戏板的Rockets的网格数组。你总是位于网格的底部,与斑点插槽[-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