Aplikacja jest grą polegającą na ułożeniu pojedynczych kafelków tak aby wspólnie ułożyły obrazek w całość w jak najkrótszym czasem. Grafika jest podzielona na 16 części z jedną pustą umożliwiając przesuwanie sąsiednich. Gra kończy się gdy wszystkie kafelki zostaną ułożone poprawne. Każde rozpoczęcie nowej gry powoduje ponownie pomieszanie kolejności kafelek i zresetowanie zegara. Aplikacja została napisana obiektowo w Javie i jest przystosowana do współpracy z JRE 1.9. Można ją zbudować używając MVN.
Użytkownik po włączeniu aplikacji rozpoczyna grę przyciskiem z ikonką Play. Po rozpoczęciu gry może:
Powyższy rysunek przedstawia diagram klas aplikacji. Dziedziczenie klas w tym projekcie zostało zredukowane do minimum i zostało to zastosowane celowo na rzecz kompozycji oraz zasady single responsibility.
Głównym założeniem tejże klasy jest operowanie na state aplikacji, niestety w tym przypadku jest on mutable głównie ze względu wielkość wymiaru i specyfikę samego języka.
T
wykorzystując mechanizmy refleksji przez wywołanie Array.newInstance
. Adnotacje FunctionalInterface
w interfejsach wykorzystywanych przez konstrukcje lambda mają ogromny wpływ maintainability kodu.Klasa ImageTile
Klasa odpowiedzialna za cięcie obrazu w tile. Cięcie obrazu następuje w statycznej metodzie cutImageIntoParts
, która zwraca obiekt ArrayIterator<BufferedImage>
jako return funkcji. Klasa funkcjonalność ArrayIterator
Klasa PuzzleDescription Klasa to deskryptor pojedynczego puzzla, posiada obrazek oraz jego numer.
Direction
reprezentujący wektor, po którym poruszać się może pojedynczy puzzle planszy. ArrayIterator
i upewnia się, że zawsze w prawym dolnym rogu jest pusty slide.EnumSet
zwracany w metodzie getMoveableEdges
ImageTile
obrazuWarstwa ta odpowiada za reprezentacje ruchów użytkownika na ekranie. Renderuje ogólny state aplikacji.
Klasa GameBoard
Metoda rysująca planszę i dekodująca kliknięcia w planszę na wektor dwuwymiarowy indeksu pojedynczego slide co pozwala na jego przesunięcie. Wczytuje także losowy ImageTile
z zasobów aplikacji. Pod planszą gry renderuje układany obraz z ustawioną przeźroczystością. Klasa umożliwia grę na planszach innych niż 4x4 ale zostało to zablokowane ze względu na wymagania projektu.
Klasa GamePanel / GameWindow Klasy rysujące okienko i zapewniające mu prawidłowy layout.
Klasa Resources Menedżer zasobów aplikacji. Pozwala na internationalizację aplikacji, wczytywanie obrazków oraz ikon. Pozwala na formatowanie translacji.
Projekt został zrealizowany zgodnie z pierwotnymi założeniami a podczas jego implementacji nie natrafiono na żadne trudności.
mvn package
Ikony stworzone przez Freepik z www.flaticon.com licencjonowane przez CC 3.0 BY
Mateusz Bagiński cziken58@gmail.com
Artur Jakiel
GNU