Cichy Fragles

skocz do treści

Dorf Analitik

Dodane: 22 września 2026, w kategorii: Varia

Uwaga: bez przynajmniej ogólnego pojęcia, o co chodzi w Dorf Romantik, poniższa notka może być trudna do zrozumienia, więc zachęcam, by najpierw przeczytać recenzję gry lub/i obejrzeć jakiś gameplay. Albo po prostu w to zagrać.

Odkąd półtora roku temu napisałem podlinkowaną wyżej notkę, niewiele się zmieniło: ciągle pogrywam w Dorfa od czasu do czasu, a licznik zbliża mi się do trzystu godzin, aczkolwiek tak jakby asymptotycznie – questy coraz bardziej wymagające, więc coraz dłużej schodzi na układaniu tych farm czy wiosek, a to trochę zniechęca, zwłaszcza gdy akurat jestem gdzieś pośrodku wszystkiego i grupy mam już duże, ale do zamknięcia czegokolwiek jeszcze ciągle daleko.

Nie zachęca także fakt, że kraina mi się rozrosła na kilkadziesiąt ekranów i nie ma już mowy o ogarnianiu jej rozumem. Co prawda nie ma też i takiej potrzeby, można się koncentrować na jednym regionie mapy i olewać resztę, oni w ogóle tego nie sprawdzają – ale te wszystkie zagłębienia, dziurki, niedokończone jeziorka i inne takie siedzą mi z tyłu głowy i domagają się zagospodarowania, więc choć działania prowadzę już głównie na południu mapy, to resztę świata nadal od czasu do czasu oblatuję, tu załatam, tam zaokrąglę i tak to się kręci.

Fajnie by było jednak zobaczyć tę mapę w całości, stwierdziłem ostatnio – i w tym celu zacząłem grzebać w pliku z sejwem.

Plik, oryginalnie zapisany w binarnym formacie SAV, po przekonwertowaniu do bardziej czytelnego JSON-a wygląda następująco:

{
    "gameMode": 0,
    "level": 997,
    "score": 2194630,
    "perfectPlacements": 21679,
    "questsFulfilled": 1233,
    "questsFailed": 98,
    "consecutivePerfectFits": 46,
    "consecutivePlacementsWithoutRotate": 0,
    "playtime": 1011126.75,
    "biomeSeed": -1447138694,
    "preplacedTileSeed": -1446828855,
    "placedTileCount": 27513,
    "generatedTileCount": 27190,
    "generatedQuestCount": 1451,
    "surroundedTilesCount": 25115,
    "tiles": [
        {
            "gridPos": [-1, 1],
            "rotation": 5,
            "seed": -1446901113,
            "segments": null,
            "specialTileId": 0,
            "questTileData": {
                "questTileId": 33,
                "questActive": false,
                "questQueueIndex": 0,
                "targetValue": -1,
                "questLevel": -1,
                "questId": 0,
                "unlockedChallengeId": 0,
                "version": 2
            },
            "version": 3
        },
        // ...i więcej podobnych
    ],
    "tileStack": [
        {
            "gridPos": [0, 0],
            "rotation": 0,
            "seed": 1926596038,
            "segments": [null, null, null],
            "specialTileId": 0,
            "questTileData": null,
            "version": 3
        },
        // ...i więcej podobnych
    ],
    "preplacedTiles": [
        {
            "sectionGridPosX": 1,
            "sectionGridPosY": 0,
            "preplacedTileId": 80,
            "version": 2
        },
        // ...i więcej podobnych
    ],
    "pendingLockedChallenges": [],
    "activeChallenges": [],
    "tileStackCount": 371,
    "screenshot": {
        "format": "JPEG",
        "size_bytes": 104792
    },
    "lastPlayed": [2026, 8, 19, 22, 52, 30],
    "fileName": null,
    "initialVersion": "1.0.7",
    "lastPlayedVersion": "1.1.5.1",
    "groupTypeConfiguration": null,
    "excludedBiomes": null,
    "customModeData": null,
    "lastRewardedStep": [331],
    "lastRewardedScore": [2192875],
    "OnUpdated": null,
    "version": 3,
    "playtime_formatted": "280h 52m 06s"
}

Znaczeniami większości pól nie będę się zajmować, jako że albo są oczywiste („score”), albo sam ich nie znam („pendingLockedChallenges” czy „customModeData”), zresztą dla tworzenia mapy i tak nie mają zastosowania. Z ciekawszych danych odnotujmy „surroundedTilesCount”, czyli liczbę płytek otoczonych ze wszystkich sześciu stron: 25115 (na ogólną liczbę 27612, czyli ponad 90%), z czego 21679 to „perfectPlacements”, czyli płytki otoczone wyłącznie zgodnymi typami terenu. Ta zgodność jest na dłuższą metę kluczowa, bo za każdy perfekt wpada dodatkowa płytka do puli (jej aktualną liczebność znajdziemy w polu „tileStackCount”), bez czego już dawno by mi się one skończyły – 1233 wykonane questy to w sumie raptem 6165 dodatkowych płytek.

Najbardziej interesujące dane to oczywiście zawartość pola „tiles”, czyli lista płytek wyłożonych od początku gry. Niestety, nie znajdziemy tutaj informacji o ich zawartości – zamiast tego mamy pole „seed”, zawierające ziarno do pseudolosowego algorytmu, który generuje odpowiednie rodzaje elementów i ewentualnie questa na płytce. Nie znając tego algorytmu (a wątpię, żeby twórcy gry zamierzali się nim podzielić), nie da się zatem wygenerować mapy z rodzajami terenu.

Rozwiązanie z seedami ma taką zaletę, że skutecznie zapobiega oszukiwaniu poprzez manipulowanie zawartości sejwa – i taką wadę, że przy każdym uruchomieniu gry komputer musi „rozegrać” wszystko od początku, przerabiając te całe seedy na rodzaje terenu, licząc questy i tak dalej, przez co wczytywanie długaśnej rozgrywki zajmuje mi już ponad dwie minuty (na sprzęcie nie pierwszej świeżości, ale i nie ostatniej). Dużo sensowniejsze byłoby trzymanie w pliku pełnego aktualnego stanu gry, zabezpieczonego przed oszukiwaniem jakąś sumą kontrolną, której weryfikacja zajmowałaby sto razy mniej czasu.

No ale cóż – zrobili jak zrobili, nic na to nie poradzę. Nadal jednak można z tego wygenerować ogólną mapę, pokazującą kształt krainy oraz jej ewolucję w czasie.

Współrzędne płytki na mapie znajdują się oczywiście w polu „gridPos”. Jak jednak interpretować te liczby, skoro mapa nie dzieli się na kwadraty, tylko na heksy? Generalnie w kwestii mapowania heksów są dwie szkoły: albo jedna ze współrzędnych idzie na ukos, albo zygzakiem.

Generalnie, bo istnieje jeszcze podejście „trójwymiarowe”, używające współrzędnych w trzech osiach (dwie skośne zamiast jednej), ale tę opcję można z góry odrzucić, skoro współrzędne w pliku mamy tylko po dwie.

Jeśli ktoś pragnie bardziej zgłębić temat pozycjonowania heksów (poza ww. podejściami jest jeszcze wiele innych, mniej popularnych), polecam długi artykuł na ten temat.

Próba układania pierwszych płytek na ekranie szybko pokazała, że współrzędna X musi iść zygzakiem, bo przy osi na ukos układ nie trzyma się kupy. Co ciekawe, pokazała też, że współrzędna Y rośnie w górę, a nie w dół. Czemu? Nie przychodzi mi do głowy żadna sensowna odpowiedź.

Wyjaśnienie dla ludzi, którzy pamiętają ze szkoły, że Y przecież powinno rosnąć w górę: w matematyce faktycznie tak jest, ale w programowaniu zwykle robi się odwrotnie, bo obraz na ekranie jest generowany od góry (trudno by było np. wypisywać tekst od dołu), więc wygodniej mieć Y rosnące zgodnie z tym kierunkiem. Owszem, odwrócenie kierunku tak naprawdę niewiele zmienia, bo wystarczy dostawić minus i wszystkie działania nadal będą wyglądać tak samo – no ale ten minus to zawsze mała dodatkowa komplikacja, a życie programisty jest wystarczająco skomplikowane i bez tego.

Dorf Romantik ma pseudotrójwymiarową grafikę, gdzie niżej położone płytki znajdują się bliżej nas i mogą zasłaniać te wyższe, więc logiczne jest rysowanie najpierw tych wyższych, żeby ewentualnie później zasłonić ich fragmenty – tym bardziej więc nie rozumiem odwrócenia tej osi. No ale mniejsza z tym – jak już wspomniałem, wystarczy dostawić minus i jedziemy.

Żeby odzwierciedlić ewolucję krainy, pokolorowałem płytki ośmioma kolorami: pierwszą jedną ósmą najstarszych na czarno, drugą na brązowo i tak dalej, aż do najnowszych na fioletowo. Efekt wygląda następująco:

Ale w sumie po co się zadowalać statyczną mapą, skoro można stworzyć animację, która naocznie pokazuje, jak ta kraina rosła:

Żeby dać dobre wyobrażenie o skali, pokażmy jeszcze, jak wygląda w maksymalnym oddaleniu ten czerwono-pomarańczowy półwysep na górze:

Robi wrażenie?

Wracając do mapy: biała kropka na środku czarnego obszaru to płytka zero, wyłożona automatycznie przed rozpoczęciem gry. Parę innych białych kropek w tamtej okolicy to miejsca, które celowo trzymam puste, żeby nie połączyć paru grup przedwcześnie – np. rzeka, która zaczyna się w pobliżu dwóch białych kropek na południowo-zachodnim krańcu czarnego pola, sięga aż do południowego wybrzeża, zawiera masę questów i ciągle jeszcze ją rozwijam – dopiero jak uznam, że dalszy jej rozrost już mi się nie opłaci, pozatykam dziurki i zgarnę nagrodę za questy.

Przyznaję bez bicia: optymalizacja wszystkiego poza granice zdrowego rozsądku to moja choroba zawodowa.

Obszar na południowym zachodzie wyraźnie odstaje od reszty – zarówno w sensie dosłownym, jak i pod względem ukształtowania: o ile pozostała część mapy jest zwarta i spójna, prawie bez dziur, tutaj mamy wszystko mocno poszarpane. Przyczyna to tory – najbardziej niewygodny element w grze, bo można go połączyć tylko z kolejnym torem (lub z wieżą wodną, ale te trafiają się bardzo rzadko), co zmusza do budowania krętych linii (które w większości przypadków trzeba w końcu zapętlić), do których potem dokładamy inne płytki po bokach, mozolnie wypełniając luki. Wcześniejsze tory nadal trochę widać na mapie, zwłaszcza na pomarańczowym i czerwonym obszarze na zachodzie.

Podobne zawirowania wywołują rzeki, ale w mniejszym stopniu, bo rzeka może się łączyć z jeziorem, co pozwala ją zakończyć bez tworzenia pętli (tor niby też się da, ale końcówka toru to kolejny rzadki element), z kolei jeziora są kompatybilne z łąkami, więc także można je łatwo ograniczać.

Czasami zawirowania się nakładają: wspomniane wieże wodne są kompatybilne zarówno z torami jak i z wodą, dzięki czemu możemy krzyżować tory z rzekami (co również ma miejsce na wspomnianym kawałku mapy) – z jednej strony ułatwia to życie, z drugiej strony ułatwia tworzenie jeszcze bardziej pokopsanej linii brzegowej, komplikującej sprawy w dłuższej perspektywie. Coś za coś.

W polu „questTileData” mamy informacje o queście umieszczonym na danej płytce (o ile jakiś jest lub był), a najciekawsza z nich to pole „questActive”, pokazujące – niespodzianka – czy quest jest jeszcze aktywny. W przypadku nieaktywnych brakuje niestety informacji, czy dany quest zakończył się sukcesem czy porażką, no ale cóż – nie można mieć wszystkiego.

Oto zatem układ questów – na zielono zakończone, na czerwono trwające:

Żółtą strzałką wskazałem najstarszą płytkę z ciągle aktywnym questem – nosi ona numer 804, więc jest starsza niż 97% krainy! Kiedy ją wykładałem jakieś cztery lata temu, nawet mi się nie śniło, że to tyle potrwa…

Największe zagęszczenie questów widzimy w środkowej części mapy: dużo zakończonych w okolicach punktu startowego i dwie grupy trwających na górze i na dole. To pierwsze wynika z faktu, że na wczesnym etapie gry questy pojawiają się częściej – żeby nie być gołosłownym, zrobiłem statystykę: na pierwszy tysiąc płytek przypadło 120 questów (z czego aż 25 w pierwszej setce), a w kolejnych tysiącach średnio około pięćdziesięciu. Średnia ta wydaje się stabilna, czyli nie mamy równi pochyłej, tylko ułatwienie na początku.

Dwie duże czerwone grupy to z kolei efekt pewnych strategicznych zagrywek: na dole wspomniana rzeka, której przebieg widać gołym okiem, tyle questów tam nawstawiałem. Natomiast czerwona plama na górze to las (bynajmniej nie krzyży). Czemu taki wielki? Otóż lasy tym się różnią od pozostałych rodzajów terenu, że nie ma dla nich questów typu „dokładnie X” – i bardzo słusznie, bo na jednej płytce może się znajdować nawet ze trzydzieści drzewek, więc dokładne trafianie w konkretne liczby byłoby strasznie trudne i frustrujące. Z innymi rodzajami nie ma takiego problemu: domków mieści się góra siedem, farmy najwyżej trzy, a w pozostałych przypadkach jedna płytka to zawsze jeden segment.

Wielka czerwona plama wzięła się zatem z tego, że w tamtej okolicy mam już cztery duże lasy, których z premedytacją nie łączę – warunki questów dostosowują się do tego, co mamy na planszy, więc wielki las generowałby mi trudniejsze questy, dopóki bym go nie zamknął – ale po zamknięciu trzeba by było zaczynać nowy od zera gdzie indziej, a wygodniej jest dokładać questy do istniejącej grupy, którą w razie potrzeby można połączyć jednym ruchem z sąsiednią, żeby zgarnąć ileś bonusów i się cieszyć. A żeby nie tworzyć tych grup zbyt wielu, z czasem zacząłem tam dokładać praktycznie same płytki z questami, zwykłe dodając tylko wtedy, kiedy akurat idealnie mi pasują do układu – stąd takie zagęszczenie.

Na zachodzie mapy gęstość questów jest wyraźnie mniejsza, z wieloma pustymi obszarami – co ponownie wynika ze wspomnianych problemów z torami: ponieważ komplikują one grę, lepiej unikać układania w ich pobliżu questów innego rodzaju, żeby nie utrudniać sobie życia jeszcze bardziej.

A tak wygląda rozkład questów w czasie – każda kolumna to jeden tysiąc płytek.

Z przyczyn opisanych wyżej, ciągle mam wiele aktywnych questów nawet z wczesnych etapów gry – w pierwszych trzech tysiącach zostało już tylko po jednym, ale potem liczby szybko stają się całkiem znaczące; od dwudziestego trzeciego tysiąca aktywne już przeważają, a z osiemdziesięciu ostatnich questów skończyłem jak dotąd tylko jeden. Z czasem to się pewnie będzie rozciągać coraz bardziej, bo im cięższe questy, tym większy średni czas ich „życia”.

Co jeszcze można by tu wygenerować? Ostatnie pole zawierające jakąś mapowalną informację to „rotation”, czyli o ile boków obróciliśmy płytkę przed jej położeniem. Boków jest sześć, więc pole ma wartości od zera do pięciu. Czy może z tego wyjść coś sensownego? Wątpliwe – ale jest tylko jeden sposób, żeby to sprawdzić.

Zgodnie z przewidywaniami dostaliśmy losową sieczkę, w której próżno szukać jakichkolwiek prawidłowości – ale nawet tutaj możemy zauważyć coś szczególnego: wyraźną czarną plamkę na północnym wschodzie i dwie mniejsze na południu, przy ujściu rzeki. Skąd te anomalie? Ano stąd, że te miejsca to jeziora, gdzie układałem/układam same płytki „pełnowodne”, których obracać nie ma po co, skoro są doskonale symetryczne. Jezioro na północnym wschodzie dawno już zamknąłem, ale te na południu dopiero się rozkręcają, więc w przyszłości czarna plama w tym miejscu powinna się stać co najmniej kilka razy większa.

Natomiast liczba płytek według rotacji wygląda następująco:
0: 6412
1: 4252
2: 4052
3: 3846
4: 4142
5: 4296

Zerowy obrót zdarza się wyraźnie częściej niż inne, z powodów częściowo opisanych w poprzednim akapicie: poza wodą zdarzają się puste łąki, wieże wodne i po prostu płytki z kompletem identycznych boków. Z pozostałych wartości najrzadziej zdarza się trójka, a najczęściej jeden i pięć – co nie dziwi, jeśli wziąć pod uwagę, że obroty są symetryczne (obrót o pięć boków to to samo co obrót o jeden, tylko w drugą stronę), więc trójka jest zawsze najdalej, a obracamy zwykle nie więcej niż musimy.

Patrzmy dalej na dane: pole „specialTileId” zawiera zero lub (bardzo rzadko) jedynkę. Co może się pod tym kryć? Jak ustaliłem po zestawieniu ich położeń z widokiem w grze, te z jedynką to wspomniane wcześniej wieże wodne. Od początku gry wyłożyłem ich 331, co stanowi nieco ponad 1% ogólnej liczby płytek – ale tutaj, w odróżnieniu od questów, mamy równię pochyłą: w pierwszym tysiącu płytek miałem 21 wież, w drugim nawet więcej, bo 23, ale potem 19, 18, 17, 15… a w ostatnim pełnym tysiącu już tylko siedem. Smuteczek, bo to bardzo przydatny element.

A oto ich rozkład na mapie:

Wieże stawia się na rzekach i torach, więc ich położenie dość dobrze pokazuje, gdzie tych rzek i torów jest najwięcej – może z wyjątkiem środkowego obszaru, bo raz, że na początku wpadało mi ich więcej, a dwa, że stawiałem je bardziej niefrasobliwie (początkowo zresztą nawet nie wiedziałem, że można do nich podpinać tory – zauważyłem to przypadkiem w trakcie gry).

Więcej pól nadających się do analizy już tu nie ma, ale można zbadać jeszcze jedną kwestię: ilu sąsiadów miała płytka w momencie wyłożenia?

Siatka oparta na heksach odrobinę komplikuje obliczenia – przy kwadratowych polach wystarczyłoby sprawdzić wszystkie wyłożone wcześniej płytki, których obie współrzędne różnią się od naszej o nie więcej niż jeden, natomiast przy zygzakującej poziomej osi trzeba pomijać pozornych sąsiadów po skosie, raz od góry, raz od dołu, w zależności od parzystości. Mam nadzieję, że na załączonym obrazku jest to pokazane wystarczająco przejrzyście.

Zacznijmy od statystyki, czyli ile płytek miało ilu sąsiadów:
1: 3917
2: 6605
3: 9614
4: 4303
5: 1825
6: 1347

Jak łatwo było przewidzieć, zdecydowana większość płytek sąsiadowała z dwiema lub trzema – najczęstsza sytuacja jest bowiem taka, że albo dokładamy coś przy brzegu, albo wypełniamy małe zagłębienie. Lekko mnie zaskoczyła stosunkowo duża liczba szóstek – myślałem, że zatykanie dziurek wewnątrz terenu zdarza się rzadziej, bo staram się unikać ich tworzenia (dziurka otoczona ze wszystkich stron jest o tyle kłopotliwa, że zwykle trudno dopasować wszystkie sześć boków), a tu jednak liczba całkiem znacząca.

Zobaczmy, jak te liczby zmieniały się w czasie – z podziałem na poszczególne tysiące, tak jak na wykresie dla questów:

To, że w pierwszym tysiącu było więcej jedynek niż w kolejnych, nie zaskakuje – ale czemu w następnych paru tysiącach tak mocno wzrosła liczba trójek? Prawdopodobnie dlatego, że zacząłem wtedy bardziej cisnąć na zaokrąglanie i wygładzanie mapy, poza tym długo miałem malutko płytek w puli (często nawet jednocyfrowe liczby), więc musiałem zdobywać dodatkowe jak najczęściej, a najprostszy sposób to wypełnianie małych zagłębień, żeby dopasować ostatni bok do jednej płytki i zaliczyć „perfect”. Z tego też powodu unikałem wtedy jedynek – w trzecim tysiącu miałem ich nawet mniej niż szóstek, niewiarygodne.

W kolejnych tysiącach sytuacja stopniowo się stabilizowała, by w okolicach dziesiątego osiągnąć plateau – od tamtej pory jedyne zauważalne trendy to powolny wzrost liczby czwórek i jeszcze wolniejszy piątek; w ostatnich kilku tysiącach daje się jeszcze zauważyć spadek liczby szóstek, ale taki na granicy błędu statystycznego, więc może to być złudzenie. Czas pokaże.

Dobra, przejdźmy w końcu do mapy.

Cóż – coś tam na tej mapie widać, ale z trudem. Próbowałem eksperymentować z kolorami, żeby poprawić czytelność, ale bez większych sukcesów. Pójdźmy zatem na kompromis, zmniejszając liczbę kolorów: płytki z jednym sąsiadem na czerwono, z dwoma lub trzema na żółto, z czterema i więcej na niebiesko:

Teraz już dobrze widać, na czym stoimy – mapa dość wyraźnie dzieli się na obszary z dominacją żółtego oraz czerwono-niebieskie. Te drugie, jak niektórzy już się może domyślili, to głównie tory i rzeki, gdzie zwykle najpierw powstaje linia (czerwona), potem jej boki (żółte), a na koniec wypełnienia luk (niebieskie). Małym wyjątkiem jest środkowy obszar, gdzie tych torów i rzek wcale tak dużo nie ma – po prostu na początku gry układałem płytki na większym luzie, a dopiero z czasem, kiedy kraina się rozrosła na kilka ekranów, zacząłem wypełniać luki i ją zaokrąglać.

Tyle w kwestii listy płytek. A co z resztą danych w pliku?

Pole „tileStack” zawiera listę płytek do wyłożenia – ale tylko pierwszych trzech, które widać na ekranie; dalsze są najwyraźniej generowane dopiero po wejściu do pierwszej trójki. Tak czy siak, niczego ciekawego z tej listy nie wyciągniemy.

Pole „preplacedTiles” to lista płytek wyłożonych automatycznie (od czasu do czasu takowa pojawia się zakryta gdzieś w pobliżu naszej krainy, a kiedy się z nią połączymy, odkrywa swoją zawartość i questa). Trudno powiedzieć, czemu ona służy, skoro te płytki i tak są uwzględnione w polu „tiles” – aczkolwiek nie są tam w żaden sposób oznaczone, więc nie ma jak zrobić ich mapy – może z pomocą tej listy się uda?

Łatwo nie będzie, bo co tu oznaczają poszczególne pola, pojęcia nie mam: „preplacedTileId” nie wiadomo do czego się odnosi – mamy tu jedno- lub dwucyfrowe liczby w kolejności na oko losowej, które w dodatku czasem się powtarzają – może to jakieś oznaczenie rodzaju płytki? Diabli wiedzą. Z kolei „sectionGridPosX” i „sectionGridPosY” nie są po prostu pozycjami na mapie, jak mogłoby się wydawać na pierwszy rzut oka – ich wartości to kolejne pola wokół pozycji [0, 0], stopniowo się od tego punktu oddalające. Mogłyby to być jakieś względne pozycje (np. względem ostatniej płytki na mapie w momencie pojawienia się) – ale czemu w takim razie są unikalne? Spróbujmy wygenerować ich mapkę, może to pozwoli znaleźć jakiś wzorzec w tych dziwnych pozycjach.

No i zonk: mapka jest miniaturką głównej mapy, co nie ma żadnego sensu. Czyżby współrzędne tych płytek należało pomnożyć przez jakąś wartość, żeby uzyskać właściwe pozycje? No nie – to by oznaczało, że muszą być one rozłożone równomiernie, tymczasem ewidentnie tak nie jest – zdarzało mi się, że dwie takie płytki pojawiały się raptem o kilka pól jedna od drugiej, a całkiem niedaleko trzecia albo i czwarta, więc musi tu być coś jeszcze. Może znowu jakiś pseudolosowy algorytm, który wylicza konkretną pozycję w obrębie większego obszaru? Cóż, do tego raczej nie dojdę, więc lepiej to już zostawić.

Ale nie do końca, bo przyszedł mi do głowy jeszcze jeden pomysł. „Preplaced tiles” (jak to przetłumaczyć na polski – „przedwyłożone płytki”?) mają parę charakterystycznych cech:

  • zawsze zawierają questa;
  • zawsze mają jednego sąsiada w momencie przyłączenia;
  • nigdy nie są obracane.

Zwykłe płytki oczywiście też mogą spełniać wszystkie te warunki – ale jak często się to zdarza? Policzmy: quest pojawia się raz na dwadzieścia płytek, jeden sąsiad zdarza się raz na siedem, a zerowy obrót raz na sześć – iloczyn tych wartości daje nam prawdopodobieństwo 1/840, więc takich przypadkowych trafień powinno być na mapie około trzydziestu, podczas gdy prawdziwych wstawionych płytek mamy 111. Proporcja nienajlepsza, ale wystarczająco dobra, żeby mapa dawała jaki taki obraz sytuacji.

Zbyt wiele z tego obrazu jednak nie wynika. Rozkład, jako się rzekło, równomierny absolutnie nie jest (w niektórych miejscach mamy wielkie puste obszary, gdzie indziej kropka na kropce), ale i prawidłowości w tym żadnej nie widać – w paru miejscach kropki wydają się układać w linie, ale może to być złudzenie. No i skoro nie wiadomo, które są prawdziwe, a które nie, to tym bardziej trudno cokolwiek wyrokować.

Jedno się tu nie zgadza: płytek spełniających kryteria znalazło się 129, czyli fałszywych wychodzi raptem 18 – prawie o połowę mniej, niż wynikało z rachunku prawdopodobieństwa. Jak to możliwe? Liczby nie podlegają dyskusji, każdy z warunków jest niezależny od pozostałych i nie widzę żadnego powodu, dla którego miałyby one być jakkolwiek skorelowane między sobą – a zatem?

Po namyśle przyszło mi do głowy, że w „preplacedTiles” mogą znajdować się także płytki, które już wylądowały na mapie, ale jeszcze ich nie przyłączyłem, więc w „tiles” ich nie ma. Zbadałem sytuację w grze i naliczyłem czternaście takich przypadków – pod ich odjęciu liczba fałszywek rośnie do 32, czyli akurat tyle, ile być powinno. Zagadka rozwiązana.

Ot i wszystko – więcej pomysłów na mapy czy statystyki już nie mam. Pozostaje więc jeszcze tylko wrzucić filmik z okrążeniem dookoła świata, żeby dać przynajmniej ogólne wyobrażenie, jak to wygląda w praktyce:

Na koniec zwróćmy uwagę na jeden niepokojący szczegół: kształt mojej krainy wyraźnie przypomina Rosję – nieforemną, opuchniętą i z rozstrzelonym Kaukazem, ale jednak. Przypadek?


Podobne wpisy

Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Formatowanie tekstu:
W zależności od wybranego formatu możesz używać podstawowych tagów HTML (np. <a>, <i>, <b>, <blockquote>) lub ich odpowiedników w Markdown.

W którym roku skończył się w Polsce komunizm?