Mam takiego robota. Wiekszosc na podstawie tutoriali, niestety nie mam pomyslu na to jak mialby sie poruszac. Gdybyscie mogli pomoc, bylbym wdzieczny 😉

package pg;
import robocode.*;
import java.awt.Color;

import java.awt.geom.Point2D;

/**
 * Die_suckers - a robot by (Przemek)
 */
public class Die_suckers extends AdvancedRobot {
	private byte moveDirection = 1;
	private int tooCloseToWall = 10;
	public void onHitWall(HitWallEvent e) { moveDirection *= -1; }
	public void onHitRobot(HitRobotEvent e) { moveDirection *= -1; }
	private AdvancedEnemyBot enemy = new AdvancedEnemyBot();
	
	public void run() {
		
		setAdjustRadarForRobotTurn(true);
		enemy.reset();
		
		setBodyColor(new Color(255, 0, 0));
		setGunColor(new Color(255, 255, 255));
		setRadarColor(new Color(255, 0, 0));
		setBulletColor(new Color(255, 255, 100));
		setScanColor(new Color(255, 200, 200));
		
		while(true) {
			
			int i=0;
			if (i == 0) { 
				turnRadarRight(360);
				i++;
			 }
			
			//ahead(100);
			//setTurnRadarRight(360);
			
			doMove();
			//execute();

		}
	}

	public void doMove() {		
		// always square off against our enemy, turning slightly toward him
		setTurnRight(enemy.getBearing() + 90 - (10 * moveDirection));

		// if we're close to the wall, eventually, we'll move away
		if (tooCloseToWall > 0) tooCloseToWall--;

		// normal movement: switch directions if we've stopped
		if (getVelocity() == 0) {
		moveDirection *= -1;
		setAhead(100 * moveDirection);
		}
	//execute();
	}

	public void onScannedRobot(ScannedRobotEvent e) {
		if ( enemy.none() || e.getDistance() < enemy.getDistance() - 70 ||
			e.getName().equals(enemy.getName())) {
			enemy.update(e, this);}
			
		double firePower = Math.min(500 / enemy.getDistance(), 3);
		double bulletSpeed = 20 - firePower * 3;
		long time = (long)(enemy.getDistance() / bulletSpeed);	

		// calculate gun turn to predicted x,y location
		double futureX = enemy.getFutureX(time);
		double futureY = enemy.getFutureY(time);
		double absDeg = absoluteBearing(getX(), getY(), futureX, futureY);
		
		// turn the gun to the predicted x,y location
		setTurnGunRight(normalizeBearing(absDeg - getGunHeading()));
		setTurnRadarRight((getHeading() + e.getBearing() - getRadarHeading()) * 1.6);

		//setTurnRadarRight(getHeading() - getRadarHeading() + e.getBearing());			
		if (getGunHeat() == 0 && Math.abs(getGunTurnRemaining()) < 30)
		setFire(Math.min(400 / enemy.getDistance(), 3));

		
		//execute();
			
	}


	/**
	 * onHitByBullet: What to do when you're hit by a bullet
	 */
	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(90 - e.getBearing());
	}

	public void onRobotDeath(RobotDeathEvent e) {
		if (e.getName().equals(enemy.getName())) 
		enemy.reset();
	}
	
	// normalizes a bearing to between +180 and -180
	double normalizeBearing(double angle) {
		while (angle >  180) angle -= 360;
		while (angle < -180) angle += 360;
	return angle;
	}
	
	// computes the absolute bearing between two points
	double absoluteBearing(double x1, double y1, double x2, double y2) {
		double xo = x2-x1;
		double yo = y2-y1;
		double hyp = Point2D.distance(x1, y1, x2, y2);
		double arcSin = Math.toDegrees(Math.asin(xo / hyp));
		double bearing = 0;

		if (xo > 0 && yo > 0) { // both pos: lower-Left
			bearing = arcSin;
		} else if (xo < 0 && yo > 0) { // x neg, y pos: lower-right
			bearing = 360 + arcSin; // arcsin is negative here, actuall 360 - ang
		} else if (xo > 0 && yo < 0) { // x pos, y neg: upper-left
			bearing = 180 - arcSin;
		} else if (xo < 0 && yo < 0) { // both neg: upper-right
			bearing = 180 - arcSin; // arcsin is negative here, actually 180 + ang
		}
	return bearing;
	}	

	
}

Klasa AdvancedEnemyBot:

package pg;

import robocode.*;

/**
 * AdvancedEnemyBot - a class by (Przemek)
 */

public class AdvancedEnemyBot extends EnemyBot {
    private double x, y;

    public AdvancedEnemyBot() {
        this.reset();
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }

    public void update(ScannedRobotEvent e, Robot robot) {
        super.update(e);
       
        double absBearingDeg = (robot.getHeading() + e.getBearing());
       
        if (absBearingDeg < 0) {
            absBearingDeg += 360;
        }
       
        x = robot.getX() + Math.sin(Math.toRadians(absBearingDeg)) * e.getDistance();
       
        y = robot.getY() + Math.cos(Math.toRadians(absBearingDeg)) * e.getDistance();
    }

    public double getFutureX(long when) {
        return x + Math.sin(Math.toRadians(getHeading())) * getVelocity() * when;
    }

    public double getFutureY(long when) {
        return y + Math.cos(Math.toRadians(getHeading())) * getVelocity() * when;
    }

    public void reset() {
        super.reset();
        x = 0;
        y = 0;
    }

}

Klasa EnemyBot:

package pg;
import robocode.*;

/**
 * EnemyBot - a class by (Przemek)
 */

public class EnemyBot {
    private double bearing, distance, energy, heading, velocity;
    private String name;

    public EnemyBot() {
        reset();
    }

    public double getBearing() {
        return bearing;
    }
	
	double normalizeBearing(double angle) {
	while (angle >  180) angle -= 360;
	while (angle < -180) angle += 360;
	return angle;
	}

	
    public double getDistance() {
        return distance;
    }

    public double getEnergy() {
        return energy;
    }

    public double getHeading() {
        return heading;
    }

    public double getVelocity() {
        return velocity;
    }

    public String getName() {
        return name;
    }

    public void update(ScannedRobotEvent srEvt) {
        bearing = srEvt.getBearing();
        distance = srEvt.getDistance();
        energy = srEvt.getEnergy();
        heading = srEvt.getHeading();
        velocity = srEvt.getVelocity();
        name = srEvt.getName();
    }

    public void reset() {
        bearing = 0.0;
        distance = 0.0;
        energy = 0.0;
        heading = 0.0;
        velocity = 0.0;
        name = "";
    }

    public boolean none() {
        return name.length() == 0;
    }
}