资源简介
Robocode 基础坦克胜率还可以,里面有预判函数,雷达锁定,随机移动等函数,一般的坦克还是可以打赢的,适合入门学习。
代码片段和文件信息
package biu;
import java.awt.Color;
import java.awt.geom.Point2D;
import robocode.AdvancedRobot;
import robocode.Rules;
import robocode.ScannedRobotEvent;
public class biu extends AdvancedRobot{
/**
* 扫描到敌人的时间
*/
private double time1 = 0;
private Enemy enemy = new Enemy();
private boolean discover = false;// 敌人是否被发现属性
private double heading = 0.0;
private double radarHeading = 0.0;
private double bPower = 3;
private double time = 0; // 子弹飞行时间
private double distance = 3000;// 敌人即将到达的位置的距离
@Override
public void onScannedRobot(ScannedRobotEvent e) {
discover = true;// 发现敌人
time1 = getTime();
// 初始化敌人
enemy.setBearing(e.getBearingRadians());
enemy.setSpeed(e.getVelocity());
enemy.setDistance(e.getDistance());
enemy.setHeading(e.getHeadingRadians());
time = distance / Rules.getBulletSpeed(bPower);
}
/**
* 打扮
*/
private void dressing() {
setBodyColor(Color.BLACK);
setGunColor(Color.BLACK);
setRadarColor(Color.BLACK);
setScanColor(Color.BLACK);
}
/**
* 车炮和雷达分离
*/
private void severance() {
setAdjustGunForRobotTurn(true);
setAdjustRadarForGunTurn(true);
}
/**
* 最简单的移动算法
*/
private void simpleMove() {
double increment = 0;
if (enemy.getBearing() > 0) {
increment = Math.PI / 2 - enemy.getBearing();
setTurnLeftRadians(increment);
} else {
increment = Math.PI / 2 + enemy.getBearing();
setTurnRightRadians(increment);
}
setAhead(1000);
}
/**
* 安全距离
*/
private double safDis = 100;
/**
* 移动
*/
private void movement() {
if (getDistanceRemaining() < 1) {
double nx = 0;
double ny = 0;
// 计算一个随机的安全的X,Y坐标
nx = Math.random() * (getBattleFieldWidth() - 2 * safDis) + safDis;
ny = Math.random() * (getBattleFieldHeight() - 2 * safDis) + safDis;
double headArg = 90 - Math.atan2(ny - getY() nx - getX());// 计算我们车身要旋转的角度
headArg = getPA(headArg);
double dis = Point2D.distance(getX() getY() nx ny);// 计算我们的机器人移动的距离
if (headArg - getHeadingRadians() > Math.PI / 2) {
setTurnRightRadians(headArg - getHeadingRadians() + Math.PI);
setAhead(-dis);
} else {
setTurnRightRadians(headArg - getHeadingRadians());
setAhead(dis);
}
}
}
/**
* 雷达锁定敌人
*/
private void doScan() {
// 判断是否扫描到敌人
if (discover) {
// 计算雷达旋转的角度
heading = this.getHeadingRadians();
radarHeading = this.getRadarHeadingRadians();
double temp = radarHeading - heading - enemy.getBearing();
// 处理异常角度
temp = correctAngle(temp);
temp *= 1.2;
// 设置机器人的雷达回扫
setTurnRadarLeftRadians(temp);
// 开始执行机器人运行的设置
}
}
/**
* 选择火力
*/
private double firePower() {
double eDist = enemy.getDistance(); //取得对方距离
bPower = 400/eDist;
if (bPower > 3){
bPower = 3;
}
return bPower;
}
private double correctAngle(double scan) {
scan %= 2 * Math.PI;// 防止出现大
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-16 15:30 biu\
文件 6244 2019-01-16 14:03 biu\biu.java
文件 861 2019-01-16 14:03 biu\Enemy.java
- 上一篇:51单片机DHT11温湿度
- 下一篇:51单片机流水灯仿真+程序
相关资源
- swing实现的猫版聊天室
- 网站验证码代码的使用
- 防止Socket传递汉字乱码
- 操作系统模拟.rar
- 2019校园招聘算法笔试题
- 中科大数据结构与数据库课件
- 诺基亚S60通用模拟器
- 车辆管理系统.zip
- 全国银行省市支行级联最新
- 一个完整项目详细设计说明书
- 汇编十六进制排序
- 利用哈夫曼编码进行通信可以大大提
- 百度地图api-ak
- 基于vue开发的树形菜单
- dobbyscan一个非常快速基于密度的地理
- 几乎完整的前端面试问题答案
-
typesc
riptvue开发的日历组件使用swi - processing二维温度场
- 尚硅谷dubbo视频教程+课程资料网盘地
- 图片控制内容框的文字上下翻滚.rar
- Js图片连续左右滚动.rar
- 纯CSS实现鼠标移上图片添加阴影效果
- CSS将图片自动变为圆角.rar
- 图片拖拉缩放效果仿PHOTOSHOP.rar
- JS+CSS给图片加上鼠标滑过的方框.rar
- 马赛克效果的JS图片切换代码.rar
- 亮丽的JS图片渐变导航.rar
- js左右切换鼠标可控的无缝图片滚动代
- js清爽简洁的图片交替导航效果.rar
- CSS制作的类似相册浏览的功能.rar
评论
共有 条评论