⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yngwie.java

📁 2007年robecode大赛高级段冠军代码1!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                  }
               }
            }
            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 + -