• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: java  Robocod  

资源简介

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

评论

共有 条评论