Aplikacja Oryginalna Wieża Hanoi została napisana przy pomocy JavaScript, które zarządza wyświetlaną treścią zmieniając kod HTML oraz CSS. Użyte funkcje są zgodne z najnowszym standardem HTML5.
W celu umieszczenia na stronie gry wystarczy umieścić obiekt typu DIV, który będzie miał identyfikator _game.
W celu poprawnego działania aplikacji potrzebnych jest kilka zmiennych globalnych, które mają za zadanie przechowywać informacje pomiędzy różnymi funkcjami. Ich znaczenie jest następujące:
(2.) ustalenie marginesu pomiędzy kolejnymi palikami (łącznie z największym elementem). (3.) Maksymalna szerokość pojedynczego elementu. (4.) Najmniejsza szerokość elementu. Zapobiega to tworzeniu bardzo małych elementów. (5.) Domyślna ilość elementów na pierwszym paliku. (6.) Lista paliki będzie przechowywać jakie elementy są na którym paliku. Potrzebne są jeszcze zmienne, które przechowają (7.) kliknięty element oraz (8.) na którym paliku został kliknięty.
Zarówno uruchomienie nowej gry czy zrestartowanie obecnej polega na wywołaniu funkcji prepareGame() razem z argumentem, który będzie oznaczał ile krążków ma zostać położonych na pierwszy paliku.
(2.) Znalezienie ekranu gry (3.) i jego wyczyszczenie. (4.) Zapamiętanie obecnej ilość krążków (do restartu gry). (5.) Wyczyść pozycję krążków. (6. - 9.) Utwórz trzy paliki. Następnie (10. - 14.) zaczynając od największego elementu: (11.) utwórz nowy obiekt, (12.) ustaw go i (13.) dodaj na koniec listy pierwszego palika. Elementy, które są na końcu danej listy palika są pierwszymi od góry. (15.) Utwórz obiekt pod komunikaty dla użytkownika i (16.) pokaż komunikat, że gra została przygotowana.
Do tworzenia palików służy funkcja getRod(). Tworzy ona n-ty palik, odpowiednio go ustawia na planszy i przypisuję funkcję putObject(), która odbiera zdarzenie odkładania elementu na wybrany palik.
Podobną funkcją jest getElement(). Jej zadanie polega na utworzeniu elementu o określonej szerokości, ustaleniu identyfikatora, koloru oraz co ma się stać jak zostanie kliknięty. Funkcja nei ustala pozycji elementu na planszy, a jedynie jego cechy wyglądu i zdarzenia.
Do ustawiania elementu na stronie służy funkcja setElementPos(). Rozwiązanie to jest o tyle lepsze, że elementy są przestawiane w trakcie rozgrywki, a funkcja jest wykorzystana podczas tworzenia rozgrywki jak i jej samej.
Ostatnia funkcja podczas przygotowania gry - reportState() wyświetla komunikaty dla gracza (o niepoprawnym ruchu czy, że gra została rozpoczęta.) Jest to zaledwie jedna linijka, która polega na znalezieniu odpowiedniego obiektu i zmianie jego zawartości:
Po kliknięciu dowolnego elementu wywoływana jest funkcja setObject():
(2.) Jeśli jest jakiś kliknięty obiekt to (3.) go odznacz. (4.) Jeśli kliknięty jest rzeczywiście obiektem to (5.) zacznij szukać palika na którym jest on element na wierzchu. (6.) Zgłoś status o poniesieniu elementu. (7.) Jeśli i-ty palik ma kliknięty element el na wierzchu to: (8.) zapamiętaj go (9.) oraz palik na którym się znajduje. (10.) Dodaj klasę do obiektu, aby użytkownik zobaczył, że kliknął element. (11.) Zakończ wywoływanie funkcji. (12.) Jednak jeśli funkcja nie zostanie przerwana to: (14.) zgłoś, że element nie może być podniesiony i (16.) przed zakończeniem funkcji ustal, że żaden element nie jest kliknięty.
Po podniesieniu elementu gracz klika na wybrany palik. Do obsługi tego zdarzenie służy funkcja putObject():
(2.) Pobierz numer palika na podstawie jego identyfikatora. (3.) Jeśli jest kliknięty element i ostatni element listy palika nie jest pusty, element istnieje oraz jest mniejszy od elementu już położonego to: (4.) zgłoś status, że element został przełożony, (5.) zdejmij ostatni element z palika elementu i dodaj go na wybrany palik. (6.) ustal nową pozycję elementu, (7.) odznacz element (8.) i sprawdź warunek wygranej. Jeśli ruch doprowadził do zwycięstwa to (9.) pokaż komunikat o wygranej.
Warunek zwycięstwa jest sprawdzany przy pomocy funkcji checkWin(). Sprawdza ona czy każdy kolejny element na liście środkowego palika ma coraz mniejsze numery elementów:
Niewymieniona jeszcze funkcja lastELement() ułatwia wybranie ostatniego elementu z dowolnego palika:
Grę można rozpocząć przy pomocy funkcji prepareGame(). Na przykład w celu zrestartowania gry / uruchomienia z domyślną konfiguracją należy wpisać:
Elementy gry są częściowo ustalana poprzez kod CSS. Styl ekranu gry:
Styl pola komunikatów:
Styl palika:
Styl elementu:
Styl wybranego elementu: