Niniejszy artykuł ma na celu wytłumaczenie w jaki sposób została napisana Tabliczka mnożenia. Każda linijka ma dołączony komentarz, który wyjaśnia, dlaczego dana linijka została wypisana w ten sposób. Ponadto wśród informacji zawarte są informacje na sposób w jaki można dany projekt ulepszyć / dostosować.
Przede wszystkim najpierw trzeba ustalić gdzie na stronie będzie wyświetlana gra oraz z jakich pól będzie można skorzystać w celu wyświetlenia pytania lub statystyk. W tym przypadku są to dwa obiekty typu DIV:
(1.) Pole _game służy do wyświetlania pytania, a (2.) pole _statistics do wyświetlenia statystyk związanych z aktualną rozgrywką.
Kod sterujący grą wymaga zadeklarowania kilku zmiennych, które pozwolą na zliczania różnego rodzaju informacji na temat rozgrywki:
Zmienne mają następujące zastosowanie: (1.) MAX - określa górny zakres losowania wybranego czynnika iloczynu, (2.) MAXODP - określa ile pytań zostanie zadanych, (3.) wynik - przechowuje wynik mnożenia dwóch wylosowanych liczb, (4. - 5.) wylosowane liczby a i b. Do tego w trakcie rozgrywki zliczane będą: (6.) odpowiedzi poprawne i (7.) błędne oraz (8.) ile pytań już zostało zadanych. Do statystyk na koniec potrzebna jest jeszcze zmienna, która (9.) zapamięta czas rozpoczęcia sprawdzianu.
Przed rozpoczęciem gry zmienne mogą mieć inne wartości niż domyślne tj. po rozgrywce, dlatego potrzebna jest funkcja prepareGame(), która wyzeruje wszystkie liczniki, a potem odświeży wygląd ekranu.
(1.) Funkcja prepareGame() przyjmuje dwa argumenty: val i val2, które kolejno oznaczają zakres losowanych liczb oraz ile pytań ma być zadanych. (2. - 3.) Dane te są zachowane następnie w odpowiednich zmiennych. Zaletą takiego rozwiązania jest fakt, że nie trzeba modyfikować tych zmiennych w innych miejscach kodu co mogłoby mieć nieoczekiwane skutki. W przypadku restartu gry wystarczy przygotować grę z już dostępnymi wartościami MAX i MAXODP. Choć wtedy ponowne przypisywanie jak np. MAX = MAX jest zbędne to takie ułożenie kodu pozwala na mniejszą pomyłkę podczas modyfikowanie innych zmiennych. (9.) Bardzo ważną częścią kodu jest ustalenie wartości a na 0. Program w ten sposób wykrywa, że test jeszcze się nie rozpoczął. (10.) Wywołana jest funkcja odświeżająca wyświetlane zapytanie (zostanie wyjaśniona niżej).
Funkcji wyświetlające czytelna dla użytkownika informacje są dwie: refreshAnswer() odpowiada za odświeżenie wyświetlanego równania, a refreshStats() statystyk.
(1.) W przypadku odświeżania pytania (2.) zmieniana jest zawartość pola _game. W przypadku, gdy gra się nie zaczęła tj. a = 0 to wyświetlany zostaje tekst domyślny. W przeciwnym wypadku wyświetlane jest zapytanie oraz aktualnie wpisana liczba. Jeśli gracz nie wpisał nic to można wypisać znak zapytania. (4.) Z kolei przy odświeżaniu statystyk: (5.) jeśli rozgrywka trwa czyli a jest różne od 0 to wyświetlane są odpowiednie statystyki.
Pozostały jeszcze do napisania funkcje, które wczytają od użytkownika co wpisał oraz losowanie pytania. W przypadku funkcji, która będzie reagowała na to co naciśnie gracz kod wygląda następująco:
(2.) Pobranie wciśniętego klawisza. (3.) Jeśli gra się jeszcze nie rozpoczęła to: (4. - 8.) ustal wartości zmiennych i (9.) zadaj pytanie. (10.) Jeśli jednak gra trwa to (11. - 12.) dopisz wciśniętą cyfrę na koniec wpisanej liczby. (13.) Jeśli wpisany wynik jest większy od iloczynu to (14.) ustal wpisaną liczbę na wpisaną cyfrę, (15.) zwiększ błędne odpowiedzi i (16.) odśwież statystyki. (18.) Niezależnie od klawisza odśwież główne pole. (19.) Jeśli liczba została odgadnięta to (20.) odśwież statystyki, (21.) zwiększ liczbę poprawnych odpowiedzi, (22.) zwiększ ile pytań zostało zadanych i (23.) zadaj kolejne pytanie.
Do wyjaśnienia na koniec została funkcja losująca pytanie nextQuestion():
(2.) Jeśli gracz udzielił tyle odpowiedzi ile maksymalnie powinno być pytań to: (3.) ustal, że gra nie trwa, (4.) pobierz aktualny czas i (5.) wypisz podsumowanie, a następnie (6.) przygotuj planszę pod kolejny test. (7.) Jednak jeśli wciąż są pytania do zadania to (8. - 9.) wylosuj liczby a i b, (10.) zresetuj wpisany wynik przez gracza i (11.) odśwież pytanie.
Ilość pytań oraz poziom można dostosowywać przy pomocy funkcji prepareGame(). W celu zrestartowania gry należy wywołać prepareGame(MAX,MAXODP). W celu zmiany liczby pytań do zadania wywołać prepareGame(MAX,k), gdzie za k można podłożyć dowolną liczbę lub można zmienić zakres liczb a i b wywołując prepareGame(k,MAXODP)
Odpowiednie linijki kodu odpowiadają stylu (2. - 6.) pola pytania, (7. - 9.) pola statystyk oraz (10. - 19.) guzików na stronie.