[[TOC]]
Prosjektet, SpellIT, er en Scrabble-applikasjon konfigurert som et multi-modul prosjekt med maven. Applikasjonen består av modulene Core og UI, og er bygget på prinsippinene for Model-view-controller (MVC). Applikasjonen er laget slik at to spillere kan spille mot hverandre på samme datamaskin. Videre støtter applikasjonen persistens/lagring av data ved å serialisere Java-objekter til en JSON-fil. Det spilles på tur, og for hver tur kan spilleren plassere tilgjengelige brikker på brettet for å danne et nytt ord. Ordet som blir lagt verifiseres ved å slå opp i applikasjonens innebygde ordbok - det beregnes også poeng for nye ord som blir dannet med tidligere plasserte brikker.
Spillet benytter en norsk ordbok, og støtter omlag 334 000 varianter av norske ord. Ettersom applikasjonen benytter seg av denne ordboken ofte, er det kritisk med rask oppslagstid. Dette oppnås ved bruk av en datastruktur kalt Trie, illustrert nedenfor.
En trie er en trestruktur hvor hver node representerer en alfabetisk karakter, og har flere forgreninger under seg. Treet som er vist i figur 1 en representerer en ordbok med henholdsvis ordene ab, aba, abc, ab, ba, bad, bag. Disse ordene finner man ved å følge de tilgjengeldige nodene. Om man for eksempel følger høyresiden av treet finner man bokstavene b => a => g som settes sammen til ordet bag. På denne måten kan applikasjonen verifisere ord ved å følge hver bokstav i oppslagsordet, og se om kombinasjonen av bokstaver eksisterer i Trie-strukturen - en slik operasjon vil ta O(n) kjøretid, hvor n er lengden oppslagsordet.
Prosjektets moduler tilhører pom-filen spellit, og er ytteligere beskrevet i egne README-filer.
- spellit.core utgjør domenelaget, og inneholder standardiserte objekter samt. logikk for å fremstille disse objektene.
- spellit.ui utgjør brukergrensesnittet, og bygget med JavaFx.
- spellit.report aggregerer resultat for testdekningsgrad i en samlet rapport.
- (jackson-databind) - (de)serialisering av Java-objekter til JSON.
- (javafx-controls) - JavaFx-bibliotek
- (javafx-fxml) - bruk av FXML-filer
- (junit-jupiter-api) - JUnit API
- (mockito-core) - Mockito
- (testfx-core) - core for testing av JavaFx-applikasjoner
- (testfx-junit5) - integrerer TestFx med Junit
- (maven-compiler-plugin) - kompilerer source-filene i prosjektet
- (maven-surefire-plugin) - kjøring av enhetstester
- (maven-checkstyle-plugin) - sjekking av kodekvalitet med Checkstyle
- (spotbugs-maven-plugin) - finner bugs i koden med Spotbugs
- (jacoco-maven-plugin) - testdekningsgrad med Jacoco
- (javafx-maven-plugin) - kjøring av JavaFx-applikasjonen
Rydder opp i tidligere kompilerte filer, og installerer avhengigheter. Krever java versjon - JDK 14 og oppover.
mvn clean install
Kjører gjennom enhetstestene
mvn test
Starter applikasjonen
mvn javafx:run -f ui/pom.xml