diff --git a/Dokumentit/Kayttoohje.md b/Dokumentit/Kayttoohje.md index 243c81c..0b42b32 100644 --- a/Dokumentit/Kayttoohje.md +++ b/Dokumentit/Kayttoohje.md @@ -18,12 +18,20 @@ Ohjelman voi myös suorittaa ilman paketointia komennolla `mvn compile exec:java ## Syötteet -Käyttäjä voi valita minkä kokoisen labyrintin ohjelma ratkaisee. +Käyttäjä voi valita minkä kokoisen labyrintin ohjelma ratkaisee sekä käytetäänkö rekursiivista vai while-loop ratkaisua. -### Koko taulukko +### Koko taulukko -* Small - 20 x 20 +Rekursiivinen koko, While-loop koko. -* Medium - 40 x 40 +* Small - 20 x 20 ja 40 x 40 -* Large - 80 x 80 +* Medium - 40 x 40 ja 80 x 80 + +* Large - 80 x 80 ja 2000 x 1000 + +### Rekursiivinen tai While-loop + +* Rekursiivinen ratkaisulla on tällä hetkellä huono optimointi suurilla kutsuilla joten se on rajoitettu opertoimaan alle 100x100 kokoisilla taulukoilla. + +* While-loop ratkaisu ei aiheuta ongelmia muistin suhteen joten sillä voidaan ratkaista suurempiakin taulukoita. Valittaessa vaihtoehdot `Large` sekä While-loop ohjelma ratkaisee 2000x1000 kokoisen taulukon, tämä voi kestää riippuen tietokoneen tehosta. diff --git a/Dokumentit/Testausdokumentti.md b/Dokumentit/Testausdokumentti.md index 554abec..37fadfb 100644 --- a/Dokumentit/Testausdokumentti.md +++ b/Dokumentit/Testausdokumentti.md @@ -2,19 +2,19 @@ Ohjelma käyttää yksikkötestaukseen JUnit-kirjastoa. Testien tulokset ja raportit ilmestyvät projektikansioon `/target`, jossa niitä voidaan tarkastella -## JUnit +## JUnit - Yksikkötestaus JUnit testis voidaan suorittaa komennolla `mvn test`. **HUOM** raporttien luomiseksi täytyy tämä komento suorittaa ensiksi. `/target` kansio voidaan poistaa komennolla `mvn clean`. -### Testikattavuus -Jacoco +### Jacoco - Testikattavuus Testikattavuus voidaan tarkistaa Jacoco-raportilla joka voidaan luoda komennolla `mvn jacoco:report`. `/target` kansioon ilmestyy `/site` kansio josta voidaan tarkastella testikattavuutta, tiedosto `index.html` kertoo koko ohjelman kattavuudesta. -### Checkstyle +### Checkstyle - Koodin tyyli Checkstyle raportti voidaan luoda komennolla `mvn checkstyle:checkstyle`, jonka jälkeen `/target/site` kansioon ilmestyy tiedosto `checkstyle.html`, tästä nähdään koodissa olevia puutteita tai rikkeitä konventiossa. diff --git a/Dokumentit/Toteutusdokumentti.md b/Dokumentit/Toteutusdokumentti.md index df597d7..46db2c5 100644 --- a/Dokumentit/Toteutusdokumentti.md +++ b/Dokumentit/Toteutusdokumentti.md @@ -1,19 +1,20 @@ # Ohjelman rakenne -Projekti on jaettu kolmeen pakettiin jotka sisältävät jonkin ohjelman osa-alueen. +Projekti on jaettu seuraaviin paketteihin jotka sisältävät tietyn ohjelman osa-alueen. ## Paketit -* `.maze` - Sisältää labyrintin luomiseen ja muokkaamiseen tarvittavat luokat. +* `.maze` - Sisältää labyrintin luomiseen, muokkaamiseen sekä sen toimintaan liittyvät luokat. * `.gui` - Sisältää ohjelman graafisen käyttöliittymän. -* `.solving` - Sisältää ohjelman ratkaisu algoritmin ja sen toimintaan tarvittavat luokat. +* `.solving` - Sisältää ohjelman ratkaisu algoritmin sekä siihen liittyvät luokat. + +* `.util` - Sisältää ohjelman tarvitsemat tietorakenteet * `.testing` - Sisältää ohjelman testaamiseen tarvittavat luokat. ### Maze paketti -Sisältää seuraavat luokat * Maze - luo ja hallitsee labyrintin logiikkaa ja opertointia. @@ -22,16 +23,25 @@ Sisältää seuraavat luokat * Square - auttaa tallentamaan kaksiuloitteisen listan koordinaatit. ### Gui paketti -Sisältää luokan * GUI - luo graafisen käyttöliittymän sekä luo, generoi ja ratkaisee Maze luokan joka esitetään käyttäjälle. ### Solving paketti -Sisältää seuraavat luokat * WallFollower - Wall follower algoritmi joka etsii ratkaisun annetusta labyrintistä. +### Util paketti + +* SquareList - Itseään kasvattava lista johon voidaan lisätä Square luokan olioita. + +* SquareQue - Linkitetty lista joka muodostaa jonon Square luokan olioista, toimii nopeasti kun haetaan listan ensimmäinen tai viimeinen olio. + ## Testitulokset -Poislukien `cs.helsinki.fi.gui`, kaikki paketit ja luokat yksikkötestaan JUnit kirjastolla. -Ohjelman tehokkuutta ei ole vielä testattu. +### Yksikkötestaus + +Poislukien `cs.helsinki.fi.gui`, kaikki luokat yksikkötestaan JUnit kirjastolla, testit voidaan suorittaa komennolla `mvn test`. + +### Tehokkuustestaus + +Ohjelman tehokkuutta ei vielä ole testattu. diff --git a/maze-solver/src/main/java/cs/helsinki/fi/gui/GUI.java b/maze-solver/src/main/java/cs/helsinki/fi/gui/GUI.java index 8388b6b..9a5df6b 100644 --- a/maze-solver/src/main/java/cs/helsinki/fi/gui/GUI.java +++ b/maze-solver/src/main/java/cs/helsinki/fi/gui/GUI.java @@ -120,19 +120,19 @@ public Scene getStartScene(Stage stage) { if (selectedString2.equals("Recursive")) { String setting = "Recursive"; if (selectedString.equals("Small")) { - stage.setScene(getSolveStage(21, 21, 18, setting)); + stage.setScene(getSolveScene(21, 21, 18, setting)); stage.setTitle("Maze generator - Recursive Small"); } if (selectedString.equals("Medium")) { - stage.setScene(getSolveStage(41, 41, 16, setting)); + stage.setScene(getSolveScene(41, 41, 16, setting)); stage.setTitle("Maze generator - Recursive Medium"); } // Stack overflow if over 100x100 if (selectedString.equals("Large")) { - stage.setScene(getSolveStage(81, 81, 14, setting)); + stage.setScene(getSolveScene(81, 81, 14, setting)); stage.setTitle("Maze generator - Recursive Large"); } @@ -140,19 +140,19 @@ public Scene getStartScene(Stage stage) { } else { String setting = "Loop"; if (selectedString.equals("Small")) { - stage.setScene(getSolveStage(41, 41, 16, setting)); + stage.setScene(getSolveScene(41, 41, 16, setting)); stage.setTitle("Maze generator - Loop Small"); } if (selectedString.equals("Medium")) { - stage.setScene(getSolveStage(81, 81, 14, setting)); + stage.setScene(getSolveScene(81, 81, 14, setting)); stage.setTitle("Maze generator - Loop Medium"); } // Testing limits if (selectedString.equals("Large")) { - stage.setScene(getSolveStage(2001, 1001, 1, setting)); + stage.setScene(getSolveScene(2001, 1001, 1, setting)); stage.setTitle("Maze generator - Loop Large"); } @@ -167,7 +167,7 @@ public Scene getStartScene(Stage stage) { } /** - * Returns a canvas drawing of the solved maze + * Returns a canvas drawing of the solved maze. * * @param width - width of the maze that is solved * @param height - height of the maze that is solved @@ -175,14 +175,14 @@ public Scene getStartScene(Stage stage) { * @param setting - String name of the algorithm that is used * @return solvedScene - Scene with canvas of the solved maze */ - public Scene getSolveStage(int width, int height, int scale, String setting) { + public Scene getSolveScene(int width, int height, int scale, String setting) { this.maze = new Maze(width, height); this.scale = scale; this.canvas = new Canvas(maze.getWidth() * scale, maze.getHeight() * scale); Group root = new Group(); root.getChildren().add(canvas); - Scene s = new Scene(root, maze.getWidth() * scale, maze.getHeight() * scale, Color.BLUE); + Scene solveScene = new Scene(root, maze.getWidth() * scale, maze.getHeight() * scale, Color.BLUE); maze.generate(); if (setting.equals("Recursive")) { @@ -193,11 +193,11 @@ public Scene getSolveStage(int width, int height, int scale, String setting) { draw(); } - return s; + return solveScene; } /** - * Draws the maze to canvas + * Draws the maze to canvas. * */ public void draw() { diff --git a/maze-solver/src/main/java/cs/helsinki/fi/solving/WallFollower.java b/maze-solver/src/main/java/cs/helsinki/fi/solving/WallFollower.java index 83feded..336a296 100644 --- a/maze-solver/src/main/java/cs/helsinki/fi/solving/WallFollower.java +++ b/maze-solver/src/main/java/cs/helsinki/fi/solving/WallFollower.java @@ -89,28 +89,23 @@ public SquareList solve() { * @return SquareList - List of the path */ public SquareList move(Square pos, Direction dir, SquareList path) { - - // Reached finish if (maze.reachedFinish(pos)) { path.add(pos); return path; } - // Can move right if (canMove(pos, getDirectionToRight(dir))) { Direction newDir = getDirectionToRight(dir); Square right = getSquareInDirection(pos, newDir); path.add(right); return move(right, newDir, path); - } // Can move forward - else if (canMove(pos, dir)) { + } else if (canMove(pos, dir)) { Square forward = getSquareInDirection(pos, dir); path.add(forward); return move(forward, dir, path); - } // Can move left - else if (canMove(pos, getDirectionToLeft(dir))) { + } else if (canMove(pos, getDirectionToLeft(dir))) { Direction newDir = getDirectionToLeft(dir); Square left = getSquareInDirection(pos, newDir); path.add(left);