Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:tracking

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
robocode:tracking [2015/03/30 14:26] rosrobocode:tracking [2020/10/13 14:25] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 6: Zeile 6:
  
 <code java> <code java>
 +import robocode.*;
 +import robocode.util.*;
 +
 public class EnemyRobot public class EnemyRobot
 { {
     private Robot ownRobot;     private Robot ownRobot;
     private String name;     private String name;
 +    private double velocity;
     private double x;     private double x;
     private double y;     private double y;
Zeile 20: Zeile 24:
     public void update(ScannedRobotEvent e) {     public void update(ScannedRobotEvent e) {
         double headingToRobot = ownRobot.getHeading() + e.getBearing();         double headingToRobot = ownRobot.getHeading() + e.getBearing();
 +        velocity = e.getVelocity();
         x = ownRobot.getX() + e.getDistance() * Math.sin(Math.toRadians(headingToRobot));         x = ownRobot.getX() + e.getDistance() * Math.sin(Math.toRadians(headingToRobot));
         y = ownRobot.getY() + e.getDistance() * Math.cos(Math.toRadians(headingToRobot));         y = ownRobot.getY() + e.getDistance() * Math.cos(Math.toRadians(headingToRobot));
 +    }
 +
 +    public double getDistance() {
 +        double dx = x - ownRobot.getX();
 +        double dy = y - ownRobot.getY();
 +        return Math.sqrt(dx*dx + dy*dy);
 +    }
 +
 +    public double getHeading() {
 +        return Utils.normalAbsoluteAngleDegrees(Math.toDegrees(Math.atan2(x - ownRobot.getX(), y - ownRobot.getY())));
     }     }
  
     public String getName() {     public String getName() {
         return name;         return name;
 +    }
 +
 +    public double getVelocity() {
 +        return velocity;
     }     }
  
Zeile 38: Zeile 57:
 </code> </code>
  
-Die Klasse ''EnemyRobots'' speichert alle bekannten Roboter.+Die Klasse ''EnemyTracker'' führt eine Liste aller bekannten Roboter und aktualisiert diese.
  
 <code java> <code java>
-import java.util.HashMap; +import java.util.*;
-import java.util.Map;+
 import robocode.*; import robocode.*;
  
-public class EnemyRobots+public class EnemyTracker
 { {
     private Map<String, EnemyRobot> enemies;     private Map<String, EnemyRobot> enemies;
     private Robot ownRobot;     private Robot ownRobot;
  
-    public EnemyRobots(Robot ownRobot) {+    public EnemyTracker(Robot ownRobot) {
         enemies = new HashMap<String, EnemyRobot>();         enemies = new HashMap<String, EnemyRobot>();
         this.ownRobot = ownRobot;         this.ownRobot = ownRobot;
 +    }
 +
 +    // Idea by Michael Marti
 +    public EnemyRobot getClosestEnemy() {
 +        EnemyRobot closest = null;
 +        for (EnemyRobot enemy : getEnemies()) {
 +            if (closest == null || enemy.getDistance() < closest.getDistance()) {
 +                closest = enemy;
 +            }
 + }
 +
 +        return closest;
 +    }
 +
 +    public Collection<EnemyRobot> getEnemies() {
 +        return enemies.values();
     }     }
  
Zeile 62: Zeile 96:
  
         enemies.get(e.getName()).update(e);         enemies.get(e.getName()).update(e);
 +    }
 +}
 +</code>
 +
 +Im eigenen Roboter wird ein ''EnemyTracker''-Objekt erzeugt. Bei jedem Aufruf von <javadoc robocode>robocode.Robot#onScannedRobot(robocode.ScannedRobotEvent)|onScannedRobot()</javadoc> wird die ''update()''-Methode des ''EnemyTracker'' aufgerufen.
 +
 +<code java>
 +public class MyRobot extends Robot {
 +
 +    private EnemyTracker enemyTracker;
 +
 +    public void run() {
 +        enemyTracker = new EnemyTracker(this);
 +        // Weitere Aktionen
 +    }
 +    
 +    public void onScannedRobot(ScannedRobotEvent e) {
 +        enemyTracker.update(e);
 +        // Weitere Aktionen
     }     }
 } }
 </code> </code>
robocode/tracking.1427718383.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)