Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:tracking

Dies ist eine alte Version des Dokuments!


Tracking der gegnerischen Roboter

Für viele Techniken ist es wichtig, Informationen über die gegnerischen Roboter zu haben. Dazu werden die Informationen, welche beim Scannen der Roboter mittels <javadoc robocode>robocode.Robot#onScannedRobot(robocode.ScannedRobotEvent)|onScannedRobot()</javadoc> anfallen, in geeigneter Weise zwischengespeichert.

Die Klasse EnemyRobot speichert die Information (Position) eines Roboters:

public class EnemyRobot
{
    private Robot ownRobot;
    private String name;
    private double x;
    private double y;
 
    public EnemyRobot(Robot ownRobot, String name) {
        this.ownRobot = ownRobot;
        this.name = name;
    }
 
    public void update(ScannedRobotEvent e) {
        double headingToRobot = ownRobot.getHeading() + e.getBearing();
        x = ownRobot.getX() + e.getDistance() * Math.sin(Math.toRadians(headingToRobot));
        y = ownRobot.getY() + e.getDistance() * Math.cos(Math.toRadians(headingToRobot));
    }
 
    public String getName() {
        return name;
    }
 
    public double getX() {
        return x;
    }
 
    public double getY() {
        return y;
    }
}

Die Klasse EnemyRobots speichert alle bekannten Roboter.

import java.util.HashMap;
import java.util.Map;
import robocode.*;
 
public class EnemyRobots
{
    private Map<String, EnemyRobot> enemies;
    private Robot ownRobot;
 
    public EnemyRobots(Robot ownRobot) {
        enemies = new HashMap<String, EnemyRobot>();
        this.ownRobot = ownRobot;
    }
 
    public void update(ScannedRobotEvent e) {
        if (!enemies.containsKey(e.getName())) {
            // Gegner noch nicht bekannt
            enemies.put(e.getName(), new EnemyRobot(ownRobot, e.getName()));
        }
 
        enemies.get(e.getName()).update(e);
    }
}
robocode/tracking.1427718307.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)