robocode教程.ppt

上传人:peixunshi 文档编号:14934134 上传时间:2022-02-25 格式:PPT 页数:16 大小:396.23KB
返回 下载 相关 举报
robocode教程.ppt_第1页
第1页 / 共16页
robocode教程.ppt_第2页
第2页 / 共16页
robocode教程.ppt_第3页
第3页 / 共16页
robocode教程.ppt_第4页
第4页 / 共16页
robocode教程.ppt_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《robocode教程.ppt》由会员分享,可在线阅读,更多相关《robocode教程.ppt(16页珍藏版)》请在三一文库上搜索。

1、Robocode教程1,坐标系统2,扫描与锁定3,运动方式1,坐标与方向系统 坐标系:Robocode整个坐标系都是战场屏幕以左下角为原点1绝对方向系:Robocode中不管机器人在哪个方向都是以静态战场屏幕为参照的绝对角度(也即大家说的Heading),正上方为0度角。也即不管Robot,Gun,Radar向北为0,向东为90,向南为180,向西为270。 heading角,即从Y轴出发,然后顺时针绕回Y轴的这么个角度区间,取值范围: 0,3602相对方向系:相对方向是Robot,Gun,Radar以机器人的动态heading角度为参照的角度差不再以整个静态屏幕为参照了,叫它相对因为机器人的

2、heading是随着机器人移动而不停的在改变,bearing只是个相对物体。bearing 角,即从Y轴顺、逆时针出发,绕半圈回到Y轴所形成的两个角度区间,取值范围:顺时针0,180) ;逆时针0,-180例子target2,雷达与锁定雷达锁定1,敌方坦克绝对角度FBA=FBC+ABC =e.getBearingRadians()+getHeadingRadians()2,雷达调整角度FBE=FBC-ABE=absEnemyBearing-getRadarHeadingRadians()3,雷达修正:setTurnRadarRight(FBE*2); 例子brawl即自己与敌机的连线,与Y轴所

3、成的bearing角,取值范围为-180,180)。但是计算出来的公式有可能大于这个范围,因此进行绝对化操作:absEnemyBearing=robocode.util.Utils.normalRelativeAngle(FBA) 坐标锁定如何判断敌人的准确位置? 1,与敌方坦克的距离 2,与敌方坦克的角度3,自己的坐标1,与敌方坦克的距离要得到目标坐标我们首先得知道我们和目标之间的距离。这里的距离探测很简单,只要运用 ScannedRobotEvent 事件中的 e.getDistance() 方法我们就可得到 与地方坦克的距离差了。由于机器人存在着宽和高 , 可分别用 Robocode A

4、PI 中的 getWidth() 和 getHeigth() 方法得到。而两个机器人的距离是以双方的中心点为终点。如图所示,L 才是它们的距离,A 的距离是错误的。与敌方坦克的角度与敌方角度=(getHeading() + e.getBearing() % 360; 注意:getRadarHeadingRadians() 函数,当你调用此函数的时候实际上雷达已经不在刚刚扫描到敌人的那个角度了,他已经转过了十几度甚至更多。雷达默认转动速度是 45 度 /robocode 单位时间,实际上一般来说你用 getRadarHeadingRadians() 得到的值总是 45 度的整数倍。double

5、bearing = (getHeading() + e.getBearing() % 360; double distance = e.getDistance(); bearing = Math.toRadians(bearing); double genyX = getX() + Math.sin(bearing) * distance; double genyY = getY() + Math.cos(bearing) * distance; 敌方坦克的位置利用三角函数以及距离,角度和自己的坐标计算地方坦克的位置。注意java的Math.sin和cos使用的是弧度制。例子brawl和kil

6、ler10003,运动方式运动时注意:碰撞到别的坦克,或者碰撞到边界,都会使自己的速度立减为零,而且会有不同程度的伤害。碰撞: 双方0.6伤害. 撞墙: 1.2伤害如何避免撞墙:double heading = getHeadingRadians(); /取得bot方向的弧度数 double x = getX() + moveStep*Math.sin(heading); /移动move后将要达到的x坐标 double y = getY() + moveStep*Math.cos(heading); /移动move后将要达到的y坐标 double dWidth = getBattleField

7、Width(); /战场的宽度 double dHeight = getBattleFieldHeight(); /战场的长度 /当(x,y)超过指定的范围,则反向移动move if(x dWidth-30 | y dHeight-30) setBack(moveStep); 主动运动:1,规律运动,绕墙,圆形,弧形,直线等等。2,随机运动,使用Math.random()来定义运动轨迹。3,随机规律运动:前两者结合。被动运动:1,发现敌人开火时,敌人能量减少(0-3)时很有可能已经开炮,此时主动改变运动轨迹。2,被子弹击中时,沿着子弹发射角度垂直运动。3,其他情况(运动情况,敌人剩余能量)例子brawl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1