Gra Puzzle została napisana przy wykorzystaniu języka JavaScript. Kod nie wymaga żadnych zewnętrznych bibliotek, aby działać. Widoczna plansza to obiekty HTML, a nad ułożeniem wszystkiego na stronie czuwa CSS.
Skrypt korzysta z trzech zmiennych globalnych. Pierwsza z nich obj_clicked przechowuje informacje o aktualnie wybranym polu. Następna maxn określa maksymalną ilość elementów w pojedynczym wierszu. Ostatnia last_url przechowuje informacje o ścieżce dostępu do wyświetlanego obrazku.
W celu zmiany wartości zmiennej maxn należy posłużyć się funkcją setMaxn() i przekazać jej jako paramatr nową wartość zmiennej. Funkcja wymusi zrestartowanie gry.
Restartowanie gry polega na utworzeniu nowej gry. Jako parametr url należy podać zmienną last_url. W ten sposób nowa gra będzie miała te same ustawienia co poprzednia.
Plansza do gry są to obiekty div, które mają ten sam rozmiar. Różnica tkwi jednak w sposobie wyświetlania tła. Mianowicie każdy obiekt w zależności od pozycji ma obliczony wektor przesunięcia lewego górnego rogu obrazku tła. Każdy obiekt jest klasy game_el, która odpowiada za ustalenie rozmiaru pól oraz ich wstępnego sformatowania. Dodatkowo każde pole ma argument pos, który określa gdzie powinno znajdować się dane pole.
Do tworzenia pól wykorzystywana jest funkcja pomocnicza getElement(), która na podstawie rozmiaru size, pozycji x i y oraz numeru pozycji początkowej pos tworzy odpowiedni obiekt div.
Program pozwala na załadowanie obrazka z dowolnego źródła. Funkcja createGame() przyjmuje jeden argument url, który określa źródło pliku.
(2.) Zapamiętaj wczytany url. (3.) Utwórz wirtualny obiekt img i (4.) załaduj obrazek. (5.) Po załadowaniu: (6.) znajdź pole gry, (7.) ustal rozmiar pól i oblicz (8.) szerokość oraz (9.) wysokość dokumentu wyjściowego. (10.) Na podstawie wyliczonych wartości pobierz styl planszy przy pomocy funkcji getStyle(). Następnie (11. - 17.) utwórz docw·doch pól i (18.) wymieszaj kolejność. (19.) Niestety losowość może zwrócić ustawienie początkowe, dlatego warto sprawdzić w funkcji tworzącej czy gra nie została zakończona.
Funkcja getStyle() na podstawie rozmiaru pól size, adresu obrazka url oraz maskymalnych rozmiarów planszy, aby gra się zmieściła w przygotowanej przestrzeni zwraca styl pól: rozmiar, obrazek tła, marginesy oraz sposób ustawienia.
Rozmiar pól jest określany na podstawie wysokości obrazka, a maksymalną szerokości i wysokością dokumentu docelowego. Ma to na celu możliwość załadowania obrazku dowolnego rozmiaru. Rozmiar ten jest wyliczany na podstawie poniższego algorytmu:
Zamiana pól polega na wskazaniu dwóch elementów el1 i el2, a następnie zamienieniu atrybutu dotyczącego ustawień tła oraz atrybutu pos.
W celu losowego rozmieszczenia wystarczy zamienić i-ty element z dowolnym z listy, a następnie zmniejszać rozmiar listy o 1.
W celu zamiany dwóch wybranych pól należy sprawdzić czy zostało już wybrane pole. Jeśli nie to zapamiętujemy wybrane pole. Jeśli jest już wybrane pole to sprawdzamy czy wybrane pola są różne i dokonujemy zamiany przy pomocy funkcji swapElements() i sprawdzamy czy gra została zakończona. Warto zauważyć, że niezależnie od dokonania zamiany elementów wartość obj_clicked jest ustawiana na null. Pozwala to na odkliknięcie pola poprzez ponowne jego kliknięcie.
Warunek zwycięstwa jest bardzo prosty do sprawdzenia. Nalezy pobrać wszystkie elementy leżące na planszy, a następnie sprawdzeniu czy i-te pole ma argument o wartości i. Jeśli pętla nie zostanie przerwana to wystarczy np. pokazać komunikat.