Quellcode
- /**
- * @author Torben Brodt
- * <p />Quadrat: Roboter bewegen sich in zufaellige Richtungen
- * <p />Observer Anwendung
- * <p />Funktioniert ab Java 1.5
- */
- import java.util.*;
- public class A06_Roboter {
- public static void main(String[] args) {
- StepTimer t = new StepTimer();
- t.addObserver(new Robot("Adam"));
- t.addObserver(new Robot("Eva"));
- t.addObserver(new Robot("Cindy"));
- t.addObserver(new Robot("Bert"));
- t.start();
- }
- }
- /**
- * Sleeptimer
- */
- class StepTimer extends Observable {
- public void start() {
- while(true) {
- //Eine kleine Sleep Funktion, damit die CPU nicht fortlaufend mit 100% werkelt
- try {
- Thread.sleep(1000);
- setChanged();
- notifyObservers();
- } catch (Exception e){
- // Zu viel Koffein
- }
- }
- }
- }
- /**
- * Roboter
- */
- class Robot implements Observer {
- String name;
- int x=50, y=50, step=0;
- /**
- * Konstruktor
- */
- Robot(String name) {
- this.name = name;
- }
- /**
- * gibt +1, -1 oder nil zurueck
- */
- private int leftRightOrUpDown() {
- double d = Math.random();
- if (d<0.4) return -1;
- if (d<0.8) return 1;
- return 0;
- }
- /**
- * Updatet die Position
- * @param o Observer
- * @param arg unbenutzt
- */
- public void update(Observable o, Object arg) {
- System.out.print(this.name+" bewegt sich im "+(++this.step)+
- ". Schritt von ("+this.x+","+this.y+")");
- do
- this.x += leftRightOrUpDown();
- while(this.x > 100 || this.x < 0);
- do
- this.y += leftRightOrUpDown();
- while(this.y > 100 || this.y < 0);
- System.out.println(" nach ("+this.x+","+this.y+")");
- }
- }
Ausgabe:
Bert bewegt sich im 1. Schritt von (50,50) nach (51,50)
Cindy bewegt sich im 1. Schritt von (50,50) nach (51,49)
Eva bewegt sich im 1. Schritt von (50,50) nach (51,50)
Adam bewegt sich im 1. Schritt von (50,50) nach (49,51)
Bert bewegt sich im 2. Schritt von (51,50) nach (52,51)
Cindy bewegt sich im 2. Schritt von (51,49) nach (51,50)
Eva bewegt sich im 2. Schritt von (51,50) nach (50,51)
Adam bewegt sich im 2. Schritt von (49,51) nach (48,51)
Bert bewegt sich im 3. Schritt von (52,51) nach (51,51)
Cindy bewegt sich im 3. Schritt von (51,50) nach (51,50)
Eva bewegt sich im 3. Schritt von (50,51) nach (50,50)
Adam bewegt sich im 3. Schritt von (48,51) nach (49,52)
Bert bewegt sich im 4. Schritt von (51,51) nach (52,52)
Cindy bewegt sich im 4. Schritt von (51,50) nach (52,49)
Eva bewegt sich im 4. Schritt von (50,50) nach (50,50)
Adam bewegt sich im 4. Schritt von (49,52) nach (50,51)