Dies ist eine alte Version des Dokuments!
Programm, welches einen Roboter vorwärts bewegen und drehen lässt. Realisierung mit Klassen (Processing / Java):
Im Sketch-Tab:
Robot myRobot = new Robot(25, 100, 100, 0); void setup() { size(600, 400); } void draw() { clear(); myRobot.drawRobot(); myRobot.move(4); myRobot.turn(0.1); }
Im neuen Tab „Robot“:
class Robot { // Attribute: int radius; // Radius des Roboters float xPos; // x-Position des Roboters float yPos; // y-Position des Roboters float angle; // Richtung des Roboters /* * Konstruktor */ Robot(int paramRadius, float paramXPos, float paramYPos, float paramAngle) { this.radius = paramRadius; this.xPos = paramXPos; this.yPos = paramYPos; this.angle = paramAngle; } /* * Zeichnet den Roboter */ void drawRobot() { ellipse(xPos, yPos, radius*2, radius*2); // *2, weil die ellipse-Funktion den Diameter verwendet line(xPos, yPos, xPos + radius * cos(angle), yPos + radius * sin(angle)); // Linie zwischen dem Roboterzentrum und dem Roboterrand in die Bewegungsrichtung } /* * Bewegt den Roboter nach vorne in seine Richtung */ void move(float distance) { xPos = xPos + distance * cos(angle); yPos = yPos + distance * sin(angle); } /* * Rotiert den Roboter */ void turn(float angleDiff) { angle = angle + angleDiff; } }
Robot robot1; // Der 1. Roboter Robot robot2; // Der 2. Roboter void setup() { size(600, 400); robot1 = new Robot(25, 300, 200, PI/4); // den 1. Roboter initialisieren robot2 = new Robot(50, 50, 200, 0); // den 2. Roboter initialisieren } void draw() { clear(); robot1.drawRobot(); // beide Roboter zeichnen robot2.drawRobot(); robot1.turn(0.1); // beide Roboter bewegen robot1.move(4); robot2.move(2); // Falls die beiden zu nah sind, sollen sie sich umdrehen: if (robot1.radius + robot2.radius >= robot1.distance(robot2)) { robot1.turn(PI); robot2.turn(PI); } }
Im neuen Tab „Robot“:
class Robot { // Attribute: int radius; // Radius des Roboters float xPos; // x-Position des Roboters float yPos; // y-Position des Roboters float angle; // Richtung des Roboters /* * Konstruktor */ Robot(int paramRadius, float paramXPos, float paramYPos, float paramAngle) { this.radius = paramRadius; this.xPos = paramXPos; this.yPos = paramYPos; this.angle = paramAngle; } // Methoden: /* * Berechnet die Entfernung zwischen dem Zentrum von diesem Roboter und vom anderen Roboter */ float distance(Robot other) { float deltaX = this.xPos - other.xPos; float deltaY = this.yPos - other.yPos; float dist = sqrt((sq(deltaX) + sq(deltaY))); return dist; } /* * Zeichnet den Roboter */ void drawRobot() { ellipse(xPos, yPos, radius*2, radius*2); // *2, weil die ellipse-Funktion den Diameter verwendet line(xPos, yPos, xPos + radius * cos(angle), yPos + radius * sin(angle)); // Linie zwischen dem Roboterzentrum und dem Roboterrand in die Bewegungsrichtung } /* * Bewegt den Roboter nach vorne in seine Richtung */ void move(float distance) { xPos = xPos + distance * cos(angle); yPos = yPos + distance * sin(angle); } /* * Dreht den Roboter */ void turn(float angleDiff) { angle = angle + angleDiff; } }