diff options
author | Camil Staps | 2015-02-26 16:59:03 +0100 |
---|---|---|
committer | Camil Staps | 2015-02-26 16:59:03 +0100 |
commit | d3f1a43a9463c4c8be06c8074869b3b7fabc213d (patch) | |
tree | 25b2ac3fc79cf1ecc9d683cf555168f4a7d5e11d /Week4 | |
parent | x (diff) |
Added base framework week4
Diffstat (limited to 'Week4')
-rw-r--r-- | Week4/src/oo15loipe/InfoLoipe.java | 8 | ||||
-rw-r--r-- | Week4/src/oo15loipe/Loipe.java | 173 | ||||
-rw-r--r-- | Week4/src/oo15loipe/Punt.java | 4 |
3 files changed, 178 insertions, 7 deletions
diff --git a/Week4/src/oo15loipe/InfoLoipe.java b/Week4/src/oo15loipe/InfoLoipe.java index 931a267..764e2f3 100644 --- a/Week4/src/oo15loipe/InfoLoipe.java +++ b/Week4/src/oo15loipe/InfoLoipe.java @@ -10,8 +10,10 @@ package oo15loipe; * @author cstaps */ public interface InfoLoipe { - public int getX() ; // grootte in oost−west ri c h ti n g - public int getY() ; // grootte in noord−zuid ri c h ti n g - public Fragment getFragment(int x, int y) ; // fragment van de l oi p e op p o si ti e (x , y) + public int getWidth(); // grootte in oost−west ri c h ti n g + public int getHeight(); // grootte in noord−zuid ri c h ti n g + public Fragment getFragment(int x, int y); // fragment van de l oi p e op p o si ti e (x , y) + public Punt start(); // Het startpunt op de kaart + public Punt stap(); // het volgende punt op de route } 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++]; + } + +} diff --git a/Week4/src/oo15loipe/Punt.java b/Week4/src/oo15loipe/Punt.java index 1939c45..2c94f1f 100644 --- a/Week4/src/oo15loipe/Punt.java +++ b/Week4/src/oo15loipe/Punt.java @@ -70,8 +70,4 @@ public class Punt { public String toString () { return "(" + x + "," + y + ")"; } - - public Punt add(Punt plus) { - return new Punt(x + plus.getX(), y + plus.getY()); - } } |