code2

来源:互联网 发布:威海手机数据恢复公司 编辑:程序博客网 时间:2024/05/22 14:53
package DogHouse;


import java.awt.Color;
import java.util.Vector;


import robocode.AdvancedRobot;
import robocode.HitByBulletEvent;
import robocode.HitWallEvent;
import robocode.RobotDeathEvent;
import robocode.ScannedRobotEvent;
//import java.awt.Color;


// API help : http://robocode.sourceforge.net/docs/robocode/robocode/Robot.html


/**
 * SimpleScan - a robot by (your name here)
 */
public class Goodog extends AdvancedRobot
{


public int randomMove = 0;

private Vector<EnemyTrack> enemyVec;
/**
* run: SongChen's default behavior
*/
public void run() {
enemyVec = new Vector<EnemyTrack>();
setBodyColor(Color.blue);
setGunColor(Color.green);
setRadarColor(Color.red);
setBulletColor(Color.yellow);
setScanColor(Color.green);
setAdjustGunForRobotTurn(true);
        setAdjustRadarForGunTurn( true );
        
        while(true) {
        System.out.println("run again");
        turnRadarRight(360);
// EnemyTrack enemy = getClosestEnemy();
// System.out.println("enemy number:" + enemyVec.size());
// if(enemy == null)
// {
// System.out.println("no enemy");
// turnRadarRight(360);
// }
// else
// {
// System.out.println("get enemy");
// this.execute();
// }
//this.doRandomMove(this.randomMove++);
}
}


public EnemyTrack getClosestEnemy()
{
double min = 99999999;
EnemyTrack ret = null;
for(EnemyTrack enemy : enemyVec)
{
if(enemy.distance < min)
{
min = enemy.distance;
ret = enemy;
}
}
return ret;
}

/**
* onScannedRobot: What to do when you see another robot
*/
public void onScannedRobot(ScannedRobotEvent e) {
System.out.println("Scann one");
if(!isInVector(e))
{
EnemyTrack track = new EnemyTrack(this);
track.update(e);
enemyVec.add(track);
}
double offset = rectify(Math.toRadians((e.getBearing() + getHeading()) % 360 )-getRadarHeadingRadians());
this.setTurnRadarRightRadians(offset *1);
this.setTurnGunRight(getRadarHeading() - getGunHeading());
fire(1);
}

  public  double rectify ( double angle )
  {
       if ( angle < -Math.PI )
           angle += 2*Math.PI;
       if ( angle > Math.PI )
           angle -= 2*Math.PI;
       return angle;
  }

public void onRobotDeath(RobotDeathEvent e)
{
for(EnemyTrack enemy: enemyVec)
{
if(e.getName().equals(enemy.name))
{
enemyVec.remove(enemy);
break;
}
}
}

public void onHitByBullet(HitByBulletEvent e)
{
this.doRandomMove(randomMove++);
if(randomMove > 1000)
{
randomMove = 0;
}
}

/**
* onHitWall: What to do when you hit a wall
*/
public void onHitWall(HitWallEvent e) {
double bearing = e.getBearing();
if(bearing > 0)
{
ahead(100);
}
else
{
back(100);
}
}

private boolean isInVector(ScannedRobotEvent e)
{
for(EnemyTrack enemy : enemyVec)
{
if(enemy.name.equals(e.getName()))
{
enemy.update(e);
return true;
}
}
return false;
}

private void doRandomMove(int moveIndex)
{
if(moveIndex%4 == 0)
{
setTurnRight(100);
setMaxVelocity(5);
setAhead(100);
}
else if(moveIndex%4 == 1)
{
setTurnLeft(120);
setMaxVelocity(5);
setAhead(100);
}
else if(moveIndex%4 == 2)
{
setTurnLeft(100);
setMaxVelocity(5);
setBack(140);
}
else if(moveIndex%4 == 3)
{
setTurnRight(150);
setMaxVelocity(5);
setBack(100);
}
}

public class EnemyTrack {
public String name;
public double heading;
public double bearing;
public double bearingToZero;
public double distance;

public double energy;
public double velocity;
public double faceHeading;
public double posX, posY;
public double nextPosX, nextPosY;
public Goodog hero;

public EnemyTrack(Goodog h)
{
hero = h;
}

public void update(ScannedRobotEvent e)
{
name = e.getName();
bearing = e.getBearing();
distance = e.getDistance();
energy = e.getEnergy();
velocity = e.getVelocity();
faceHeading = e.getHeading();
updatePos(hero.getHeading());
}

private void updatePos(double heroHeading)
{
bearingToZero = Math.toRadians((hero.getHeading() + bearing) % 360);

posX = hero.getX() + Math.sin(bearingToZero) * distance;
posY = hero.getY() + Math.cos(bearingToZero) * distance;
}
}
}

0 0
原创粉丝点击