Generowanie sudoku

13.01.2010 @ 13:24:59 by Rafał Kozik | gamedev freedoku

Największym (choć wcale nie tak dużym) wyzwaniem podczas robienia sudoku jest generowanie planszy. Musimy zadbać o to, żeby plansz było dużo, żeby były poprawne (i miały jedno, unikalne rozwiązanie) i żeby można było wybrać poziom trudności. Okazuje się, że rozwiązanie jest bardzo proste i powinno zadowolić każdego.

Jak więc wygląda to proste rozwiązanie? Weźmy dowolną planszę o odpowiednim poziomie trudności i przeróbmy ją tak, żeby wyglądała na unikalną. Gracze nie powinni zauważyć różnicy. Jeszcze tylko trochę terminologii -- grupami pionowymi (poziomymi) będę nazywał grupy trzech kolejnych kolumn (wierszy) na planszy. Mamy więc trzy grupy pionowe i trzy grupy poziome. Sposób w jaki należy przerabiać planszę:

  • zrobić permutację cyfr -- 9! możliwości
  • spermutować kolejność grup pionowych i poziomych -- 3!^2 możliwości
  • spermutować kolumny w grupach pionowych i wiersze w grupach poziomych -- 3!^6 możliwości

Zatem planszę można przerobić na 609 499 054 080 sposobów. Sporo, prawda? Oczywiście nie wszystkie są unikalne (np. gdy plansza ma dwie puste kolumny), ale jest tego wystarczająco dużo. Łatwo zauważyć, że plansza będzie wciąż poprawna i poziom trudności zostanie zachowany. Teraz wystarczy dla każdego poziomu trudności przypożądkować kilka plansz 'startowych' i mamy kompletny system generowania sudoku. Pozostaje tylko jedno pytanie -- skąd wziąć plansze startowe i jak ocenić ich poziom trudności? W sieci można znaleźć różnego rodzaju strony, które rozwiązują sudoku, niektóre z nich podają też ocenę trudności. Pozwala to już na dość dobre zbudowanie bazy plansz 'startowych' i zapewnienie, że żadne z nich nie są izomorficzne ;)


Podsumowanie roku

25.12.2009 @ 13:26:30 by Rafał Kozik | freedoku iPod strona z życia

Za kilka dni zbliża się koniec roku i nic ciekawego już się raczej nie wydarzy, więc czas na małe podsumowanie ;)

  • W lutym (nie ma to jak przerwa między semestralna) zrobiłem aktualizację strony i wyszło jej to na dobre. Od tamtego czasu pojawiło się 30 wpisów, więc nie jest źle. W nadchodzącym roku będę pisać znacznie więcej, głównie za sprawą kilku projektów które rozwijam.
  • W marcu znalazłem chwilę czasu, żeby wprowadzić do freedoku kilka zmian.
  • Od marca jestem jedną nogą w grobie, tzn. zaręczyłem się ;)
  • Wziąłem udział w Compo 3h i zająłem 2 miejsce.
  • Kupiłem laptopa HP Pavilion tx2650ew i poza drobnymi problemami jestem z niego zadowolony. Wciąż nie mogę się zmusić do napisania recenzji, może w przyszłym roku.
  • Zmieniłem system na Windows 7 (Wciąż używam wersji RC, czas uaktualnić).
  • Od początku lipca rozpocząłem pracę w Nokia Siemens Networks i dalej tam pracuję.
  • Kupiłem sobie iPoda Touch i się z nim nie rozstaję. Za jakiś czas napiszę pewnie coś o aplikacjach / grach których używam. W przyszłym roku będzie trzeba przeskoczyć na iPhone 3GS, w końcu zrozumiałem, że ten sprzęt jest wart swojej ceny.
  • W październiku byłem na wakacjach, tym razem w Turcji.
  • Od 1 grudnia należę do iPhone Developer Program (żaden wyczyn, wystarczy 99$ zapłacić) i powoli w czasie wolnym przygotowuję coś na tę platformę.
  • Napisałem artykuł o przetwarzaniu obrazów.

Trochę się w tym roku działo, a kolejny zapowiada się jeszcze ciekawiej -- co z tego wyjdzie? Czas pokaże :)


freedoku.net ma już rok!

22.12.2009 @ 13:14:00 by Rafał Kozik | freedoku

Rok temu udostępniłem pierwszą wersję freedoku -- darmowego sudoku przez przeglądarkę. Niedawno przedłużyłem ważność domeny, więc freedoku zostanie z nami na trochę dłużej ;)

A jak to się zaczęło?

Miesiąc temu próbowałem znaleźć sudoku działające w przeglądarce, w które da się dość przyjemnie grać. Niestety, nic nie spełniło moich oczekiwań, więc... zrobiłem własne ;)

Gra nie odniosła ogromnego sukcesu, ale nie spotkała jej też spektakularna porażka ;). Freedoku ma codziennie kilka/kilkanaście wejść, więc nie jest źle. Zwłaszcza, że nie jest w żaden sposób promowane.

W dalszej części garść statystyk z google analytics.


Freedoku w wersji do druku

18.09.2009 @ 09:35:41 by Rafał Kozik | C# freedoku

Plansze z freedoku można wydrukować, ale czy nadają się one do druku na ulotce, gazecie itp.? Nie bardzo. Wersja na stronie do druku jest specjalnie uproszczona (oszczędzanie tuszu / tonera) i drukowaniem zajmuje się tak naprawdę przeglądarka.

Potrzebowałem planszę do druku z 300 DPI, a to wymaga przygotowania grafiki w odpowiedniej rozdzielczości -- zwykłe przeskalowanie nie da wystarczająco dobrych rezultatów.

Napisałem program, który generuje plansze z freedoku dla zadanego DPI i boku planszy w cm, a efekt wyszedł całkiem pozytywny. Plansza o boku 7 x 7 cm przy 300 DPI wygląda tak:



Obrazek


Całość zaimplementowana w C#, przy okazji opiszę pewnie jakieś wskazówki odnośnie robienia podobnych rzeczy. A do czego mi potrzebne takie grafiki? W ciągu kilku tygodni powinna pojawić się na to pytanie odpowiedź ;).


Aktualizacja freedoku

19.03.2009 @ 00:15:27 by Rafał Kozik | gamedev freedoku

Jest to pierwszy z wpisów o freedoku na moim blogu. Z czasem pojawi się tu ich więcej i choć głównie będą informować o aktualizacjach, pojawią się też takie, które będą opisywać rzeczy dziejące się pod maską.

  • można grać po popełnieniu 3 błędów, jednak licznik czasu staje się czerwony i nie pokazuje się okienko z gratulacjami
  • można klikać na paskach z ilością poszczególnych cyfr, żeby je podświetlić na planszy
  • w końcu zrobiłem sitemapę, co powinno z czasem przełożyć się na zwiększenie odwiedzalności
  • dodałem link do tego bloga (do taga freedoku)

Jeżeli ktoś znajdzie jakieś błędy, to proszę o napisanie w komentarzu lub na e-mail. Miłego grania.