Roboter als ObServer Anwendung

  • Roboter als ObServer Anwendung

    Quellcode

    1. /**
    2. * @author Torben Brodt
    3. * <p />Quadrat: Roboter bewegen sich in zufaellige Richtungen
    4. * <p />Observer Anwendung
    5. * <p />Funktioniert ab Java 1.5
    6. */
    7. import java.util.*;
    8. public class A06_Roboter {
    9. public static void main(String[] args) {
    10. StepTimer t = new StepTimer();
    11. t.addObserver(new Robot("Adam"));
    12. t.addObserver(new Robot("Eva"));
    13. t.addObserver(new Robot("Cindy"));
    14. t.addObserver(new Robot("Bert"));
    15. t.start();
    16. }
    17. }
    18. /**
    19. * Sleeptimer
    20. */
    21. class StepTimer extends Observable {
    22. public void start() {
    23. while(true) {
    24. //Eine kleine Sleep Funktion, damit die CPU nicht fortlaufend mit 100% werkelt
    25. try {
    26. Thread.sleep(1000);
    27. setChanged();
    28. notifyObservers();
    29. } catch (Exception e){
    30. // Zu viel Koffein
    31. }
    32. }
    33. }
    34. }
    35. /**
    36. * Roboter
    37. */
    38. class Robot implements Observer {
    39. String name;
    40. int x=50, y=50, step=0;
    41. /**
    42. * Konstruktor
    43. */
    44. Robot(String name) {
    45. this.name = name;
    46. }
    47. /**
    48. * gibt +1, -1 oder nil zurueck
    49. */
    50. private int leftRightOrUpDown() {
    51. double d = Math.random();
    52. if (d<0.4) return -1;
    53. if (d<0.8) return 1;
    54. return 0;
    55. }
    56. /**
    57. * Updatet die Position
    58. * @param o Observer
    59. * @param arg unbenutzt
    60. */
    61. public void update(Observable o, Object arg) {
    62. System.out.print(this.name+" bewegt sich im "+(++this.step)+
    63. ". Schritt von ("+this.x+","+this.y+")");
    64. do
    65. this.x += leftRightOrUpDown();
    66. while(this.x > 100 || this.x < 0);
    67. do
    68. this.y += leftRightOrUpDown();
    69. while(this.y > 100 || this.y < 0);
    70. System.out.println(" nach ("+this.x+","+this.y+")");
    71. }
    72. }
    Alles anzeigen


    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)