OH-bilderna (som jag aldrig lyckades visa under föreläsningen) finns här, programkoden är här:
import se.lth.cs.pt.graphics.basic.*; import se.lth.cs.pt.turtle.visible.*; import java.util.Random; class Walkabout { public static void main(String[] args) { new Walkabout().run(); } void run() { GraphicsWindow w = new GraphicsWindow(500, 500); RandomTurtle t1 = new RandomTurtle(w); RandomTurtle t2 = new RandomTurtle(w); Random rng = new Random(); while (t1.distanceTo(t2) > 50 && t1.insideWindow() && t2.insideWindow()) { t1.randomStep(); t2.randomStep(); } System.out.println("Antal steg för t1: " + t1.getNbrOfSteps()); } } class GeometricTurtle extends Turtle { public GeometricTurtle (GraphicsWindow w, double x, double y) { // anropa superklassens konstruktor, för att 'ärvda' attribut // skall få sina startvärden: super(w, x, y); } public double distanceTo(GeometricTurtle other) { double dx = getX() - other.getX(); double dy = getY() - other.getY(); return Math.sqrt(dx * dx + dy * dy); } public boolean insideWindow() { return 0 <= getX() && getX() < getWindow().getWidth() && 0 <= getY() && getY() < getWindow().getHeight(); } } class RandomTurtle extends GeometricTurtle { private Random rng = new Random(); public RandomTurtle (GraphicsWindow w) { super(w, 0, 0); jumpTo(rng.nextInt(w.getWidth()), rng.nextInt(w.getHeight())); } public void randomStep() { left(rng.nextInt(61) - 30); forward(rng.nextInt(6) + 1); } } class DrawPolygons { public static void main(String[] args) { new DrawPolygons().run(); } void run() { GraphicsWindow w = new GraphicsWindow(500, 500); PolygonTurtle t = new PolygonTurtle(w, 200); for (int sides = 3; sides <= 10; sides++) { w.waitForMouseClick(); t.jumpTo(w.getMouseX(), w.getMouseY()); t.drawPolygon(sides); } } } class PolygonTurtle extends Turtle { private int circumference; public PolygonTurtle (GraphicsWindow w, int circumference) { super(w, w.getWidth()/2, w.getHeight()/2); this.circumference = circumference; penDown(); setSpeed(30); } public void drawPolygon(int sides) { for (int k = 1; k <= sides; k++) { forward(circumference / sides); left(360 / sides); } } } class MilitaryTurtle extends PolygonTurtle { public void left() { left(90); } } class Tattoo { public static void main(String[] args) { new Tattoo().run(); } void run() { MilitaryTurtle t = new MilitaryTurtle(); t.left(78); t.left(); MedicalTurtle mt = new MedicalTurtle(); mt.left(45); // vrider 45 grader åt höger... } } class MedicalTurtle extends Turtle { public void left(int angle) { super.right(angle); } public void right(int angle) { super.left(angle); } } class StepCountingTurtle extends Turtle { protected int nbrOfSteps; public void forward(int steps) { nbrOfSteps += steps; super.forward(steps); } public int getNbrOfSteps() { return nbrOfSteps; } }