📄 yngwie.java
字号:
}
}
}
bt.bulletDead = true;
break;
}
}
}
public void onBulletMissed(BulletMissedEvent event) {
StatBulletsMissed++;
StatTotalBulletsMissed++;
Bullet bullet = event.getBullet();
BulletTracker bt;
Enemy en;
Strategy strat;
for (int i = 0; i < bullettrackers.size(); i++){
bt = (BulletTracker) bullettrackers.elementAt(i);
if (bt.bullet == bullet){
int idx = EC.IndexOf(bt.enemy);
if (idx > -1) {
en = (Enemy) EC.Enemies.elementAt(idx);
for (int j = 0; j < en.Strategies.size(); j++){
strat = (Strategy) en.Strategies.elementAt(j);
if (strat.ID == bt.Strategy){
strat.Failed(bullet.getPower());
break;
}
}
}
bt.bulletDead = true;
break;
}
}
}
public double getBulletDamageAimedAt(Enemy en){
BulletTracker bt;
double result = 0.0;
double mydist = Distance(en)+30.0;
double bulletdistance;
double pow;
double damage;
for (int i = 0; i < bullettrackers.size(); i++){
bt = (BulletTracker) bullettrackers.elementAt(i);
if (bt.bulletDead)
continue;
bulletdistance = My.Distance(bt.bullet.getX(),bt.bullet.getX(),en.X(),en.Y());
if ((bt.enemy == en.Name) && (bulletdistance < mydist)){
result += My.getBulletDamage(bt.bullet.getPower());
}
}
return result;
}
public void onRobotDeath(RobotDeathEvent e) {
int idx = EC.IndexOf(e.getName());
if ((won) && (idx != -1) && (((Enemy) EC.Enemies.elementAt(idx)).Time() == getTime()-1))
{
Enemy en = (Enemy) EC.Enemies.elementAt(idx);
LastEnemyX = en.X();
LastEnemyY = en.Y();
}
if ((idx != -1) && (((Enemy) EC.Enemies.elementAt(idx)) == gunner.Target))
scanner.ScanRound();
EC.EnemyDeath(e.getName());
}
public void onScannedRobot(ScannedRobotEvent e) {
ScanEvents.add(e); //verwerk deze later
}
public void onSkippedTurn(SkippedTurnEvent event) {
StatSkippedTurns++;
StatTotalSkippedTurns++;
// out.println(getTime()+" skipped turn");
}
public void onDeath(DeathEvent event) {
EndRound();
}
public void onWin(WinEvent event) {
won = true;
EndRound();
}
private void VictoryDance(){
while (Math.abs(getVelocity()) > 0) {
setAhead(0.0);
execute();
}
double TargetX;
double TargetY;
if (LastEnemyX > -1)
{
TargetX = LastEnemyX;
TargetY = LastEnemyY;
}
else
{
TargetX = BattleFieldWidth / 2.0;
TargetY = BattleFieldHeight / 2.0;
}
double angle = My.AngleFromTo(getX(),getY(),TargetX,TargetY);
double antiangle = (angle + 180.0) % 360.0;
while ((Math.abs(getHeading() - antiangle) > 0.01) ||
(Math.abs(getGunHeading() - antiangle) > 0.01) ||
(Math.abs(getRadarHeading() - antiangle) > 0.01))
{
control.TurnTo(cRobot,3,antiangle,false);
control.TurnTo(cTurret,3,antiangle,false);
control.TurnTo(cRadar,3,antiangle,false);
control.Update();
execute();
}
execute();
int i = 1;
while (Math.abs(getHeading() - angle) > 0.01)
{
control.TurnTo(cRobot,3,(antiangle+i*10.0)%360.0,false);
control.TurnTo(cTurret,3,(antiangle+i*30.0)%360.0,false);
control.TurnTo(cRadar,3,(antiangle+i*71.25)%360.0,false);
control.Update();
execute();
i++;
}
double dist = My.Distance(getX(),getY(),TargetX,TargetY);
while(dist > 2.0)
{
if (My.isToRightDeg(getHeading(),getRadarHeading()))
setTurnRadarLeft(45.0);
else
setTurnRadarRight(45.0);
setAhead(dist);
execute();
dist = My.Distance(getX(),getY(),TargetX,TargetY);
}
while ((getHeading() > 0.01) ||
(getGunHeading() > 0.01) ||
(getRadarHeading() > 0.01))
{
control.TurnTo(cRobot,3,0.0,false);
control.TurnTo(cTurret,3,0.0,false);
control.TurnTo(cRadar,3,0.0,false);
control.Update();
execute();
}
turnLeft(20.0);
for (i = 0; i < 30; i++)
{
turnRight(40.0);
turnLeft(40.0);
}
}
private void EndRound(){
StatTotalTime += getTime();
// PrintStats();
/* if (getRoundNum() == getNumRounds()-1){
PrintStats();
EC.printStrategies();
}*/
}
private void PrintStats(){
out.println();
if (Melee)
out.println("-- Yngwie Melee battle statistics --");
else
out.println("-- Yngwie 1-v-1 battle statistics --");
out.println("Bullets hit : "+StatBulletsHit);
out.println("Bullets hit ratio % : "+((float) 100.0 * StatBulletsHit / Math.max(1,StatBulletsHit + StatBulletsMissed)));
out.println("Current time : "+getTime());
out.println("Skipped turns : "+StatSkippedTurns);
out.println("Time errors : "+StatTimeErrors);
out.println("Total exceptions : "+StatTotalExceptions);
out.println("Total time : "+StatTotalTime);
out.println("Total skipped turns : "+StatTotalSkippedTurns);
out.println("Total time errors : "+StatTotalTimeErrors);
out.println("Total Wall collisions : "+StatTotalWallCollisions);
out.println("Total Enemy collisions: "+StatTotalEnemyCollisions);
out.println("Total Bullets hit : "+StatTotalBulletsHit);
out.println("Total Bullets hit % : "+((float) 100.0 * StatTotalBulletsHit / Math.max(1,StatTotalBulletsHit + StatTotalBulletsMissed)));
}
protected void getInitialValues(){
StatBulletsHit = 0;
StatBulletsMissed = 0;
StatSkippedTurns = 0;
StatTimeErrors = 0;
OneOnOne = false;
LastTime = 0;
LastEnemyX = -1.0;
LastEnemyY = -1.0;
LastX = getX();
LastY = getY();
won = false;
}
protected void printReport(){
out.println(getTime()+" REPORT");
out.println(getTime()+" BattleFieldHeight : "+BattleFieldHeight);
out.println(getTime()+" BattleFieldWidth : "+BattleFieldWidth);
out.println(getTime()+" Others : "+getOthers());
out.println(getTime()+" GunCoolingRate : "+getGunCoolingRate());
out.println(getTime()+" X : "+getX());
out.println(getTime()+" Y : "+getY());
out.println(getTime()+" Heading : "+getHeading());
out.println(getTime()+" Velocity : "+getVelocity());
out.println(getTime()+" Energy : "+getEnergy());
out.println(getTime()+" RadarHeading : "+getRadarHeading());
out.println(getTime()+" GunHeading : "+getGunHeading());
out.println(getTime()+" GunHeat : "+getGunHeat());
out.println();
}
public double Distance(Enemy en){
return My.Distance(getX(),getY(),en.X(),en.Y());
}
public double AngleTo(Enemy en){
return My.AngleFromTo(getX(),getY(),en.X(),en.Y());
}
public double TurnsCoolingDown(double firePower){
return (1.0 + (firePower / 5)) / getGunCoolingRate();
}
public long GetCoolingDownTurns(){
return (long) Math.ceil(getGunHeat() / getGunCoolingRate());
}
// geeft de angle naar een enemy die de volgende beurt waarschijnlijk is
// (lineaire extrapolatie van de enemy positie)
public double NextTurnAngleTo(Enemy en){
if ((en == null) || (en.Death) || (en.RC == 0) || (getTime() - en.Time() > 9))
return -1.0;
else
{
double tijdsverschil = getTime() - en.Time() + 1.0;
double vX = en.X()+en.Velocity()*tijdsverschil*My.sinDeg(en.Heading());
double vY = en.Y()+en.Velocity()*tijdsverschil*My.cosDeg(en.Heading());
return My.AngleFromTo(control.NextXPos(),control.NextYPos(),vX,vY);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -