1 package org.woehlke.computer.kurzweil.commons.model.turing;
2
3
4
5
6
7
8
9
10
11
12 public class MandelbrotTuringPositions {
13
14 private volatile Point turingPosition;
15 private volatile Point worldDimensions;
16 private volatile Point firstSetPosition;
17
18 private volatile MandelbrotTuringDirection turingDirection;
19
20 private volatile int steps;
21
22 public MandelbrotTuringPositions(Point worldDimensions) {
23 this.worldDimensions = worldDimensions;
24 start();
25 }
26
27 public void start() {
28 this.steps = 0;
29 this.turingPosition = new Point((worldDimensions.getX()-2),(worldDimensions.getY()/2+11));
30 this.turingDirection = MandelbrotTuringDirection.LEFT;
31 }
32
33 public synchronized void markFirstSetPosition(){
34 this.firstSetPosition = turingPosition;
35 this.steps = 0;
36 }
37
38 public synchronized Point getTuringPosition() {
39 return turingPosition;
40 }
41
42 public synchronized void goForward() {
43 this.steps++;
44 switch (this.turingDirection){
45 case UP:
46 this.turingPosition.moveUp();
47 break;
48 case RIGHT:
49 this.turingPosition.moveRight();
50 break;
51 case DOWN:
52 this.turingPosition.moveDown();
53 break;
54 case LEFT:
55 this.turingPosition.moveLeft();
56 break;
57 default:
58 break;
59 }
60 }
61
62 public synchronized void turnRight() {
63 MandelbrotTuringDirection newTuringDirection;
64 switch (this.turingDirection){
65 case UP: newTuringDirection = MandelbrotTuringDirection.RIGHT; break;
66 case RIGHT: newTuringDirection = MandelbrotTuringDirection.DOWN; break;
67 case DOWN: newTuringDirection = MandelbrotTuringDirection.LEFT; break;
68 case LEFT: newTuringDirection = MandelbrotTuringDirection.UP; break;
69 default: newTuringDirection = this.turingDirection; break;
70 }
71 this.turingDirection = newTuringDirection;
72 }
73
74 public synchronized void turnLeft() {
75 MandelbrotTuringDirection newTuringDirection;
76 switch (this.turingDirection){
77 case UP: newTuringDirection = MandelbrotTuringDirection.LEFT; break;
78 case RIGHT: newTuringDirection = MandelbrotTuringDirection.UP; break;
79 case DOWN: newTuringDirection = MandelbrotTuringDirection.RIGHT; break;
80 case LEFT: newTuringDirection = MandelbrotTuringDirection.DOWN; break;
81 default: newTuringDirection = this.turingDirection; break;
82 }
83 this.turingDirection = newTuringDirection;
84 }
85
86 public synchronized boolean isFinishedWalkAround() {
87 return (this.turingPosition.equals(this.firstSetPosition)) && (this.steps>100);
88 }
89
90 }