Code Monkey home page Code Monkey logo

labyrintin-ratkaisija's Introduction

Labyrintin ratkaisija

Dokumentaatio

Määrittely

Testaus

Toteutus

Kayttöohje

Raportit

Viikko 1

Viikko 2

Viikko 3

Viikko 4

Viikko 5

Viikko 6

Komentorivitoiminnot

Ohjelman suorittaminen

Ohjelma ajetaan komennolla

mvn compile exec:java -Dexec.mainClass=mazesolver.Main

Suoritettavan jarin generointi

mvn package

Luotu jar-tiedosto löytyy hakemistosta target nimellä MazeSolver-1.0-SNAPSHOT.jar

JavaDoc

JavaDoc luodaan komennolla

mvn javadoc:javadoc

Raportin tulos löytyy target/site/apidocs/ -hakemistosta nimellä index.html

Checkstyle

Checkstyle tarkistus suoritetaan komennolla

mvn jxr:jxr checkstyle:checkstyle

Raportin tulos löytyy target/site/ -hakemistosta nimellä checkstyle.html

labyrintin-ratkaisija's People

Contributors

jarkmaen avatar

Watchers

 avatar

labyrintin-ratkaisija's Issues

Vertaisarviointi

Tiralabra kurssin mukaisesti tässä viikon 5 vertaisarviontini. Projekti ladattu katselmointia varten pe 8.10.21 klo 10:03.

Yleisesti
Hienosti toteutettu sovellus käyttöliittymineen. Mielenkiintoista nähdä animoidusti kuinka toteuttamasi algoritmit toimivat. Vau! Projektin rakenne on järkevä: omat pakkaukset kutakin ylemmän tason toimintoa varten ja näissä olevat luokat ovat linjassa pakkauksen tarkoituksen kanssa ja palvelevat selkeästi juuri omaa tarkoitustaan. Koodiasi on yleisesti helppo lukea ja se on ymmärrettävää. Algoritmien tapauksessa kannattaa kokeilla löytää keinoja vähentää toisteista koodia, jotka on toteutettu kutakin suuntaa ("P","I","L" ja "E") varten. Annan muutamia vinkkejä alla. Lisäksi harkinnan arvoinen vinkki on, että jos kirjoitat kuvaksen, mitä metodin sisällä jokin pidempi koodinpätkä tekee, voi olla edullista tehdä siitä oma metodinsa, jota kutsutaan kommentin kohdassa. Toki oletkin jo toteuttanut järkevästi luokkien yksityisiä metodeja ehdotuksen mukaisesti.

Luokka: DeadEndFilling
Luokkassa on mahdollisuus selkeyttää koodia lisää ja vähentää toistuvia rivejä esimerkiksi seuraavasti korvaamalla rivit 45-81:

int suljettujaNaapureita = laskeSuljetutNaapurit(solmu);
int koko = verkko.hae(solmu).koko();
                
if (koko - suljettujaNaapureita == 0) {
    suljettu[solmu] = true;
    polku.lisaa(solmu);
     break;
}
 if (koko - suljettujaNaapureita == 1) {
    int seuraavaSolmu = etsiSeuraavaSolmu(solmu);
    solmu = seuraavaSolmu;
}              
if (koko - suljettujaNaapureita > 1) {
    break;
}

Luokka: Maze
Tässäkin voit kokeilla esim. seuraavaa riviltä n. 68 alkaen, jos haluat välttää toisteista koodia, (vaikkakin ehkä makuasia, kumpi sitten on selkeämpi):

int dx = 0;
int dy = 0;

if (suunta.equals("P")) {
    dy = -1;
} else if (suunta.equals("I")) {
    dx = 1;
} else if (suunta.equals("E")) {
    dy = 1;
} else if (suunta.equals("L")) {
    dx = -1;
}
 visited[x + dx][y + dy] = true;
pino.lisays(new Pair<>(x + dx, y + dy));

Lisäksi tässä kohtaa voi olla mahdollista välttää suuntien koodaamista kirjaimiksi ja takaisin, mutta toisaalta, lähestymistapasi voi olla helpommin luettava verrattuna pelkkiin koordinaatteihin.

Luokka: WallFollower
Boolean muuttujiin liittyen vinkkinä, että arvon voi antaa suoraan muuttajalle ilman erillistä if-lausetta esim:

b1 = naapuri == solmu - 1;
//tämän sijaan:
if (naapuri == solmu -1) b1 = true;

Tässäkin kohtaa kannattaa miettiä saisiko useat samankaltaiset if-lause ja for-silmukka -osiot yhdistettyä esimerkiksi antamalla suuntakohtaiset muuttajanarvot ja ajaa ne sitten geneerisen loopin läpi.

Jatka samaan malliin, työsi on todella hyvässä vaiheessa! Hyvää työtä!

Vertaisarviointi 2

Projekti ladattu katselmointia varten 16.10.2021 noin kello 21.30.

Analyysiä:

Projektin lataaminen ja suoritus onnistui moitteetta. Projektin struktuuri on selkeä, koodi on siistiä ja helposti luettavissa, kommentointi kattavaa ja käyttöliittymä toteutettu hyvin.

Testit vaikuttivat järkeviltä ja kattavilta.

Katselmoinnin aikana ei ilmennyt kehityskohteita tai parannusideoita.

Yleisesti:

Projekti vaikuttaa hauskalta ja mielenkiintoiselta. Pidin erioten käyttöliittymän selkeydestä ja mahdollisuudesta animoida algoritmien toiminta. Projekti vaikuttaa olevan joko loppusilausta vaille valmis, tai jo valmis - hienoa!

Hyvää työtä! Onnea loppukurssiin!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.