robot环境配置及游戏规则.docx
《robot环境配置及游戏规则.docx》由会员分享,可在线阅读,更多相关《robot环境配置及游戏规则.docx(11页珍藏版)》请在冰豆网上搜索。
robot环境配置及游戏规则
1.环境搭建
1.1jdk安装
在Oracle官网下载
(1)进入首页选择downloads
(2)选择JavaSE
(3)选择下图所示
(4)下载时一定要选择AcceptLicenseAgreement,然后根据自己的机器选择对应的版本。
如果是32位操作系统选择windowsx86
(5)下载完毕直接双击进行安装。
一定要记住安装目录。
默认安装在
c:
\\ProgramFiles\\java
1.2配置环境变量
1.2.1右键计算机---->属性---->高级系统设置---->高级---->环境变量
1.2.2选择新建
1.2.3设置变量名和变量值
(1)变量名:
JAVA_HOME
变量值:
jdk安装的目录,就是java包所在的目录
eg:
C:
\ProgramFiles\Java\jdk1.7.0
设置完毕后确定
(2)然后找到path---->编辑,在最后添加;%JAVA_HOME%\bin
不要忘记前面的分号并且是英文状态,然后确定
(3)配置CLASSPATH
点击新建
变量名:
CLASSPATH
变量值:
.
然后确定,关闭窗口。
至此环境变量配置完成。
(4)检测是否配置成功
点击开始--->运行--->cmd---->输入”Java”出现如下界面
再输入”javac”出现如下界面
如果出现这些内容说明环境变量配置成功,如果出现
则说明配置不成功。
1.3安装eclipse
在官网www.eclipse.org下载
进入首页,点击红线处任意一处就能进入下载页面
下载如下载页面后根据需要选择,第一个是JavaSE版本,第二个是JavaEE版本
两个都行,一般下载第一个,必须根据自己电脑的位数选择是32位还是64位
下载完毕之后,直接安装就可运行。
1.4在eclipse中编写代码
打开eclipse,file--->new--->javaproject,会出现下面界面
选择好目录之后,点击next,进入下一步,显示下面的界面,
点击libraries--->AddExternalJARs…,选择robocode目录下面libs里面的jar包,全部选中,然后点击打开就会自动导入到eclipse中,点击finish。
2规则
2.1能量参数
机器人最重要的动参要数能量(生命值)了,没有能量就意味着你输去了这场战斗。
我们可以用函数getEnergy()得到我们机器人的生命点数.
能量的损失:
相撞损失:
当我们撞到墙时我们的生命点会下降,生命点损伤度=Math.abs(velocity)*0.5-1当我们撞到另一个机器人,我们移动将会停止,并且我们会损失生命点6点。
同时我们会被扣除积分1.2分。
击中损失
当我们被子弹打中我们的生命点损失是依据对方的能量大小而定的。
当子弹能量为1时,我们生命点损失=4*power,如果子弹能量大于1,那么我们的生命损失+=2*(power-1)。
发射损失
每发射一颗子弹我们的生命能量就会减少。
减少的能量等于发射的子弹的能量,炮弹能量范围是:
0.1-3。
能量的增加:
有失必有得,如果我们的子弹打中别的机器人,我们可以从子弹那窃取到3*power的能量.这是唯一增加生命力的途径。
子弹的能量与速度:
子弹的能量与速度与数度成反比,速度=20-3*能量。
因此子弹的能量越小,速度就越快,命中率也越高,不过威力也就越小。
2.2炮管参数
炮管热量:
当我们开火时,炮管产生的热量由子弹开火时的能量决定也即:
热量=1+(firepower/5),我们可以利用函数getGunHeat()得到炮管当时的热量,只有当getGunHeat恒等于0时,我们才能再次发射子弹。
现在你明白了为什么有时候我们生命点非零并且有子弹就是不能开火的原因了吗?
炮管过热了!
冷却度:
有热度当然就有冷却度,不冷却我们的炮管会永远不会开火的。
系统战斗设定的默认冷却速度是0.1/tick(时间周期),我们可通过函数getGunCoolingRate()得到这个参数值。
旋转速率:
炮管在每一个时间周期内旋转速率=20度/帧(frame)
炮管热量:
当我们开火时,炮管产生的热量由子弹开火时的能量决定。
即:
热量=1+(firepower/5),利
用函数getGunHeat()可以得到炮管当时的热量,只有当getGunHeat恒等于0时,我们才能再次发射子弹。
冷却度:
有热度当然就有冷却度,不冷却我们的炮管会永远不会开火的。
系统设定的默认冷却速度是
0.1/tick(时间周期),我们可通过函数getGunCoolingRate()得到这个参数值。
2.3雷达参数:
旋转速度:
雷达以每时间周期45度的速度旋转。
也即45degrees/frame.
扫描面积:
雷达扫描是呈扇形的,它的开始位置到终止位置的长度大约为1200。
只要我们放大屏幕可
以通过眼睛估算出这个面积。
扫描排列:
扫描到的数据有墙,目标,子弹等等。
这些是按扫描距离来排列,从离雷达最近的物体开始到最后扫描到的物体。
2.4运行参数:
前进速度:
坦克最大的速度(Velocity)为8,函数getVelocity()返回了坦克当前的速度。
加/减速度:
加速度为1像素(pixel)/帧frame,减速度为2pixel/frame。
参考公式:
设s为距离,Vt为终速度,Vo为初速度,t为时间,a为加速度:
位移公式s=Vo*t+a*t*t/2
速度公式Vt=Vo+a*t
平均速度公式v=(Vt+Vo)/2=s/t
加速度公式a=(Vt-Vo)/t
(这些公式高一大家都学过吧?
)
旋转规则:
旋转速度:
机器人的旋转速度和当前的速度有关即旋转速度=10-0.75*getVelocity()。
相互作用参数:
雷达安装在炮上,炮安装在机器人上,它们会相互影响。
如果我们向左转动炮管,
而使雷达向右转动,那么雷达只会向右转动(45-20)=25度;如果两者都向右转动,雷达将向右转(45+20)
=65度。
同样的道理炮和机器人也是方向同相加,方向反相减。
2.5积分规则:
RobotName-机器人的名字;
TotalScroe-为这次比赛你的总共得分;
Survival-是你存活率的得分;
LastSurvivorBonus:
你是赢的次数相对对手的分红得分;
BulletDmg:
是你的子弹损失得分也即发射的子弹数的得分;
Bonus:
是子弹数的分红得分;
RamDmg*2是你的撞击得分;
Bonus:
是你撞击得分分红;
最后两项Survival1sts,是你赢的次数,不算做分数。
所有分数加起来就是你的总分。
记住在联赛并不是总分越高越好,它是算综合平均分的。
其中撞击
分和子弹损失分就要越少越好。
你如果观察两大高手比赛的记分牌,你会发现他们的RamDmg和RamDmg
中的Bonus一般都为0。
附录:
高级机器人
绝对坐标、相对坐标和夹角
目标锁定
packagecom.langsin5;
importjava.awt.Color;
importrobocode.AdvancedRobot;
importrobocode.ScannedRobotEvent;
publicclassScanLockRobotextendsAdvancedRobot{
@Override
publicvoidrun(){
setScanColor(Color.WHITE);
turnRadarLeft(360);
execute();
}
@Override
publicvoidonScannedRobot(ScannedRobotEvente){
doubleheading=getHeading();
doubleradarHeading=getRadarHeading();
doublebeering=e.getBearing();
doubledegree=radarHeading-heading-beering;
if((degree%360)>180){
degree=-(360-degree);
}
if((degree%360)<-180){
degree=360+degree;
}
turnRadarLeft(degree*1.3);
}
}