Robocode 机器人坦克游戏开发环境介绍

Robocode是一款基于JAVA的机器人坦克对战游戏,由IBM的Mat Nelson在2000年创立。游戏规则涉及生命、炮弹、雷达等多个方面,玩家通过编写机器人程序进行对战。关键接口函数包括前进、后退、开火、旋转等,以及针对不同战斗事件的响应。玩家可以通过智能算法设计机器人的行为策略,例如基于距离调整火力。游戏还提供了多种坦克类型和团队作战模式。
摘要由CSDN通过智能技术生成

    Robocode历史概况:
    1995年,Mat Nelson进入IBM,开始接触JAVA。2000年,随着JAVA语言成熟,Mat Nelson这个狂热的玩家看到了创建这个他一直想玩的游戏的机会,着手开始创建Robocode。
    2001年,IBM以 alphaWorks 下载的形式发布。
    2008年1月,Robocode1.5.2 最新版本发布。

源代码及安装文件下载:
http://robocode.sourceforge.net/

安装要求
  Java 5.0 or newer(Windows和Unix/Linux平台)。
  注意部分linux操作系统下,由于JSDK的内部BUG,可能无法正确安装运行。

平台参数
    方向 - 整个战场是以屏幕正上角为0度,按顺时针排列,90,180,270...。
    位置 - 整个战场的坐标是以屏幕左下角为原点,高为Y坐标,宽为X坐标。
    距离 - 游戏中规定的距离是以像素(Pixels)点为单位,如果你把屏幕缩小了,那就是以缩小后的像素点为单位,反之就是放大后的像素点为单位。
    时间 - 游戏中规定的时间是以帧(frame)或滴答(ticks)(有点像时钟滴答),或时间周期(turns),或单独的时间片(simply timeslices)为单位。 回合 比赛回合是比赛中由用户自己设置的比赛次数,默认值为10。
    帧速 - 默认为30。
    扫描 - 默认为无。
    声音 - 默认为无。

游戏规则:

    生命规则:
      相撞损失:撞到墙时,生命点损伤度=Math.abs (velocity) * 0.5 -1。撞到另一个坦克时,移动停止,生命点损失6点,扣除积分1.2分。
      击中损失:当子弹能量为1时,我们生命点损失=4 * power,如果子弹能量大于1,那么我们的生命损失+= 2 * (power-1)。
      发射损失:如果我们的子弹打中别的坦克,我们可以从子弹那窃取到3*power的能量。

    炮弹规则:
      子弹能量:子弹能量是通过函数getPower()得到的。它大于等于0.1,小于等于 3。
      子弹速度:每一颗子弹有着自身的速度,这在处理敌人向你开炮前的移动策略可是很有帮助的。子弹的速度也和它的能量有关: speed = 20 - 3 * power。由于能量范围在0.1到3之间我们可求得子弹的速度范围:11 <= bullet speed <= 19.7。

    炮管规则:
      旋转速率:炮管在每一个时间周期内旋转速率=20 度/帧(frame)
      炮管热量:当我们开火时,炮管产生的热量由子弹开火时的能量决定。即:热量=1+(firepow

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package ms; import robocode.*; import java.util.*; //******************************************************************************************/ // GoodBot: determine, if a bot is a bastart or not // // needed: public void run() // GoodBot.Reset(); // public void onRobotDeath(RobotDeathEvent e) // GoodBot.BotDeath(e.getName(), this); // // example: public void onScannedRobot(ScannedRobotEvent e) // if (GoodBot.badBot(e.getName(), this)) //******************************************************************************************/ class GoodBot { static private Hashtable Bots = new Hashtable(); static private int GoodBots1 = 1; static private int GoodBots2 = 0; static private String bot; static public int KilledGoodBots1 = 0; static public int KilledGoodBots2 = 0; //******************************************************************************************/ // BadBot: is it a bad bot? //******************************************************************************************/ public static boolean badBot(String Name, AdvancedRobot in_this) { bot = (String)Bots.get(Name); if (bot == null) classBot(Name, in_this); int others = in_this.getOthers(); if ( (bot.compareTo("1") == 0) && (others >= GoodBots1 - KilledGoodBots1) ) return false; else if ( (bot.compareTo("2") == 0) && (others >= GoodBots1 - KilledGoodBots1 + GoodBots2 - KilledGoodBots2) ) return false; else return true; } public static void BotDeath(String Name, AdvancedRobot in_this) { bot = (String)Bots.get(Name); if (bot == null) classBot(Name, in_this); if ( bot.compareTo("1") == 0 ) KilledGoodBots1++; else if ( bot.compareTo("2") == 0 ) KilledGoodBots2++; } public static void Reset() { KilledGoodBots1 = 0; KilledGoodBots2 = 0; } private static void classBot(String Name, AdvancedRobot in_this) { int M_GoodBots = GoodBots1; String Gegnertyp = botTyp(Name); String Mytyp = botTyp(in_this.getName()); if (Gegnertyp.compareTo(Mytyp) == 0) { bot = "1"; if (GoodBots1 > M_GoodBots) in_this.out.println("I've found " + (GoodBots1 - 1) + " more " + Mytyp + "-Bot(s)."); } else { GoodBots1 = M_GoodBots; String Gegnerpack = botTyp2(Name); String Mypack = botTyp2(in_this.getName()); if (Gegnerpack.compareTo(Mypack) == 0) { bot = "2"; GoodBots2++; in_this.out.println("I've found " + (GoodBots2) + " more " + Mypack + "-Bot(s)."); } else bot = "0"; } Bots.put(Name, new String(bot)); } private static String botTyp(String BotName) { int k=BotName.indexOf("("); if (k != -1) { int Nr=Integer.parseInt(BotName.substring(k+1, BotName.indexOf(")")),10); if (GoodBots1 < Nr) GoodBots1 = Nr; return BotName.substring(0, k-1); } else return BotName; } private static String botTyp2(String BotName) { int k=BotName.indexOf("."); if (k != -1) { return BotName.substring(0, k); } else return BotName; } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值