资源简介
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单片机流水灯仿真+程序
相关资源
- SpringBoot+H2+mybatis-plus59130
- 登录注册界面.zip48872
- 数字华容道
- SSM+Shiro+redis实现单点登陆
- jstl-api-1.2和jstl-impl-1.2
- 基于MVC模式的会员管理系统
- 国内一家大型软件公司内部的正规软
- 仿windows记事本
- GUI银行管理系统
- 超市收银系统eclipse access大学课程设计
- 模拟ATM柜员机系统--连接数据库
- A*算法的2D演示(带源码)
- 代码审查表和代码审查实例
- 仿126 网易 163 邮箱 界面
- Tomcat6.x
- 简单的行编辑器
- 扫雷(MVC架构)
- 302 Found
- window ping命令加时间并记录日志
- springboot+rabbitmq项目demo(亲测可正常运
- jxbrowser 所有版本通用的破解包
- 2017年-传智播客-张志君老师-SpringBoo
- Blob.js+Export2Excel.js
- 机会路由源代码+仿真工具(SCORP)
- POI中文帮助文档附带api手册.zip
- 2018双十一阿里供应链服务平台讲座
- 原银在线信贷平台概要设计说明书v
- office_word_api 开发文档
- sun.misc.Unsafe源码
- netty的视频90集
评论
共有 条评论