Mam najlepiej sprzedającą się grę Sudoku w sklepie z aplikacjami na iOS. Oto jak wygenerowałem puzzle.
Najpierw mam aplikację generatora puzzli. Ale to nie jest część kodu gry. Jest to samodzielna aplikacja, której używam do układania puzzli. Jest wysoce zmodyfikowany, więc mogę ustawić go tak, aby tworzył różne typy wzorów, stopnie trudności, liczbę dawców itp. Generowanie zagadek i uzyskanie stałego poziomu trudności jest trudne w locie i zajmuje więcej czasu, niż gracz chciałby czekać. Generuję więc coś, co nazywam „łamigłówkami źródłowymi” i właśnie tego używa kod gry do generowania łamigłówek, w które grają ludzie.
Nie odpowiadam tutaj, jak zakodować generator. Możesz google i znaleźć mnóstwo kodu generatora puzzli online. Zacznij tam. Ale aby stworzyć dobrą grę, musisz stworzyć dobrą grę. Moja gra nie generuje puzzli w locie.
Moja aplikacja do generowania puzzli działa w ten sposób, że generuje tysiące puzzli na minutę, ale nie wszystkie są dobre i nie wszystkie odpowiadają konkretnemu poziomowi trudności. Generator tworzy układankę, a następnie rozwiązuje ją i oblicza stopień trudności, a następnie ocenia układankę na podstawie technik potrzebnych do rozwiązania układanki i określa, czy należy ją zgadnąć (co zwykle jest złe). Wyrzuca wszystkie łamigłówki, które nie spełniają kryteriów. W przypadku trudnych, ale nie niemożliwych łamigłówek na szybkiej maszynie wygenerowanie 100 łamigłówek zgodnych z moją dokładną specyfikacją może zająć godzinę. Dlatego nie robię tego w aplikacji. Generowanie puzzli w locie przy tych trudnych specyfikacjach nie działałoby dla jakości puzzli, które mam w mojej aplikacji.
Łamigłówki to ciągi znaków, długość 162 znaków, 81 znaków z cyframi i myślnikami lub kropkami w miejscu pustych znaków, a następnie kolejne 81 z rozwiązaniem. Następnie kolumny dla każdej statystyki, takie jak liczba pojedynczych, podwójnych itp.
Moje wyniki ze wszystkich sesji generowania to rozdzielone przecinkami wiersze ze statystykami w postaci kolumn. Wezmę może 10 000 zagadek, sprowadzę je do doskonałości i posortuję według trudności. Następnie przenieś je do aplikacji, aby zobaczyć je na planszy. Patrzę też na nie pod względem wizualnym i widocznych wzorów układanki. Następnie ręcznie wybieram spośród nich.
Nazywam je łamigłówkami i oto co mam na myśli. Liczby w grze sudoku to tak naprawdę tylko tokeny. Zamiast być cyframi 1-9, mogą to być kolory, symbole lub litery. Więc moje łamigłówki nasienne nie są liczbami, to litery ai. Każda łamigłówka nasienna zmienia się w locie, tworząc układankę do gry:
- Losuj liczby / tokeny. Kiedy zamieniam litery ai z powrotem na cyfry 1-9, tabela wyszukiwania jest losowa. Oznacza to, że nie zawsze 1. To samo tworzy około 300 000 odmian każdej układanki.
- Obróć układankę o 90, 180 lub 270 stopni. To dodaje 4 kolejne warianty.
- Układaj puzzle poziomo, pionowo lub oba. To dodaje 4 kolejne warianty.
Każda łamigłówka nasienna może zatem utworzyć 5 806 080 odmian. Przetestowałem to w terenie z prawdziwymi graczami. Ludzie nie wiedzą, że grają w tę samą łamigłówkę. To właściwie niemożliwe. Tylko jeśli zauważą, że wzór, w którym są dane, są za każdym razem takie same. Ale nawet przy 100 różnych nasionach nikt tego nie zauważy. Milion użytkowników mojej gry tego nie zrobił. Przetestowałem to również z aplikacjami solver. Aplikacja solver nie rozwiąże układanki w ten sam sposób, gdy zostanie obrócona lub wyrzucona. Czasami nawet analizuje to jako inny stopień trudności, chociaż technicznie jest to ta sama łamigłówka.
Jednak książka Big Bad Sudoku Book zawiera 10 z 1000 łamigłówek z nasionami na 5 poziomach trudności i wiele rodzajów wzorów puzzli. Oznacza to, że w mojej grze są miliardy łamigłówek. Na każde 10 000 łamigłówek nasiennych jest 58 060 800 000 różnych łamigłówek.
W Sudoku Book w wersji 4 (wydanej w 2016 roku) wymyśliłem sposób, aby móc określić dokładną łamigłówkę z tych 58 miliardów i uzyskać tę samą łamigłówkę na urządzeniu każdego gracza.