diff --git a/src/j2024/FT/AriadneIterator.java b/src/j2024/FT/AriadneIterator.java new file mode 100644 index 0000000..e12e23b --- /dev/null +++ b/src/j2024/FT/AriadneIterator.java @@ -0,0 +1,72 @@ +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Stack; + +public class AriadneIterator implements Iterator{ + private Room entry; + private Stack ariadnesThread; + private List visited; + + private State currentstate; + + public AriadneIterator(Room entry) { + this.entry = entry; + } + + + @Override + public boolean hasNext() { + return cs.hasNext(); + } + + @Override + public Room next() { + return ariadnesThread.peek(); + } + + public void stepRetreating() { + ariadnesThread.pop(); + } + + public boolean hasMinotaur() { + return ariadnesThread.peek().getMinotaur(); + } + + public void step() { + currentstate.step(); + } + + public void init() { + ariadnesThread = new Stack<>(); + ariadnesThread.push(entry); + visited = new ArrayList<>(); + visited.add(entry); + currentstate = new Starting(); + } + + private class Starting implements State { + @Override + public void step() { + init(); + } + + @Override + public boolean hasNext() { + return false; + } + } + + private class Accomplished implements State { + @Override + public void step() { + stepRetreating(); + } + + public boolean hasNext() { + return !ariadnesThread.empty(); + } + } + + +} diff --git a/src/j2024/FT/CreateSmallMaze.java b/src/j2024/FT/CreateSmallMaze.java new file mode 100644 index 0000000..7e609cd --- /dev/null +++ b/src/j2024/FT/CreateSmallMaze.java @@ -0,0 +1,16 @@ +public class CreateSmallMaze { + + + public static Room createSmallMaze() { + Room a = new Room("a2"); + Room b = new Room("b2"); + b.addReachable(a); + a = new Room("b1"); + a.setMinotaur(true); + a.addReachable(b); + b = new Room("a1"); + b.addReachable(a); + + return b; + } +} diff --git a/src/j2024/FT/CreateSmallMazeTest.java b/src/j2024/FT/CreateSmallMazeTest.java new file mode 100644 index 0000000..d4e34dd --- /dev/null +++ b/src/j2024/FT/CreateSmallMazeTest.java @@ -0,0 +1,23 @@ +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class CreateSmallMazeTest { + + Room entry = CreateSmallMaze.createSmallMaze(); + + @Test + public void testSmallMaze() { + AriadneIterator iter = new AriadneIterator(entry); + + // Erstes next ruft nur init() auf sodass wir nun mit dem Iterator arbeiten können + iter.next(); + + + assertEquals("a2", iter.next().getName()); + assertEquals("b2", iter.next().getName()); + assertEquals("b1", iter.next().getName()); + assertEquals("b2", iter.next().getName()); + assertEquals("a2", iter.next().getName()); + } +} diff --git a/src/j2024/FT/Room.java b/src/j2024/FT/Room.java new file mode 100644 index 0000000..ee6ea7d --- /dev/null +++ b/src/j2024/FT/Room.java @@ -0,0 +1,28 @@ +import java.util.HashSet; +import java.util.Set; + +public class Room { + private String name; + private boolean minotaur; + + private Set reachable; + + public Room(String name) { + this.name = name; + minotaur = false; + reachable = new HashSet<>(); + } + + public void setMinotaur(boolean v) { + minotaur = v; + } + + public void setName(String name) { + this.name = name; + } + + public void addReachable(Room room) { + reachable.add(room); + room.addReachable(this); + } +}