Gra Potop 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 następujących zmiennych globalnych:
(1.) Zmienne, które odpowiadają za zarządzanie ustawieniem obiektów na planszy. (2.) Zmienna field_start określa domyślne pole startowe oraz field_start_svg to zmienna, która będzie przechowywać uchwyt do pola, które jest polem startowym zamalowywania.
(3.) Zmienna map odpowiada za przechowywanie mapy, moveMax jest ustalane podczas rozwiązywania zagadki przez AI i jej wartość określa ile ruchów potrzeba, aby wykonać wyzwanie. Z kolei move analogicznie odpowiada ile ruchów do tej pory wykonał gracz. (4.) Gcolors odpowiada za przechowanie informacji ile kolorów zostaje użyte do losowania planszy. (5.) Ostatnia zmienna AIList jest używana przez algorytm jako zmienna danych tymczasowych w trakcie oszacowywania ilości ruchów do wyzwania.
Przed utworzeniem planszy należy dokonać inicjalizacji pola gry. Można tego dokonać przy pomocy funkcji initialize(). Nie przyjmuje ona żadnych argumentów i powinna zostać wywołana tylko po załadowaniau strony.
Domyślnie skrypt ma zaimplemntowany fragment kodu, który wykonuje potrzebne funkcje w określonej kolejności zaraz po załadowaniu strony.
Z kolei przygotowanie rzogrywki polega na (2.) utworzeniu nowej, losowej planszy, (3.) oblicz ile kroków jest na wyzwanie i (4.) wyświetl komunikat powitalny.
Do losowania planszy służy fragment kodu w funkcji createBoard(), która przyjmuje trzy argumenty: width - elementów na szerokość, height - elementów na wysokość oraz colors - z ilu kolorów ma składać się plansza. Przygotowanie polega na utworzeniu tablicy x×y o losowych wartościach.
Po kliknięciu w dowolne, kolorowe wiadro uruchamiana jest funkcja fillBoardInit(). Przyjmuje ona jeden argument ncol, który określa wylewany kolor.
(2.) Zwiększ licznik ruchów i (3. - 5.) pokaż komunikat o rozgrywce. (6.) Wywołaj funkcję fillBoard(), która zaczynając od pola startowego zamaluje aktualny kolor od wskazanego pola na nowy. Następnie (7. - 12.) sprawdzane jest czy istnieje pole o innym kolorze niż aktualnie wybranym. Jeśli wszystkie pola mają ten sam kolor (13.) to zostanie pokazany komunikat o zwycięstwie.
W celu zamalowania planszy funkcja jest wykonywana rekurencyjnie.
(2.) Jeśli dane pole już zostało zmienione to (3.) funkcja jest przerywana. Jest to jedyny warunek stopu rekurencji. (4.) W przeciwnym razie ustal kolor pola na nowy i (5. - 12.)
Jednym z najważniejszych elementów gry jest wyznaczenie wyzwania - pewnej ilości ruchów w ile można zakończyć plansze. Rozwiązywanie planszy rozpoczyna funkcja AISolveInit().
(2.) Przygotuj listę kolorów i (3. - 4.) wypełnij ją zerami. (5.) Rozpocznij poszukiwanie minimalnej ilości ruchów.
Wyszukiwanie minimalnej ilości ruchów rozwiązuje algorytm chciwy. W każdym ruchu program określa, który kolor wybrać, aby zmaksymalizować listę zamalowanych pól na wybrany kolor. Algorytm przedstawia się następująco:
(2.) Przyjmij, że planszę można zakończy w zero ruchów (punkt wyjściowy zliczania). (3.) Dopóki pętla nie zostanie przerwana to: (4.) zwiększ ilość potrzebnych rychów i (5. - 6.) zresetuj tablicę ile pól innych kolorów sąsiaduje z aktualnym. (7.) Zlicz ile jest kolorów każdego typu wokół aktualnie zamalowanego obszaru. (8. - 11.) Znajdź kolor, którego najwięcej pól znajduje się wokół obszaru. (12.) Następnie zamaluj aktualny obszar na nowy kolor. Potem w pętli (13. - 23.) sprawdź czy plansza została całkowicie zamalowana. Jeśli tak to (24.) zakończ wyoknywanie pętli i (26.) zwróć wartość w.
Do wyjaśnienia pozostała funkcja listColors(), która jest identyczna do funkcji fillBoard(). Różnica polega jedynie na tym, że po wyjściu z zamalowanego obszaru program rozpoznaje kolor i (3.) zwiększa odpowiedni licznik w tablicy zliczającej na podstawie której potem jest wybierany kolor zamalowujący.