資源簡介
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單片機流水燈仿真+程序
評論
共有 條評論