aboutsummaryrefslogtreecommitdiff
path: root/Week4/src/oo15loipe/Loipe.java
diff options
context:
space:
mode:
authorCamil Staps2015-02-26 16:59:03 +0100
committerCamil Staps2015-02-26 16:59:03 +0100
commitd3f1a43a9463c4c8be06c8074869b3b7fabc213d (patch)
tree25b2ac3fc79cf1ecc9d683cf555168f4a7d5e11d /Week4/src/oo15loipe/Loipe.java
parentx (diff)
Added base framework week4
Diffstat (limited to 'Week4/src/oo15loipe/Loipe.java')
-rw-r--r--Week4/src/oo15loipe/Loipe.java173
1 files changed, 173 insertions, 0 deletions
diff --git a/Week4/src/oo15loipe/Loipe.java b/Week4/src/oo15loipe/Loipe.java
new file mode 100644
index 0000000..308ac8b
--- /dev/null
+++ b/Week4/src/oo15loipe/Loipe.java
@@ -0,0 +1,173 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package oo15loipe;
+
+/**
+ * @author Camil Staps, s4498062 // Thijs Heijligenberg, s4451414
+ */
+public class Loipe implements InfoLoipe {
+
+ private final static int DIRECTION_EAST = 0,
+ DIRECTION_SOUTH = 1,
+ DIRECTION_WEST = 2,
+ DIRECTION_NORTH = 3;
+
+ private int height = 0, width = 0;
+
+ private Punt start;
+ private Punt[] path;
+ private int path_pointer = 0;
+ private Fragment[][] loipe;
+
+ public Loipe (String pad) {
+
+ // First calculate width and height
+ int direction = DIRECTION_NORTH;
+
+ int maxX = 0, maxY = 0, minX = 0, minY = 0;
+ Punt current_point = new Punt(0,0);
+
+ for (int i = 0; i < pad.length(); i++) {
+ if (current_point.getX() < minX)
+ minX = current_point.getX();
+ if (current_point.getX() > maxX)
+ maxX = current_point.getX();
+ if (current_point.getY() < minY)
+ minY = current_point.getY();
+ if (current_point.getY() > maxY)
+ maxY = current_point.getY();
+
+ switch (pad.charAt(i)) {
+ case 'r':
+ switch (direction) {
+ case DIRECTION_EAST: direction = DIRECTION_SOUTH; break;
+ case DIRECTION_SOUTH: direction = DIRECTION_WEST; break;
+ case DIRECTION_WEST: direction = DIRECTION_NORTH; break;
+ case DIRECTION_NORTH: direction = DIRECTION_EAST; break;
+ }
+ break;
+ case 'l':
+ switch (direction) {
+ case DIRECTION_EAST: direction = DIRECTION_NORTH; break;
+ case DIRECTION_SOUTH: direction = DIRECTION_EAST; break;
+ case DIRECTION_WEST: direction = DIRECTION_SOUTH; break;
+ case DIRECTION_NORTH: direction = DIRECTION_WEST; break;
+ }
+ }
+
+ switch (direction) {
+ case DIRECTION_EAST: current_point = new Punt(current_point.getX() + 1, current_point.getY()); break;
+ case DIRECTION_SOUTH: current_point = new Punt(current_point.getX(), current_point.getY() + 1); break;
+ case DIRECTION_WEST: current_point = new Punt(current_point.getX() - 1, current_point.getY()); break;
+ case DIRECTION_NORTH: current_point = new Punt(current_point.getX(), current_point.getY() - 1); break;
+ }
+
+ System.out.println(pad.charAt(i) + ":" + direction);
+ }
+
+ System.out.println();
+ System.out.println(maxX);
+ System.out.println(minX);
+ System.out.println(maxY);
+ System.out.println(minY);
+
+ height = maxY - minY;
+ width = maxX - minX;
+ start = new Punt(-minX, -minY);
+
+ // Now fill the Loipe
+ loipe = new Fragment[width][height];
+ path = new Punt[pad.length()];
+ current_point = new Punt(-minX, -minY);
+ direction = DIRECTION_NORTH;
+
+ for (int i = 0; i < pad.length(); i++) {
+ path[i] = current_point;
+
+ if (loipe[current_point.getX()][current_point.getY()] == null) {
+ loipe[current_point.getX()][current_point.getY()] = Fragment.KR;
+ } else {
+ switch (pad.charAt(i)) {
+ case 'r':
+ switch (direction) {
+ case DIRECTION_EAST: loipe[current_point.getX()][current_point.getY()] = Fragment.ZW; break;
+ case DIRECTION_SOUTH: loipe[current_point.getX()][current_point.getY()] = Fragment.NW; break;
+ case DIRECTION_WEST: loipe[current_point.getX()][current_point.getY()] = Fragment.NO; break;
+ case DIRECTION_NORTH: loipe[current_point.getX()][current_point.getY()] = Fragment.ZO; break;
+ }
+ break;
+ case 'l':
+ switch (direction) {
+ case DIRECTION_EAST: loipe[current_point.getX()][current_point.getY()] = Fragment.NW; break;
+ case DIRECTION_SOUTH: loipe[current_point.getX()][current_point.getY()] = Fragment.NO; break;
+ case DIRECTION_WEST: loipe[current_point.getX()][current_point.getY()] = Fragment.ZO; break;
+ case DIRECTION_NORTH: loipe[current_point.getX()][current_point.getY()] = Fragment.ZW; break;
+ }
+ }
+ }
+
+ switch (pad.charAt(i)) {
+ case 'r':
+ switch (direction) {
+ case DIRECTION_EAST: direction = DIRECTION_SOUTH; break;
+ case DIRECTION_SOUTH: direction = DIRECTION_WEST; break;
+ case DIRECTION_WEST: direction = DIRECTION_NORTH; break;
+ case DIRECTION_NORTH: direction = DIRECTION_EAST; break;
+ }
+ break;
+ case 'l':
+ switch (direction) {
+ case DIRECTION_EAST: direction = DIRECTION_NORTH; break;
+ case DIRECTION_SOUTH: direction = DIRECTION_EAST; break;
+ case DIRECTION_WEST: direction = DIRECTION_SOUTH; break;
+ case DIRECTION_NORTH: direction = DIRECTION_WEST; break;
+ }
+ }
+
+ switch (direction) {
+ case DIRECTION_EAST: current_point = new Punt(current_point.getX() + 1, current_point.getY()); break;
+ case DIRECTION_SOUTH: current_point = new Punt(current_point.getX(), current_point.getY() + 1); break;
+ case DIRECTION_WEST: current_point = new Punt(current_point.getX() - 1, current_point.getY()); break;
+ case DIRECTION_NORTH: current_point = new Punt(current_point.getX(), current_point.getY() - 1); break;
+ }
+ }
+ }
+
+ @Override
+ public int getHeight() {
+ return height;
+ }
+
+ @Override
+ public int getWidth() {
+ return width;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for (Punt p : path) {
+ sb.append(p).append(" -> ");
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public Fragment getFragment(int x, int y) {
+ return loipe[x][y];
+ }
+
+ @Override
+ public Punt start() {
+ return start;
+ }
+
+ @Override
+ public Punt stap() {
+ return path[path_pointer++];
+ }
+
+}