You are on page 1of 60

Grzegorz Michalak

Algorytmy proceduralnego
generowania rzeczywistoci
na przykadzie dwuwymiarowej
gry cRPG

Praca magisterska
wykonana pod kierunkiem
dr. Tomasza Gwizday

Uniwersytet dzki
Wydzia Fizyki i Informatyki Stosowanej
d, 2012

Spis treci
1. Wstp................................................................................................................................. 4
1.1 Proceduralno oraz losowo..............................................................................................4
1.2 Zastosowania generatorw proceduralnych..........................................................................5
2. Cel...................................................................................................................................... 7
2.1 Implementacja algorytmw....................................................................................................7
2.2 Wybrane rodowisko programistyczne..................................................................................8
2.2.1 Jzyk programowania....................................................................................................8
2.2.2 Kompilator......................................................................................................................8
2.2.3 Biblioteka graficzna........................................................................................................8
3. Mapa wiata....................................................................................................................... 9
3.1 Elewacja................................................................................................................................9
3.1.1 Automat komrkowy......................................................................................................9
3.1.2 Szum Perlina................................................................................................................10
3.2 Biomy...................................................................................................................................11
3.2.1 Korekta biomw...........................................................................................................12
3.3 Uksztatowanie terenu.........................................................................................................13
3.3.1 Rzeki............................................................................................................................13
3.3.2 Gry.............................................................................................................................14
3.3.3 Lasy.............................................................................................................................14
3.4 Infrastruktura........................................................................................................................15
3.5 Analiza ksztatw.................................................................................................................17
4. Miasto............................................................................................................................... 22
4.1 Plan drg.............................................................................................................................22
4.2 Przygotowanie listy budynkw ............................................................................................23
4.3 Gospodarowanie przestrzeni.............................................................................................24
4.4 Generowanie budynkw......................................................................................................24
4.5 Aranacje pokojw...............................................................................................................27
5. Labirynt............................................................................................................................ 28
5.1 Zastosowanie algorytmu......................................................................................................28
5.2 Hunt&Kill..............................................................................................................................28
5.3 Mapa owietlenia.................................................................................................................29
6. Postacie........................................................................................................................... 31
6.1 Statystyki postaci.................................................................................................................31
6.1.1 Zawody........................................................................................................................31
6.1.2 Cechy indywidualne.....................................................................................................32
6.1.3 Modyfikacje cech.........................................................................................................32
6.2 Animacja szkieletowa...........................................................................................................35
6.2.1 Budowa modelu szkieletowego...................................................................................35
6.2.2 Animacja......................................................................................................................36
7. Nazwy............................................................................................................................... 38
7.1 Technika generowania.........................................................................................................38
7.1.1 acuch Markowa........................................................................................................38
7.2 Imiona postaci......................................................................................................................41
2

7.2.1 Imiona nordyckie..........................................................................................................41


7.2.2 Imiona europejskie.......................................................................................................41
7.2.3 Imiona afrykaskie.......................................................................................................42
7.3 Nazwy miast........................................................................................................................42
7.4 Tytu gry...............................................................................................................................42

8. Efekty specjalne i czcionka............................................................................................44


8.1 Zastosowanie w praktyce....................................................................................................44
8.2 Pomie................................................................................................................................44
8.3 Zjawiska pogodowe.............................................................................................................45
8.4 Czcionka..............................................................................................................................45
8.4.1 Parametryzacja............................................................................................................46
9. Zagadnienia fabularne....................................................................................................47
9.1 Przedmioty...........................................................................................................................47
9.1.1 Inwentarz.....................................................................................................................47
9.1.2 Interakcja z przedmiotami............................................................................................48
9.2 Fabua..................................................................................................................................49
9.2.1 Implementacja zada...................................................................................................50
9.2.2 Przykadowe zadanie...................................................................................................50
10. Optymalizacja aplikacji.................................................................................................52
10.1 Rozmiar aplikacji................................................................................................................52
10.1.1 Dane wewntrzne......................................................................................................52
10.1.2 Komponenty pliku wynikowego..................................................................................53
10.1.3 Zewntrzna kompresja pliku......................................................................................53
10.2 Zuycie pamici.................................................................................................................54
10.3 Zuycie czasu procesora...................................................................................................55
10.4 Wieloplatformowo...........................................................................................................55
10.5 Optymalizacja kodu programu...........................................................................................56
11. Wnioski........................................................................................................................... 58

1. Wstp
Generowanie proceduralne jest dziedzin szeroko wykorzystywan w produkcji mediw
cyfrowych. Algorytmy tworzenia zasobw stosuje si gwnie w programach
przeznaczonych do manipulacji obrazem, jak rwnie grach wideo. W pracy opisany zosta
sposb generowania wszystkich istotnych elementw gier komputerowych wraz z uytymi
w tym celu algorytmami.

1.1 Proceduralno oraz losowo


Element nazywany jest wygenerowanym proceduralnie jeeli zosta stworzony
automatycznie przez algorytmy komputerowe. Jako prosty przykad mona przyj funkcj
rysujc prostokt o wymiarach 20x10px w lewym grnym rogu ekranu. Prostokt
niegenerowany proceduralnie bdzie najczciej grafik wczytywan z pliku
(np. draw_image("prostokat.bmp")) o wymiarach 20x10px, natomiast prostokt
generowany proceduralnie bdzie funkcj rysujc cztery poczone ze sob pod ktem
prostym linie (np. draw_rectangle(0,0,20,10)).
Podejcie proceduralne umoliwia swobodn modyfikacj parametrw procedur.
Korzystanie w takim przypadku z generatorw liczb losowych jest bardzo intuicyjne.
Nawizujc do powyszego przykadu, nie jest problemem wygenerowanie prostokta
o losowej szerokoci. Jeeli przyjmiemy, e funkcja random(x,y) zwraca liczb cakowit
z przedziau <x,y>, to mona j wykorzysta do wywoania funkcji w postaci
np. draw_rectangle(0,0,random(10,30),10).
Uytym w grze generatorem liczb pseudolosowych jest funkcja rand() naleca
do standardowej biblioteki jzyka C++. Zwraca ona cakowit liczb z przedziau
<0,RAND_MAX>. RAND_MAX jest sta zdefiniowan w <cstdlib>. Jej warto domylna
zalena jest od implementacji lecz nie moe by mniejsza ni 32767.
Algorytm korzysta z ziarna losowoci, ktre powinno by inicjalizowane okrelon
wartoci poprzez funkcj srand(int). Dla kadej rnej wartoci ziarna, generator liczb
pseudolosowych tworzy inne sekwencje liczb przy wywoaniu funkcji rand(). Dwie rne
inicjalizacje srand() z podan t sam wartoci ziarna losowoci zapewniaj uzyskanie
tych samych sekwencji liczb przy kolejnych wywoaniach rand(). Dlatego kady obiekt
wystpujcy w grze przechowuje swoje ziarno by mc zosta tak samo odwzorowanym
graficznie przy ponownym pojawieniu si na ekranie.

1.2 Zastosowania generatorw proceduralnych


Najczciej spotykanymi elementami wygenerowanymi proceduralnie s:
tekstury efekty wizualne, takie jak szum Perlina 1, s szeroko wykorzystywane
w produkcji filmw z efektami specjalnymi (pierwsze zastosowanie w filmie Tron
z 1982 roku) oraz w dziedzinie gier komputerowych,
siatki modeli 3D proceduralno pozwala na bardzo szybkie tworzenie
rozlegych terenw i obszarw miejskich2,
dwik spotykany zarwno w syntezie mowy jak i komputerowej kompozycji
melodycznej3 (Stephen Hawking korzysta z systemu generowania mowy, ktry
umoliwia mu komunikacj),
fraktale4 wizualizacja odpowiednich wzorw matematycznych pozwala uzyska
obrazy reprezentujce obiekty samo-podobne.

Wykorzystywanie generatorw w grach komputerowych jest zjawiskiem powszechnym.


Zwykle s to zasoby takie jak:
struktura poziomw - tworzenie labiryntw dla produkcji typu hack and slash
(Diablo II5 wydana w 2000 roku ma swoich aktywnych fanw po dzi dzie,
natomiast Minecraft6, z tworzonym pseudolosowo wiatem, zdoby ponad milion
nabywcw w przecigu kilku miesicy),
elementy fabuy - gwnie spotykane w grach typu cRPG (poczwszy
od The Elder Scrolls II: Daggerfall7),
animacja postaci - system automatycznego tworzenia animacji stworw w Spore8,
fauna i flora - popularny system SpeedTree pozwala wygenerowa losowe,
niepowtarzajce si drzewa (z aplikacji tej korzystaj zarwno czoowi producenci
gier komputerowych na wiecie jak i przemys filmowy, np. James Cameron w filmie
Avatar),
rozmieszczenie przedmiotw - Borderlands - losowe generowanie znajdywanych
broni i przedmiotw9,
liczba przeciwnikw - innowacyjny modu AI Director 10 na podstawie osigni
gracza automatycznie dopasowuje do niego poziom trudnoci gry (Left 4 Dead),
efekty pogodowe - animacja fal na wodzie, ladw na niegu, bd spadajcych
kropli deszczu rwnie przebiega proceduralnie11 (The Elder Scrolls III: Morrowind
korzysta z systemu Water Interaction promowanego swego czasu przez NVIDIA).
Osobnym, lecz bardzo mao popularnym, gatunkiem gier komputerowych s produkcje
generowane w caoci proceduralnie. Sztandarowym dzieem owej dziedziny jest .kkrieger12
[1] http://www.noisemachine.com/talk1/
[2] http://www.procedural.com/, http://www.planetside.co.uk/
[3] http://www.animenewsnetwork.com/feature/2011-07-15/
[4] http://chaospro.de
[5] http://diablo2.diablowiki.net/Diablo_Levels
[6] http://notch.tumblr.com/post/3746989361/terrain-generation-part-1
[7] http://www.uesp.net/wiki/Daggerfall:Quest_hacking_guide
[8] http://www.chrishecker.com/Real-time_Motion_Retargeting_to_Highly_Varied_User-Created_Morphologies
[9] http://borderlands.wikia.com/wiki/Lootable_object
[10] http://left4dead.wikia.com/wiki/The_Director
[11] http://exoed.com/source-engine-daynight-cycle-dynamic-weather/1330/
[12] http://www.theprodukkt.com/kkrieger

- gra akcji FPP, podobna do Quake III Arena, zajmujca na dysku 96kB, gdy jedynym
zasobem jaki posiada, jest jej kod wykonywalny.
Zakres wykorzystywania elementw generowanych proceduralnie zmienia si wraz z rozwojem technologii informatycznych. Kiedy rozmiary pamici komputerowej byy bardzo
ograniczone, generowanie proceduralne pozwalao zredukowa wielko aplikacji, gwnie
poprzez losowe tworzenie poziomw gry.
Wraz z rosnc moc obliczeniow komputerw, producenci gier ukierunkowali
si na rczne tworzenie zawartoci. Wszelkie modele i tekstury s tworzone przez
grafikw, a muzyka i efekty nagrywane w studiach, umoliwiajc pen kontrol nad
produktem wynikowym. Drug stron takiego rozwizania jest powtarzalno - za kadym
razem kiedy uruchomimy gr otrzymujemy t sam zawarto. Taki sposb produkcji gier
kadzie zdecydowany nacisk na prac grafikw, natomiast coraz mniejsz wag przykada
si do rozwiza algorytmicznych, przez co wydawanych jest coraz wicej tytuw
klasyfikowanych jako visual-novel13, ktre dalece odstpuj od klasycznej definicji
gry komputerowej.
Obecnie generatory stosuje si w ograniczonym zakresie, jednak twrcy w zdecydowanej
wikszoci produkcji wprowadzaj czynnik losowy aby urozmaici rozgrywk bd
dostosowa j do umiejtnoci graczy. Std te proceduraln zawarto mona spotka
zarwno w produkcjach klasy AAA, jak i grach niezalenych.

Poczwszy od rozdziau 3. analizowane s sposoby generacji kolejnych elementw gry.


Nazwa rozdziau jest rwnoczenie nazw komponentu jaki opisuje, natomiast
podrozdziay su uporzdkowaniu informacji na temat algorytmicznego tworzenia danego
elementu.

[13] Chris Klug, Josiah Lebowitz: Interactive Storytelling for Video Games: A Player-Centered Approach to
Creating Memorable Characters and Stories. Burlington, MA: Focal Press. pp. 1947. ISBN 0-240-81717-6.

2. Cel
Celem pracy jest analiza zalet i wad elementw generowanych proceduralnie w grach.
rdem analizy jest w peni funkcjonalna gra cRPG (computer Role Playing
Game - Komputerowa gra fabularna korzystajca z tej samej mechaniki i terminologii
co tradycyjne gry RPG), z zasobami wygenerowanymi w caoci proceduralnie, utworzona
specjalnie na potrzeby pracy.
Do tej pory nie stworzono komputerowej gry fabularnej, ktra w ten sposb zapewniaa
by jednoczenie grywalno oraz niepowtarzalno elementw.

2.1 Implementacja algorytmw


W celu stworzenia niezbdnych zasobw do gry, naley wykorzysta szereg algorytmw
generujcych, m.in.:
lokacje:
wiat (ldy, wody, strefy klimatyczne),
otwarte tereny (lasy, rzeki, skay),
miasta, w tym:
budynki,
drogi,
labirynty,
postacie:
bohater gry,
postacie niezalene,
przedmioty:
uzbrojenie,
przedmioty jednorazowego uytku,
elementy wystroju wntrz (meble, dekoracje),
zjawiska pogodowe (deszcz oraz nieg),
grafik (wyej wymienione elementy musz posiada swoj reprezentacj graficzn
na ekranie),
nazwy (dla miast, bohaterw niezalenych, czy przedmiotw),
przebieg fabuy (drzewa dialogowe dla rnych zada).

2.2 Wybrane rodowisko programistyczne


2.2.1 Jzyk programowania
Wybranym jzykiem programowania uytym do implementacji pisanej gry jest C++.
Programowanie obiektowe jest obecnie uywanym standardem w pisaniu kodu gier
komputerowych, a jzyk ten doskonale wspiera takie podejcie.
Kolejn zalet jzyka C++ jest moliwo programowania niskopoziomowego z jawnym
dostpem do pamici. Umoliwia to optymalizacj instrukcji generatorw
oraz minimalizacj rozmiaru uzyskanej aplikacji.

2.2.2 Kompilator
Obecnie istniej dwa liczce si kompilatory jzyka C++ - GCC (GNU Compiler
Collection) oraz Visual C++. Pierwszy z nich jest kompilatorem rozwijanym na zasadzie
wolnego oprogramowania i powszechnie wykorzystywanym do tworzenia programw
gwnie w rodowisku Linux. Visual C++ jest kompilatorem dziaajcym w systemach
rodziny Windows oraz domylnie dostarczany w zintegrowanym rodowisku
programistycznym Visual Studio. Oba kompilatory s zgodne ze standardami jzyka C++
i zapewniaj optymalny proces kompilacji programw.
Z uwagi na moliwoci oferowane przez Microsoft Visual Studio 2010 Premium
oraz moliwos korzystania z jego penej, legalnej wersji poprzez program akademicki
DreamSpark Premium14, wybranym kompilatorem zosta Visual C++.

2.2.3 Biblioteka graficzna


Wbrew pozorom nie istnieje wiele bibliotek graficznych wspomagajcych tworzenie gier
z grafik dwuwymiarow. Biblioteki takie jak SDL 15, czy SFML16 oferuj niskopoziomowy
dostp do funkcji multimedialnych, lecz przystosowanie ich do stworzenia gry zajoby
nieotymalnie duo czasu. Najlepszym wyjciem w tym przypadku okazuje si biblioteka
Allegro17 w wersji 5. Jest to platforma przystosowana do tworzenia gier 2D,
a do jej gwnych zalet mona zaliczy:
akceleracj sprztow przy uyciu karty graficznej,
pen kompatybilno na rnych platformach sprztowych i systemach
operacyjnych,
moliwo niskopoziomowego dostpu do funkcji karty graficznej poprzez DirectX
i OpenGL.

[14] www.microsoft.com/poland/edukacja/dreamsparkpremium_dla_studenta.aspx
[15] www.libsdl.org
[16] www.sfml-dev.org
[17] alleg.sourceforge.net

3. Mapa wiata
wiat w grze reprezentowany jest przez siatk skadajc si z rwnych rozmiarw
kwadratw, w dalszej czci pracy nazywanych rwnie polami. Mapa wiata znajdujca
si w grze jest tablic pl o wymiarach 120x100. Aby jak najlepiej odda warunki
rzeczywiste, naley rozrni obszary ldowe od morskich, nada im charakterystyczne
cechy klimatyczne oraz flor.

3.1 Elewacja
Pierwszym etapem generowania wiata gry jest stworzenie mapy wysokoci terenu.
Cz wykorzystywanych algorytmw zwraca jednak wartoci zero-jedynkowe, co pozwala
wycznie na oddzielenie wd od ldw. W najprostszej wersji rezultatem takiego dziaania
jest przypisanie dla kadego pola wartoci 1 (ld) lub 0 (woda). Czynno t mona
wykona na wiele sposobw, w pracy zostay przetestowane dwa z nich.

3.1.1 Automat komrkowy


Proces ten bazuje na koncepcji damage spreading18 automatw komrkowych. Regua
uytego automatu polega na wybraniu zadanej iloci losowych kwadratw na siatce
wypenionej nieokrelonymi polami, a nastpnie przypisania im wartoci 1. Powstae pola
ldowe dodawane s na list. Dla kadego elementu listy sprawdzane jest osiem
pl ssiadujcych, jeeli ktrekolwiek z nich nie ma ustalonej adnej wartoci, dokonuje si
losowego przypisania zera lub jedynki z ustalonym wczeniej prawdopodobiestwem
oraz dodanie tego pola na list. Po sprawdzeniu wszystkich ssiadw, obecny kwadrat
usuwany jest z listy. Automat dziaa dopki lista nie jest pusta.

Rysunek 1: Przykady ldu wygenerowanego poprzez automat komrkowy.


Kolor biay oznacza wod.

[18] F.Bagnoli, R.Rechtman, S.Ruffo, Damage spreading and Lyapunov exponents in cellular automata,
Phys.Lett.A, 172, 34, 1992

3.1.2 Szum Perlina


Algorytm generujcy szum Perlina polega na poczeniu ze sob interpolowanych tablic
pseudolosowych szumw ze zmienn dokadnoci. Rozwizanie takie, w przeciwiestwie
do automatu komrkowego, pozwala na nadanie polom wartoci z wybranego przedziau,
a nie tylko zero-jedynkowych. W praktyce funkcja generujca szum Perlina zwraca
dwuwymiarowy obraz w odcieniach szaroci. Dokonujc prostej interpretacji mona
przyj, e jasno poszczeglnych pl jest proporcjonalna do ich wirtualnej wysokoci
jako elementw wiata. Jeeli wybierzemy warto odpowiadajc wysokoci poziomu
wody, atwo mona okreli ktre pola znajduj si pod tafl, a ktre nad.
Algorytm dziaania szumu Perlina na przykadzie dwuwymiarowej bitmapy:
1. Korzystajc z generatora liczb
pseudolosowych, tworzymy podstawow map szumu o okrelonym rozmiarze (AxB). Powstay obraz skada
si z pojedynczych, czarnych lub biaych pikseli (Rysunek 2 dla n=1).
2. Dokonujemy przypisania n=2.
3. Tworzymy now map korzystajc
z wycinka podstawowej o n2 mniejszym
rozmiarze (A/n x B/n).
4. Skalujemy nowo powsta map
do rozmiarw bitmapy pocztkowej,
stosujc interpolacj funkcj cosinus.
Uzyskany obraz posiada czarne i biae
piksele w odstpach rwnych n interpolowanych skal szaroci.

Rysunek 2: Bitmapy powstae dla rnych iteracji


szumu Perlina.

5. Powtarzamy punkty 3 i 4 za kadym razem inkrementujc warto n, a do uzyskania


podanej dokadnoci.
6. czymy uzyskane bitmapy poprzez sumowanie wartoci
pikseli pomnoonych przez wag przypisan do kadego
obrazu. Dla najwyszego n, waga bitmapy wynosi w=0.5,
natomiast dla pozostaych obrazw jest to w(n)=w(n+1)/2.
W przedstawionym na obrazie przykadzie bd to wartoci:
n=6 w=0.5
n=5 w=0.25
n=4 w=0.125
...

Rysunek 3: Bitmapa
powstaa ze scalenia map
czstkowych

Ze wzgldu na specyfik generowania i czenia ze sob obrazw, takie rozwizanie


nazywa si uamkowymi ruchami Browna19.
[19] J. Beran: Statistics for Long-Memory Processes, Chapman & Hall, 1994. ISBN 0-412-04901-5

10

Interpolacja w wygenerowanym szumie sprawia, e uzyskany obraz mona przyrwna


do rzeczywistoci - czym dalej w gb ldu, tym wicej obszarw grskich.

Rysunek 4: Przykady ldu uzyskanego przez zdigitalizowany szum Perlina

Do generowania wiata w projekcie uyty zosta szum Perlina. Gwnym czynnikiem


wiadczcym o przewadze tego rozwizania nad automatem komrkowym jest moliwo
rwnoczesnego liczenia elewacji, co znacznie uatwia pniejsze generowanie biomw.
Czynnikiem kolejnym okazuje si zbliona do rzeczywistej reprezentacja wybrzea, ktra
jest bardziej smuka i pynna ni otrzymana poprzez automat komrkowy.

3.2 Biomy
Kolejnym etapem generowania wiata jest podzielenie go na biomy, czyli strefy rnice
si klimatem, faun oraz flor. Skala wielkoci wiata jest przyjta tutaj bardzo umownie.
Gdyby biomy wystpoway tak, jak w naturze, caa gra toczyaby si w jednej strefie
klimatycznej. Rozwizanie takie jest niedopuszczalne, ze wzgldu na wystpujc wtedy
nisk rnorodno odwiedzanych lokacji.
Biom dla kadego pola jest wyliczany jako funkcja dwch parametrw: wysokoci
nad poziomem morza oraz temperatury. Dziki temu, e jako generator terenu wybrany
zosta szum Perlina, wysoko pola mona atwo uzyska odczytujc i digitalizujc
jego jasno. Temperatura wyliczana jest w identyczny do wysokoci sposb. Korzystajc
z tej samej metody generowany jest obraz rozkadu ciepa.

Wysoko

Dla kadego pola bdcego ldem przypisujemy warto wysokoci i temperatury,


mieszczc si w zakresie 1-3. Taka ilo moliwoci pozwala na zadeklarowanie
dziewiciu rnych biomw. Ponisza tabela jest pewnym uproszczeniem uywanego
w klimatologii diagramu Whittakera20.

Pustynia lodowa

Lasy twardolistne

Step

Tundra

Lasy liciaste

Pustynia

Tajga

Lasy rwnikowe

Sawanna

Temperatura
Tabela 1: Przypisanie biomu w zalenoci od wysokoci i temperatury.

[20] Robert H. Whittaker: Communities and Ecosystems, Macmillan, 1975. ISBN 0-02-427390-2

11

Rysunek 5: Przykad poczenia dwch map z szumem Perlina. Obraz lewy


przedstawia wysoko nad poziomem morza, rodkowy temperatur, a prawy
wynikow map.

Oczywicie w naturze taki sposb jest nie do przyjcia, poniewa rzeba terenu danego
regionu jest zawsze cile zalena od obecnego biomu. Wysoce nieoptymalna byaby
jednak implementacja procesw formowania powierzchni, bazujca na klimacie, pogodzie
i warunkach atmosferycznych. Z tego te wzgldu zastosowano rozwizanie pozwalajce
na niezalene generowanie uksztatowania terenu i stref klimatycznych, gdzie
za powizania tych dziedzin odpowiada podana wczeniej tabela.

3.2.1 Korekta biomw


Mapa wygenerowana przez szum Perlina wymaga kilku popraw jakociowych. Konieczna
jest rwnie analiza topografii uzyskanego terenu na potrzeby wiarygodnego
odwzorowania wiata.

Rozrnienie oceanw i jezior


Oglnie przyjtym zaoeniem jest, e kady obszar wodny graniczcy z krawdzi
mapy (kocem obrazu) traktowany jest jako ocean. Pozostae akweny wodne
s otoczone przez ld, wic przypisywana jest im warto jeziora.

Wyszukiwanie wybrzey
Kade pole bdce ldem bezporednio graniczcym z oceanem zapisywane
jest jako wybrzee.

Usuwanie pojedynczych biomw


Po przypisaniu biomw, na mapie wiata
pojawiaj si pojedyncze miejsca posiadajce przypisany inny biom, ni ssiadujce (w terminologii otoczenia von Neumana) z nimi pola. W rozumieniu szumu
Perlina, s to ekstrema lokalne funkcji
na ograniczonym obszarze (najwyej Rysunek 6: Redukcja pojedyczych biomw.
3x3 pola). W celu estetycznego wyrwnania terenu, biomy w tych miejscach zastpowane s losowymi biomami z pl ssiednich.

Po wygenerowaniu stref klimatycznych i przypisaniu kademu polu odpowiedniej wartoci


biomu, algorytm przechodzi do tworzenia terenu. Kady kwadrat mapy ma przypisan
jedn warto, charakteryzujc to, co znajduje si na danym gruncie.

12

3.3 Uksztatowanie terenu


3.3.1 Rzeki
Rzeki zajmuj okoo 0,1% cakowitej liczby pl na mapie wiata. Kada rzeka ma swoje
rdo na polu z biomem o najwyszej wysokoci, czyli s to; step, las twardolistny
lub pustynia lodowa. Dla kadej rzeki, losowo wyznaczany jest kierunek jej ujcia,
nastpnie w myl reguy automatu komrkowego, pole ssiadujce ze rdem
jest oznaczane jako rzeka. To, ktre z p ssiednich zostanie wybrane jako nowe pole
rzeki, wyznaczane jest na podstawie jej kierunku oraz losowego prawdopodobiestwa. Taki
schemat zostaje powtarzany dopki ostatnio aktualizowane pole jest oceanem, jeziorem,
graniczy z krawdzi mapy lub inn, aktualnie istniejc rzek (powstaje wtedy dopyw).
Przykad:
Jeeli kierunek rzeki zostanie wylosowany jako 30 w skali 360. stopniowej, gdzie 0
odpowiada kierunkowi wschodniemu, a 90 pnocnemu, to przy obecnym rdle w polu
(X,Y) prawdopodobiestwa przypisania terenu rzeki dla pl ssiednich przedstawia
si nastpujco:
P(X+1, Y)
P(X-1, Y)
P(X, Y-1)
P(X, Y+1)

= 2/3
= 0
= 1/3
= 0

Naley pamita, e pole (0,0) mapy wiata znajduje si w jej lewym-grnym rogu.
Jeeli uzyskana warto losowa wskazuje na pole (X+1, Y) to staje si ono polem
aktualnym (X,Y). Powysze wartoci prawdopodobiestwa pozostaj niezmienne
do koca ewolucji biegu rzeki.
Poniewa
przedstawiony
algorytm
moe
produkowa zaptlenia (klastry pl 2x2 bdcych
rzekami),
stosuje
si
naiwne
rozwizanie
redukujce takie ptle poprzez usuwanie rzek z pl
posiadajcych najmniej takich samych ssiadw.

Rzeki w rozgrywce
Rysunek 7: Korekcja przepywu rzeki.
Gracz nie moe wej na pole bdce
rzek. Jeeli powstanie tam droga, jest ona transformowana w most, ju osigalny
dla bohatera.

Rysowanie rzek
W celu optymalnie szybkiego oraz estetycznego wywietlania
reprezentacji rzek, w programie zastosowano szablon do ich produkcji.

graficznej

Majc do dyspozycji rysowanie okrgw oraz losowo znieksztaconych brzegw rzeki,


renderowanie kadego pola rozpoczyna si od narysowania koa w jego centrum,
a nastpnie, w zalenoci od pl ssiadujcych, pocze midzy nimi.

13

3.3.2 Gry
Prawdopodobiestwo przypisania terenu grzystego dla danego pola
przedstawia wygenerowana, poprzez ponowne zastosowanie szumu
Perlina, bitmapa w skali odcieni szaroci. W tym przypadku, zwaywszy
na aspekt rozgrywkowy, szum posiada wiksz ziarnisto, dziki czemu
mapa jest zrwnowaona pod wzgldem wystpowania gr. Jasno
piksela z uzyskanej mapy okrela prawdopodobiestwo przypisania
terenu grzystego do tego pola.
Rysunek 8:
Reprezentacja
graficzna gr.

Gry w rozgrywce
Pole zajte przez skay jest nieosigalne dla gracza, nie mona
rwnie przez nie przeprowadzi drogi czcej miasta.

Rysowanie gr
Wzgrze powstaje poprzez czenie losowo wybranych punktw tworzcych
aman otwart zwyczajn, ktra nastpnie jest zamykana poprzez poczenie
z punktami podstawy. Uzyskana figura jest wypeniana kolorem zalenym od biomu
na jakim si znajduje.

3.3.3 Lasy
Lasy na mapie wiata prezentowane s jako pojedyncze drzewa. Prawdopodobiestwo
umiejscowienia ich na danym polu zaley, analogicznie jak w przypadku gr,
od wygenerowanej bitmapy oraz przypisanego biomu. Skutkuje to map, na ktrej,
dla przykadu, zalesienie w strefie lasw liciastych jest o wiele wiksze ni w strefie
pustynnej.

Lasy w rozgrywce
Gracz moe swobodnie przemieszcza si po polach oznaczonych jako lasy,
jednake prawdopodobiestwo zaatakowania bohatera przez losowych
przeciwnikw jest wtedy znaczco wysze.

Rysowanie lasw
Na kady biom wystpujcy w grze, przypada
jeden rodzaj wywietlanego drzewa. S to:
akacja (sawanna),
kaktus (pustynia),
krzew stepowy (step),
bananowiec (lasy tropikalne),
db (lasy liciaste),
pistacja (lasy twardolistne),
wierk (tajga),
brzoza karowata (tundra),
sosna karowata (pustynia polarna).

Rysunek 9: Reprezentacje
graficzne drzew.

W rysowaniu drzew wykorzystano wiele rnych technik, poniewa kady gatunek


posiada zupenie odmienn charakterystyk. Licie najczciej s przedstawione jako

14

elipsy, natomiast iglaki generuje si przez nakadanie na siebie malejcych trjktw.


Do wytworzenia niektrych specyficznych ksztatw uyto krzywych Bzier'a21.

3.4 Infrastruktura
Na powsta, wypenion terenem, map nakada si elementy infrastruktury. Nale
do nich miasta, drogi, mosty oraz porty. Ilo miast losowana jest z przedziau <10,20>.
Kady element infrastruktury zajmuje powierzchni jednego pola.
Pierwszym krokiem generowania infrastruktury jest losowe wybranie dwch pl
na ktrych umieszczone zostan miasta, oraz poczenie ich ze sob. Miasto moe
powsta na kadym terenie z wyjtkiem oceanw, wybrzey, rzek oraz gr. W celu
wyznaczenia drogi pomidzy dwoma pocztkowo utworzonymi miastami stosuje si
heurystyczny algorytm A*22. Jest to powszechnie stosowany w grach komputerowych
sposb wyznaczania trasy midzy dwoma punktami. A* jest najszybszym z algorytmw
wyszukiwania najkrtszej drogi w grafie, dajcy przy tym najblisze optymalnym wyniki.
Schemat dziaania algorytmu A*:
Wymagane struktury danych:
- zbir pl przeszukiwania posiadajcych dodatkowo parametry:
F - ocena cieki bdca sum parametrw G i H,
G - koszt ruchu z punktu startowego do danego pola,
H - przewidywany koszt ruchu z danego pola do pola kocowego,
wsprzdne pola rodzica,
- lista otwarta,
- lista zamknita.
1. Umie pole pocztkowe na licie otwartej.
2. Znajd na licie otwartej element posiadajcy najnisz warto F. Od tej pory
jest on aktywnym polem.
3. Dodaj aktywne pole do listy zamknitej
3a. Pierwszy warunek stopu: Pole docelowe zostao dodane do listy zamknitej.
4. Dla kadego pola ssiadujcego z aktywnym:
4a. Jeeli jest nieosigalne lub znajduje si na licie zamknitej, zignoruj je.
4b. Jeeli nie znajduje si na licie otwartej:
- dodaj je do niej,
- uczy wierzchoek aktywny rodzicem sprawdzanego pola,
- oblicz dla niego wartoci parametrw:
- G przyjmuje warto rodzica powikszon o jeden,
- H jest euklidesow odlegoci do punktu kocowego,
- F jest sum wartoci G i H.
4c. Jeeli znajduje si na licie otwartej, sprawd czy jego warto G jest wiksza
od zinkrementowanej wartoci G pola aktywnego, jeli tak:
[21] James D Foley, Andries van Dam, Steven K Freiner, John F Hughes, Richard L Phillips: Wprowadzenie do
grafiki komputerowej. Jan Zabrodzki (tumaczenie). Warszawa: Wydawnictwa Naukowo-Techniczne,
1995. ISBN 83-204-1840-2.
[22] P.E.Hart, N.J.Nilsson, B.Raphael: A Formal Basis for the Heuristic Determination of Minimum Cost Paths,
IEEE Transactions on Systems Science and Cybernetics SSC4 4 (2): 100107, 1968

15

- uczy wierzchoek aktywny rodzicem sprawdzanego pola,


- przelicz wartoci parametrw G i F.
5. Drugi warunek stopu: Lista otwarta nie zawiera adnych elementw. Nie znaleziono
drogi.
6. Wr do punktu 2.
Jeeli nie znaleziono drogi pomidzy miastami, losowana jest nastpna para,
a wyszukiwanie drogi powtarzane. Majc dwa poczone miasta pocztkowe, algorytm
losuje kolejne i czy je z istniejca infrastruktur.

Mosty
Jeli okae si, e droga prowadzi przez rzek, na polu tym
zostanie umieszczony most.

Porty
W przypadku, kiedy nowo wylosowane miasto nie czy si
z adn drog ani innym miastem, przyjmuje si, e znajduje si
ono na innej wyspie. W takim wypadku powtarza si algorytm
wyszukiwania drogi z moliwoci poprowadzenia trasy przez
ocean. Jeeli takie poczenie znaleziono, to kade pole drogi
pooone na oceanie i graniczce z drog ldow traktuje si
jako port. W przeciwnym wypadku losowane jest nowe pooenie
miasta.

Rysunek 10:
Reprezentacja
graficzna mostu.

Rysunek 11:
Reprezentacja
graficzna portu.

Miasta w rozgrywce
Kade takie pole symbolizuje obszar ktry moe zosta odwiedzony przez gracza.
Wchodzc do miasta bohater przenosi si z mapy wiata do wygenerowanej
lokacji, gdzie moe odwiedza poszczeglne domy i rozmawia z mieszkacami.

Rysowanie miast
Zalenie od temperatury biomu na obszarze ktrego znajduje si
miasto, istniej trzy typy miast:
na terenie pustynnym - domy zbudowane gwnie
z kamienia, czciowo lepianki i szaasy,
na terenie umiarkowanym - budynki z cegie, osady
ogrodzone murem,
na terenie chodnym - chaty z drewna, ocieplane som.
Do rysowania domw nie uywa si adnych specjalistycznych
algorytmw generujcych. Elementy architektoniczne tworzy
si poprzez
losowe
dobieranie
wymiarw
budynkw,
umiejscowienia drzwi, czy bram.

Rysunek 12:
Reprezentacja
graficzna miast.

16

3.5 Analiza ksztatw


W celu sprawdzenia wiarygodnoci wynikw algorytmu szumu Perlina oraz tego
jak z geograficznego punktu widzenia ma si on do wiata realnego, dokonano analizy
porwnawczej obu uniwersw.
Gwnym czynnikiem do zestawienia w przypadku generowania mapy wiata jest ksztat
ldw i wd. Najlepszym sposobem ich porwnania jest analiza geometryczna z zakresu
cyfrowego przetwarzania obrazw. Poniewa obliczanie wspczynnikw ksztatu ma sens
tylko dla jednolitych, zamknitych obszarw, najlepiej w tym przypadku dokona analizy
jezior wygenerowanych przez aplikacj oraz tych istniejcych w rzeczywistoci.
Na potrzeby testu wygenerowano dziesi kolejnych losowych map, a nastpnie
wyodrbniono z nich ksztaty zbiornikw wodnych. Jeeli nie byy one zamknite i koczyy
si poza granicami obrazu, dokonywano ich ekstrapolacji. Uzupenianie wykonywano
rcznie by przy jednoczesnym zachowaniu wiarygodnego ksztatu doda zbiornikom
jak najmniej objtoci.

Rysunek 13: Wyodrbnienie obszarw wodnych z przykadowych map.

17

Dla celw projektu wybrane zostao pi wskanikw ksztatw23 obiektw:

Zawarto
Popularny wskanik niezaleny od liniowych transformacji - skali i rotacji,
opisywany wzorem:

RZ =

Gdzie
A - dugo ciciwy duszej,
B - dugo ciciwy krtszej.

a
b

Gdzie
a - dugo duszego boku prostokta grnaicznego,
b - dugo krtszego boku prostokta granicznego.

Prostoktno
Jako stosunek pola powierzchni obiektu do pola powierzchni prostokta
granicznego opisanego na tym obiekcie.

RP=

A
B

Smuko
Jest stosunkiem dugoci bokw prostokta granicznego opisanego na obiekcie
(kolor czerwony na rysunkach) wyraana wzorem:

RS =

Gdzie
L - obwd,
S - pole powierzchni.

Centryczno
Jest to stosunek dugoci maksymalnej ciciwy A, obiektu, do maksymalnej
dugoci ciciwy B prostopadej do A (ciciwy na rysunkach oznaczono kolorem
zielonym).

RC =

L2
4S

S
ab

Gdzie
S - pole powierzchni,
a - dugo duszego boku prostokta granicznego,
b - dugo krtszego boku prostokta granicznego

Wspczynnik Malinowskiej
Jest jednym z najprostszych wspczynnikw ksztatu stosowanych w cyfrowej
analizie obrazw i wyraa si wzorem:

RM =

L
1
2 S

Gdzie
L - obwd,
S - pole powierzchni.

[23] Wedug wykadu M. Kujawiska: Cyfrowe przetwarzanie obrazw. Politechnika Warszawska, Wydzia
Mechatroniki, Instytut Mikromechaniki i Fotoniki

18

Ponisza tabela prezentuje otrzymane wyniki dla ksztatw wygenerowanych przez szum
Perlina.

Rysunek 14: Wygenerowane obszary wodne poddane analizie.

Numer
figury

Zawarto

Centryczno

Smuko

Prostoktno

Wspczynnik
Malinowskiej

1
2
3
4
5
6
7
8
9
10
11
12
13
14

3,28
4,26
2,12
3,23
5,15
2,21
6,15
2,41
4,92
5,33
4,84
5,35
4,43
6,73

1,26
1,97
1,50
1,92
1,22
1,78
2,46
1,02
2,20
1,18
2,05
2,14
1,29
1,49

1,29
1,74
1,41
1,89
1,27
1,57
2,34
1,12
1,43
1,08
1,71
2,33
1,13
1,47

0,57
0,55
0,75
0,62
0,60
0,63
0,45
0,71
0,46
0,52
0,49
0,56
0,54
0,50

0,81
1,06
0,46
0,80
1,27
0,49
1,48
0,55
1,22
1,31
1,20
1,31
1,11
1,59

Tabela 2: Wspczynniki ksztatu dla wygenerowanych obszarw.

W celu porwnania ksztatw z figurami realnie wystpujcymi w przyrodzie,


do zestawienia wybrano najwiksze jeziora na Ziemi. Obrazy satelitarne zostay
przeskalowane, aby wzgldnie pasowa do wymiarw ksztatw z poprzedniego testu.
Nastpnie wykonano dla nich identyczne pomiary.

19

Ponisza tabela prezentuje otrzymane wyniki dla ksztatw najwikszych jezior na kuli
ziemskiej.

Rysunek 15: Realne zbiorniki wodne poddane analizie.

Numer
figury

Zawarto

Centryczno

Smuko

Prostoktno

Wspczynnik
Malinowskiej

1
2
3
4
5
6
7
8
9
10
11
12
13
14

3,80
6,59
2,56
3,86
5,19
7,13
9,45
5,03
5,55
3,33
4,92
2,20
4,46
8,04

4,08
1,56
1,81
2,32
1,37
2,41
1,84
2,04
3,50
2,04
1,75
2,22
3,14
2,17

2,84
2,00
1,57
2,09
1,18
2,00
1,53
2,02
3,23
1,75
1,43
2,00
2,52
1,99

0,48
0,38
0,63
0,63
0,45
0,41
0,46
0,60
0,51
0,56
0,56
0,65
0,51
0,31

0,95
1,57
0,60
0,97
1,28
1,67
2,07
1,24
1,36
0,82
1,22
0,48
1,11
1,84

Tabela 3: Wspczynniki ksztatu dla realnych zbiornikw wodnych.

Wyniki obu testw oscyluj w podobnych granicach. Aby dokona bezporedniego


porwnania otrzymanych wartoci obliczona zostaa rednia arytmetyczna oraz odchylenie
standardowe z wynikw kadego wspczynnika ksztatu.

20

rednie wartoci
elementw
wygenerowanych

rednie wartoci
elementw
rzeczywistych

Zawarto

4,32 1,46

5,15 2,07

Centryczno

1,68 0,46

2,30 0,77

Smuko

1,56 0,41

2,01 0,55

Prostoktno

0,57 0,09

0,51 0,10

Wsp. Malinowskiej

1,05 0,37

1,23 0,45

Cecha

Tabela 4: Porwnanie rednich wynikw kolejnych wspczynnikw ksztatu dla obu testw.

Najwiksz rnic odznacza si wskanik centrycznoci z czego wywnioskowa mona,


e elementy generowane komputerowo nie posiadaj tak duego zrnicowania ksztatw
jakie wystpuje w naturze.
Zblione wyniki prostoktnoci oraz smukoci wiadcz o dobrym doborze parametrw
szumu Perlina oraz oglnym okooeliptycznym charakterze jezior w naturze.
Szczegln uwag powinny zwrci podobne rednie wspczynnika Malinowskiej,
ktre wskazuj stopie skomplikowania obwodu. Rzeczywiste zbiorniki wodne posiadaj
nieregularne rodzaje nabrzea, lecz, jak wida, algorytm generowania szumu jest w stanie
wytworzy ksztaty o zblionym poziomie zrnicowania obwodu.

21

4. Miasto
Ze wzgldu na przyjt konstrukcj map gry (ktre skadaj si z kwadratowych pl,
a w przypadku miast s ich tablic o wymiarach 60x60), reprezentacja poszczeglnych
budynkw w miecie opiera si na planach prostoktw. Najbardziej adekwatnym
dla takiego modelu schematem rozmieszczenia ulic jest architektura nowojorska, tj. miasta
w ktrym plany poszczeglnych dzielnic skadaj si z siatki rnej wielkoci prostoktw.
Przykadem rodzimej metropolii o takiej budowie jest d. Plac Wolnoci peni rol punktu
centralnego, a otaczajce go prostopade ulice Zachodnia, Pnocna, Wschodnia
i Poudniowa (dzi ul. Rewolucji 1905 oraz ul. Prchnika) wyznaczay podstawowy szablon
dla budowy nastpnych drg.

4.1 Plan drg


Pierwszym etapem generowania miasta jest
stworzenie siatki drg rozdzielajcej poszczeglne parcele. Do takiego zadania wygodne jest
uycie algorytmu BSP24. Danymi wejciowymi algorytmu s wymiary prostokta do podziau
(w tym wypadku bdzie to cakowita mapa
miasta) oraz maksymalna ilo moliwych iteracji. Wynikiem dziaania algorytmu korzystajcego z drzewa binarnego jest zbir prostoktw
zawierajcych si w prostokcie wejciowym
(ktre s reprezentantami uzyskanych parceli).
Algorytm dziaania binarnego
partycjonowania przestrzeni:
1. Do
drzewa
BSP
dodaj
prostokt
wejciowy - stanie si on korzeniem struktury
i obecnie aktywnym wzem. Ustaw zmienn
opisujc ilo dokonanych iteracji i=0.

Rysunek 16: Graficzna reprezentacja


kolejnych krokw rozwoju drzewa binarnego.

2. Jeeli i jest rwne podanej iloci iteracji, przejd do punktu 4. W przeciwnym


wypadku dla kadego bezpotomnego wza drzewa wykonaj punkt 3. i zwiksz warto
zmiennej i o jeden, a nastpnie powtrz obecny krok.
[24] B. Naylor: Constructing Good Partitioning Trees, Graphics Interface (annual Canadian CG conference)
May, 1993

22

3a. Ustal kierunek podziau prostokta na podstawie jego wymiarw. Jeeli bok A
jest duszy od boku B, czworokt dzielony bdzie lini pionow, w przeciwnym razie lini
poziom.
3b. Wylosuj miejsce przecicia prostokta w aktywnym wle, zachowujc odpowiedni
margines.
3c. Jeeli okrelony margines nie pozwala na przecicie czworokta, nie rb nic,
w przeciwnym razie dodaj dwa powstae prostokty do drzewa BSP jako wzy potomne
do aktywnego.
4. Utwrz tablic prostoktw skadajc si z wymiarw przechowywanych tylko
w liciach drzewa binarnego. Kade pole mapy znajdujce si na obwodzie dowolnego
z uzyskanych prostoktw potraktuj jako drog.

Rysunek 17: Przykady wygenerowanych siatek drg w miecie


przy wykorzystaniu szeciu iteracji algorytmu.

W powyszy sposb, poza globaln sieci drg, algorytm zwraca wsprzdne kadej
dziaki na ktrej nastpnie mona stworzy okrelony rodzaj zabudowy.
Wielkoci uzyskanych dziaek mona sterowa poprzez zmian iloci iteracji algorytmu
BSP. Dla miast generowanyh w grze, algorytm wykonuje cztery iteracje, co daje
wiarygodne rozmiary parceli na mapie o rozmiarze 60x60 pl.

4.2 Przygotowanie listy budynkw


Kade miasto posiada zestaw budynkw ktre obowizkowo musz si w nim znajdowa. Bazujc na konwencji przyjmowanej w grach typu cRPG, s to:

Tawerna
Tawerna jest miejscem w ktrym bohater moe naby od oberysty rne rodzaje
trunkw. Jest to rwnie miejsce gromadzce przyjezdnych z innych miast.

Kunia
W kuni bohater moe przede wszystkim wyposay si w or sucy do walki.
W kadym obiekcie tego typu znajduje si co najmniej jeden kowal, ktry
udostpnia towary na sprzeda.

Zbrojownia
Zbrojownia jest bliskim odpowiednikiem kuni. Jedyn rnic jest moliwo
nabycia zbroi i elementw ochronnych zamiast ora do walki.

23

Zielarnia
Chata zielarki to miejsce w ktrym bohater wyposay si w mikstury leczce
oraz poprawiajce statystyki.

witynia
W kadej wityni gracz moe otrzyma od kapana bogosawiestwa, ktre bd
zwiksza statystyki bohatera przez okrelony czas.

Rynek
Rynek jest gwnym miejscem spotka mieszkacw miasta. Mona na nim kupi
rne przedmioty niedostpne w konwencjonalnych sklepach. Plac umoliwia
rwnie dostp do studni, ktrymi schodzi si do miejskich katakumb.

Budynkiem opcjonalnym, zalenym od uzyskanej siatki drg, jest paac krlewski


oraz cmentarz. Dodatkowymi zabudowami mogcymi pojawi si w miecie s prywatne
domy mieszkalne.

4.3 Gospodarowanie przestrzeni


Kolejnym etapem generowania miasta jest dopasowywanie zabudowy z listy budynkw,
do dziaek uzyskanych w etapie tworzenia siatki drg. Kady budynek posiada wymagane
minimalne rozmiary parceli. Przykadowo; paac krlewski mona wybudowa na dziace
o rozmiarze minimum 27x17 pl, natomiast kuni ju na dziace 9x9 pl.
Rozwaane zagadnienie mona zakwalifikowa jako dyskretny problem plecakowy 25.
Budynki jednak nie posiadaj swojej wagi wanoci i obowizkowo musz znajdowa
si na mapie, co dyskwalifikuje popularne realizacje algorytmw rozwizujcych
ten problem.
Zabudowa jest umiejscawiana na losowych dziakach o odpowiednim rozmiarze. Jeeli
na mapie istnieje przynajmniej jedna parcela o wymiarach minimum 27x17 pl
(lub analogicznie 17x27) to umieszczany jest w niej paac krlewski. Nastpnie wedug
kolejnoci listy budynkw, s one tworzone na kolejnych losowych dziakach.
Jeli pozostay jakie niezagospodarowane parcele to stawiane s tam zwyke budynki
mieszkalne. Dziaki nie speniajce minimalnych wymaga rozmiarowych s wypeniane
losowymi drzewami.

4.4 Generowanie budynkw


Kada zabudowa posiada swj algorytm generowania. Niektre plany s wsplne
dla budynkw rnego rodzaju, natomiast rni si obiektami umieszczanymi wewntrz.
Elementem wykorzystywanym w wikszoci planw generowania zabudowy jest algorytm
dzielcy j na mniejsze czci. Ponownie uywane jest tutaj drzewo binarne, dla ktrego
prostoktem wejciowym jest dany budynek, a zbir wyjciowy to jego pokoje.

[25] Thomas H Cormen, Charles E Leiserson, Ronald L Rivest: Wprowadzenie do algorytmw. Warszawa:
Wydawnictwa Naukowo-Techniczne, 2003. ISBN 83-204-2800-9.

24

Paac krlewski
Minimalny rozmiar dziaki: 27x17 pl
Paac
budowany
jest
w ksztacie obrconej litery C.
Gwnym pomieszczeniem jest
komnata krlewska w ktrej
znajduje si midzy innymi
tron. Hol czy ze sob dwa
skrzyda paacu podzielone losowo na pokoje.

Rysunek 18: Paac krlewski.

witynia
Minimalny rozmiar dziaki: 12x12 pl
Kada witynia oparta jest
na tym samym schemacie;
droga do niej prowadzca poczona jest z przedsionkiem,
a ten z naw gwn. Wewntrz znajduje si otarz,
a ciany bdce za nim ukadaj si w ksztat trjkta.
W zalenoci
od rozmiaru
dziaki ustalana jest ilo
awek wypeniajca gwn
komnat.

Rysunek 19: witynia.

Tawerna
Minimalny rozmiar dziaki: 13x15 pl
Z drog poczony jest wszy
hol recepcyjny bdcy przedsionkiem do pokojw gocinnych oraz kuchni, powstaych
przez podzielenie jednego
szerokiego budynku.

Rysunek 20: Tawerna.

25

Sklep
Minimalny rozmiar dziaki: 9x9 pl
Z przedstawionego algorytmu
korzysta
zarwno
kunia,
zbrojownia jak i zielarnia. Tworzony jest prostoktny budynek o wymiarach dziaki,
w dalszej kolejnoci zostaje
on podzielony
algorytmem
drzewa binarnego na mniejsze
pokoje. Zaraz obok wejcia
do budynkw tego typu, dodawana jest tabliczka z symbolem prowadzonej dziaalnoci.

Rysunek 21: Sklep.

Rynek
Minimalny rozmiar dziaki: 5x5 pl
Plac gwny nie jest w rozumieniu stricte budynkiem, lecz
zbiorem poustawianych losowo
kramw
kupieckich
i studni publicznego uytku.
Na kadym rogu dziaki rynkowej stoi posg tarczy
i miecza zwikszajcy estetyk okolicy.

Rysunek 22: Rynek.

Cmentarz
Minimalny rozmiar dziaki: 5x5 pl
Miejsce pochwku mieszczan
skada si z nagrobkw
ustawionych w odlegociach
dwch pl na planie siatki.
Cmentarz dodatkowo otoczony
jest potem.

Rysunek 23: Cmentarz

26

Dom mieszkalny
Minimalny rozmiar dziaki: 9x9 pl
Zastosowano tutaj algorytm generowania sklepu, jednak bez umieszczania tablicy
przy wejciu.

4.5 Aranacje pokojw


Kady pokj wygenerowany w budynku ma swj typ. Od typu pokoju zale znajdujce
si w nim obiekty, a te z kolei podzielone s na trzy rodzaje. Moliwe rodzaje aranacji
pokojw pokazuje tabela.
Rodzaj pokoju

Obiekt zajmujcy
dwa pola

Obiekt znajdujcy
si przy cianie

Obiekt stojcy
na rodku

Sypialnia

ko

Garderoba

St

Kuchnia

Kuchenka

Beczka

St

Salon

Rega

Garderoba

St

Magazyn

Skrzynia

Skrzynka

Beczka

Kunia

Piec

Kowado

Wiadro

Zielarnia

Suszarka zi

Kocio

brak

Tabela 5: Rodzaje obiektw znajdujcych si w okrelonych pokojach.

Obiekt zajmujcy dwa pola znajduje si zawsze w rogu pokoju.


W kadym pomieszczeniu obowizkowo wystpuje jeden obiekt podwjny. W zalenoci
od wymiarw danego pokoju moe by generowana ich wiksza ilo.
Ilo obiektw stojcych przy cianie jest wprost proporcjonalna do powierzchni
pomieszczenia. Przedmioty umieszczane s tylko w takich miejscach, ktre gwarantuj
przepustowo, tj. nie zastawiaj przejcia do innego pokoju.
Jeeli na rodku pomieszczenia pozostao wystarczajco duo miejsca, mona tam
umieci dodatkowy obiekt. Jeli bdzie to st, dookoa niego pojawi si losowo
rozstawione krzesa.
W zalenoci od generatora budynkw poszczeglne pokoje maj przypisywane swoje
typy. Jeeli generowany jest dom mieszkalny to pierwszestwo typu pokoju ma sypialnia,
nastpnie kuchnia i salon. Odpowiednio podczas generowania zbrojowni, pierwszestwo
naley do pokojw typu kuni, nastpnie magazynu czy kuchni.

27

5. Labirynt
Mimo i struktury labiryntowe w naturze objawiaj si gwnie w korytarzach
wytworzonych przez mrwki czy korniki, s one powszechnie wykorzystywane
w zagadnieniu generacji map dla gier. Wszelkiego rodzaju podziemia, katakumby,
a gwnie lochy w produkcjach typu roguelike (nakierowanych na eksploracj cigw pokoi
i korytarzy) korzystaj z rnorakich algorytmw generowania labiryntw.

5.1 Zastosowanie algorytmu


W miastach utworzonych w grze znajduj si place rynkowe. Na tych osigajcych
wiksze rozmiary, porozmieszczane s studnie ktrymi gracz moe przenie si
do podmiejskich katakumb. Aby wygenerowa znajdujcy si tam labirynt, uyty zosta
algorytm typu Hunt&Kill26, ktry gwarantuje optymalny stosunek czasu generowania
do jakoci otrzymanego wyniku.
Uzyskany labirynt bdzie labiryntem doskonaym. Oznacza to, e istnieje jedna i tylko jedna
droga czca dwa dowolne jego punkty. Co za tym idzie, struktur tak mona wyrazi
dowolnym grafem nie posiadajcym cykli, czyli drzewem rozpinajcym.

5.2 Hunt&Kill
Jak sama nazwa wskazuje, algorytm Hunt&Kill pracuje w dwch fazach. Faza polowania
"hunt" okrela pole od ktrego rozpocznie si nastpna faza - "kill". Aby opisa dziaanie
tej metody naley wpierw zapozna si z algorytmem bdzenia losowego.
Algorytm bdzenia losowego
Poniszy przepis jest czci algorytmu waciwego Hunt&Kill i odpowiada on fazie "kill".
Parametrem startowym procedury jest pole aktywne nalece do mapy labiryntu.
1. Jeeli pole aktywne nie posiada nieodwiedzonych ssiadw, koczymy dziaanie
algorytmu.

[26] Jamis Buck: "Algorithms" is Not a Four-Letter Word. New Orleans, LA: RubyConf 2011

28

2. Spord p ssiadujcych z polem aktywnym, wybieramy losowe, nieodwiedzone


pole.
3. Wybrane pole czynimy odwiedzonym i aktywnym, dodajemy krawd czc obecne
pole z poprzednim.
4. Wracamy do punktu 1.
Algorytm Hunt&Kill
1. Wybieramy losowe pole nalece do docelowej mapy labiryntu i czynimy
je aktywnym.
2. Dla aktywnego pola uruchamiamy algorytm bdzenia losowego.
3. Dokonujemy skanowania caej mapy labiryntu zaczynajc od lewego grnego rogu,
przeszukujc kolejne wiersze w celu odnalezienia dowolnego nieodwiedzonego pola
ssiadujcego z dowolnym polem odwiedzonym.
4. Jeeli taka para pl zostaa znaleziona, tworzymy krawd grafu czc je.
Pole nieodwiedzone czynimy odwiedzonym i aktywnym oraz przechodzimy do punktu 2.
5. W przeciwnym wypadku koczymy dziaanie algorytmu.

Wykorzystanie algorytmu Hunt&Kill dla generowania labiryntw


Zalety

Wady

Wzgldnie (w stosunku do innych algorytmw) krtki czas oblicze.

Algorytm ma tendencj do tworzenia


dugich, pojedynczych korytarzy.

Niska zoono obliczeniowa i pamiciowa.

W skrajnych przypadkach technika


bdzenia losowego moe by wysoce nieoptymalna.

Satysfakcjonujce
wyniki
dziaania
dla potrzeb gier komputerowych.
Tabela 6: Wady i zalety algorytmu Hunt&Kill.

5.3 Mapa owietlenia


Owietlenie bdce na mapie wiata lub miasta jest jednolite. W duym uproszczeniu,
wiato soneczne pada pionowo na ziemi zapewniajc rwnomierne owietlenie obiektw.
Nie mona powiedzie tego samego o katakumbach znajdujcych si pod miastem, gdzie
mrok rozpraszaj pochodnie wiszce na cianach. W celu prostej symulacji takiego
owietlenia wykonana zostaa mapa wietlna.
Mapa owietlenia jest mask nakadan na reprezentacj graficzn aktualnej mapy.
Warto maski okrelana jest dla kadego piksela liczb rzeczywist naleca
do przedziau <0,1>, w ktrym 0 odpowiada oryginalnemu kolorowi piksela mapy,

29

a 1 penej czerni. W przypadku podziemi miejskich maska pocztkowo posiada cakowite


zaciemnienie w wysokoci 0.5. Nastpnie, w miejscach w ktrych znajduj si pochodnie
okrelane s koowe obszary z mniejszymi wartociami zaciemnienia. Dla kadej pochodni
tworzone jest N k o rnym stopniu jasnoci i promieniu. Jasno danego koa jest
odwrotnie proporcjonalna do kwadratu jego promienia, co ma pokrycie z rzeczywistym
modelem owietlenia punktowego. Po uzyskaniu k o rnych parametrach nastpuje
naoenie ich na obraz poczynajc od tego o najwikszym promieniu. Pozwala
to na uzyskanie efektu gradientu bardzo niskim kosztem obliczeniowym.

Rysunek 24: Symulacja gradientu wiata pochodni dla rnych


iloci rysowanych k.

Dodatkowym efektem czysto kosmetycznym jest animacja blasku pochodni.


W rzeczywistoci pomie pulsuje, dajc rne stopnie natenia wiata w przecigu
czasu. Warto natenia wiata pochodni zmieniana jest wraz z upywem czasu zgodnie
z regu jednowymiarowych ruchw Browna.

30

6. Postacie
6.1 Statystyki postaci
We wszystkich wygenerowanych miastach znajduj si mieszkacy. Kady obywatel
ma swj indywidualny zestaw cech opisujcych zarwno jego wygld zewntrzny
jak i nastrj. Wraz z tworzeniem budynkw, na mapie umieszczane s punkty startowe
dla poszczeglnych postaci. Dla przykadu: w kadej wityni obok otarza swj punkt
startowy ma kapan.
W momencie generowania miast przechowywane s tylko rodzaje wykonywanych
zawodw, przypisanie cech indywidualnych nastpuje w nastpnej fazie jak jest tworzenie
postaci.

6.1.1 Zawody
Zawd

Punkty startowe

onierz

paac, rynek

Kowal broni

kunia, rynek

Kowal zbroi

zbrojownia, rynek

Oberysta

tawerna, rynek

Zielarka

zielarnia, rynek

Krl

paac

Kapan

witynia

Kupiec

rynek

Kucharz

kuchnia, rynek

Tragarz

magazyn, rynek

Bezrobotny

dowolne

Tabela 7: Punkty startowe postaci w zalenoci od zawodu.

W zalenoci od zawodu, do postaci dobierane s konkretne charakterystyki. Przegld


wszystkich moliwych cech znajduje si w nastpnej tabeli.

31

6.1.2 Cechy indywidualne


Cecha

Dostpne opcje

Pe

mczyzna
kobieta

Imi

(patrz: rozdzia 7.2 Imiona postaci)

Rasa

biaa
czarna
nordycka

Wiek

dziecko
mody
dorosy
sdziwy

Wysoko

liczba cakowita z przedziau 100-200

Waga

liczba cakowita z przedziau 40-120

Zawd

(patrz: rozdzia 6.1.1 Zawody)

Nastrj

spokojny
wesoy
smutny
zy
zaskoczony
rozbawiony

Fryzura

mczyzna

ysy
grzybek
krtkie
irokez

kobieta

krtkie
kitki
dugie
kok

Kolor wosw blond


brzowy
czarny
rudy
siwy
Tabela 8: Moliwe wartoci cech indywidualnych postaci.

6.1.3 Modyfikacje cech


W celu zwikszenia realizmu przy tworzeniu postaci w grze, naley kadej z nich
przypisa odpowiednie reguy generowania. Zoenie regu powstaych z rnych cech
zewntrznych, zapewnia moliwie wierne odwzorowanie realnie istniejcych powiza
(np. wystpowanie czarnoskrych osb na terenach z najcieplejszym klimatem).

32

W utworzonym projekcie edycje cech podzielone s na trzy grupy.


Modyfikacje ze wzgldu na:
biom na ktrym znajduje si miasto,
zawd wykonywany przez posta,
wiek postaci.
Ponisze tabele prezentuj kolejno transformacje konkretnych cech w zalenoci od innych
cech pocztkowych.
Biom

Rasa

Kolor wosw

Sawanna
Pustynia
Step

czarna

czarny
brzowy
siwy

Lasy rwnikowe
Lasy liciaste
Lasy twardolistne

biaa

bez modyfikacji

Tajga
Tundra
Pustynia lodowa

nordycka

blond
rudy
siwy

Tabela 9: Modyfikacje cech postaci ze wzgldu na biom macierzysty.

Zawd
onierz

Minimalny
wzrost

Maksymalny
wzrost

Maksymalna
waga

Pe

100

Kowal

80

Oberysta

100

Zielarka

180

Minimalna
waga

140

70

Krl
Kapan

150

Kucharz

90

80

80

100

Tragarz

M
Tabela 10: Modyfikacje cech postaci ze wzgldu na zawd.

Wiek
Dziecko

Zmiana cechy

Nowe wartoci

maksymalny wzrost

120

maksymalna waga

50

fryzura mska

grzybek
krtkie

kolor wosw

blond
brzowy
czarny
rudy

33

Sdziwy

maksymalny wzrost

140

minimalna waga

70

maksymalna waga

90

kolor wosw

siwy

fryzura mska

ysy
grzybek
krtkie

fryzura damska

dugie
kok

Tabela 11: Modyfikacje cech postaci ze wzgldu na wiek.

Dodatkowa regua zakada, e kade dziecko jest bezrobotne.


Powysze zbiory regu cz si poprzez sum, natomiast kada cecha powtarzajca si
w rnych zbiorach jest dodawana poprzez iloczyn mnogociowy.
Przykad:
Jeeli przyjmiemy, e do zbioru A nale reguy powstae przez obecny biom
(np. sawann);
A = {
rasa:
kolor_wosw:

[czarna]
[brzowy, czarny, siwy]

}
natomiast do zbioru B przyjmiemy cechy wieku (np. dziecka);
B = {
maksymalny_wzrost:
maksymalna_waga:
fryzura_mska:
kolor_wosw:

[120]
[50]
[grzybek, krtkie]
[blond, brzowy, czarny, rudy]

}
to wynikowym zbiorem modyfikacji regu, ktre naley zaaplikowa do generatora bdzie:
A + B = {
rasa:
maksymalny_wzrost:
maksymalna_waga:
fryzura_mska:
kolor_wosw:
}

[czarna]
[120]
[50]
[grzybek, krtkie]
[brzowy, czarny]

34

6.2 Animacja szkieletowa


Aby wprowadzi postacie w ruch, niezbdne byo zastosowanie systemu animacyjnego.
Najbardziej odpowiedni technik, ktra jednoczenie wsppracuje z proceduralnoci jest
model szkieletowy postaci.
Animacja szkieletowa skada si z zestawu dwuwymiarowych grafik reprezentujcych
koczyny oraz poczonych z odpowiedni struktur koci. Poruszenie koci powoduje
transformacj skojarzonej z ni bitmapy.
Animacja szkieletowa
Zalety

Wady

Bardzo niskie zuycie pamici komputera. Kada posta posiada swj model
szkieletu, a jej akcje zapisane s jako
kolejne transformacje poszczeglnych
koci.

Wzmoony
czas
obliczeniowy.
W kadej klatce animacji wyznaczana
musi by transformacji koci, ktra nastpnie jest przekadana na transformacj poczonej bitmapy.

Dowolno
interakcji
z otoczeniem.
Szkielet moe reagowa na bodce zewntrzne i w ten sposb zmienia swoj
struktur.

Widoczno cze midzy komi.


Postacie animowane szkieletowo mog
wyglda jak poskadane z wielu drobnych obiektw.

Moliwo uycia jednej zdefiniowanej


animacji dla wielu rnych obiektw
o tej samej strukturze.
Tabela 12: Wady i zalety animacji szkieletowej.

6.2.1 Budowa modelu szkieletowego


Na model animacji szkieletowej skadaj si:
1. Skra, czyli zestaw dwuwymiarowych bitmap odpowiadajcych reprezentacji
graficznej poszczeglnych koczyn postaci.
2. Szkielet zbudowany z hierarchii
koci,
staww.
Nastpujce reguy okrelaj podstawowe zaoenia tego typu animacji.
Skra poczona jest ze szkieletem.
Kada bitmapa przypisana jest do jednej z koci.
Kada ko poczona jest z dwoma stawami.
Kady staw jest poczony z przynajmniej jedn koci.
Hierarchi koci mona opisa w strukturze drzewa.

35

Rysunek 25: Przykad podstawowego modelu szkieletowego czowieka.

Dla kadej postaci wygenerowano indywidualny szkielet na podstawie wzorca


przedstawionego powyej. Rnice midzy szkieletami dotycz dugoci koci,
uzalenionych od wygenerowanej wysokoci postaci, oraz przechowywanych wartoci
szerokoci dla kadej koczyny.
Grafiki poczone ze szkieletem generowane s na podstawie cech postaci. Oto kilka
przykadw uzyskanych po etapie skrowania.

Rysunek 26: Zestaw losowo wygenerowanych postaci.

6.2.2 Animacja
Do uzyskania pynnej animacji niezbdne jest zdefiniowanie poszczeglnych klatek
kluczowych szkieletu, a nastpnie implementacja algorytmu interpolujcego te stany.
Metod zastosowan w czeniu ruchw midzy komi jest kinematyka prosta 27. Zakada
ona, e pozycja poszczeglnych czci modelu w danym czasie jest liczona wedug
pozycji i orientacji samego modelu, uwzgldniajc wszelkie stawy znajdujce si
po drodze. Przykadowo, jeeli obrcone zostanie rami postaci, to wraz z nim poruszy
si tak samo przedrami, nadgarstek jak i palce, tak by zachowa swoj wzgldn
orientacj w stosunku do ramienia.
Przeciwiestwem kinematyki prostej jest kinematyka odwrotna, gdzie pozycja modelu jest
obliczana na podstawie transformacji poszczeglnych jego czci. W przypadku
kinematyki
odwrotnej
to
poruszenie
doni
spowoduje
ruch
nadgarstka
oraz przedramienia.

[27] J. M. McCarthy: Introduction to Theoretical Kinematics. MIT Press, Cambridge, MA, 1990

36

Rysunek 27: Cykl animacyjny dla poruszania si w prawo.

Klatka kluczowa skada si z tablicy zawierajcej kt obrotu oraz dugo kadej z koci.
Do wykonania animacji poruszania si postaci w prawo wystarczy uy omiu zaptlonych
klatek.
Kolejnym etapem tworzenia animacji jest interpolacja klatek kluczowych. Gdyby akcja
odgrywana bya tylko poprzez czasowe przechodzenie z jednego stanu do nastpnego,
animacja nie byaby pynna. Interpolacja pozwala na obliczenie stanu szkieletu pomidzy
klatkami kluczowymi pobierajc z nich wartoci ktw obrotu koci oraz ich dugoci.
Na potrzeby projektu w zupenoci wystarcza interpolacja liniowa. Stan obecnych
parametrw koci mona wyrazi wzorem:

y= y 0+(x x 0)

y 1 y 0
x 1 x 0

gdzie
x0 - czas wystpienia pierwszej klatki kluczowej
x1 - czas wystpienia drugiej klatki kluczowej
y0 - warto parametru pierwszej klatki kluczowej
y1 - warto parametru drugiej klatki kluczowej
x - obecny czas
y - warto parametru w obecnej chwili

Rysunek 28: Wykres przykadowej


interpolacji liniowej.

Parametrem w tym przypadku moe by kt obrotu koci bd jej dugo.


Interpolacja odgrywa znaczc rol w czynieniu animacji bardziej wiarygodn. Posiadajc
mechanizm kalkulujcy transformacje szkieletu midzy dwiema dowolnymi klatkami
kluczowymi, moliwe jest pynne przechodzenie rnych cykli animacji (np. z chodzenia
do biegu) bez stosowania dodatkowych stanw.
Manipulacja czasem wystpienia kolejnych klatek pozwala na dowolne zwalnianie
lub przypieszanie animacji szkieletu bez adnych strat jakociowych. Jedynym
ograniczeniem jest tylko dokadno liczb zmiennoprzecinkowych opisujcych kt obrotu
koci oraz jej dugo.

37

7. Nazwy
7.1 Technika generowania
Kada istniejca w grze posta lub lokacja posiada swoj nazw. W celu
ich wygenerowania zastosowano algorytm posugujcy si wasnociami cigu Markowa.
Sposb ten oparty jest w caoci na zbiorze danych wejciowych i pozwala uzyska wyniki
bdce danymi we wstpnie okrelonym stopniu podobnymi do tych wchodzcych.

7.1.1 acuch Markowa


Procesem Markowa28 nazwa mona kady cig zdarze w ktrym prawdopodobiestwo
wystpienia kolejnego zdarzenia zaley tylko i wycznie od n zdarze bezporednio
je poprzedzajcych.
W odniesieniu do generowania wyrazw, korzystajc z okrelonego sownika, wasno
Markowa pozwala uzyska sowa brzmice bardzo podobnie do podanych. Taka metoda
ma rwnie swoje minusy, jak np. due zapotrzebowanie pamiciowe.
Wykorzystanie wasnoci Markowa dla generowania imion
Zalety

Wady

Pena zaleno od danych wejciowych. Rne zbiory wejciowe gwarantuj rne wyniki.

Pena zaleno od danych wejciowych. S one niezbdne do dziaania


algorytmu.

Produkty dziaania algorytmu s wiarygodne, a uzyskane wyrazy brzmi


bardzo podobnie do wejciowych.

Dla zbyt maych zbiorw wejciowych


uzyskane wyniki bd czsto identyczne jak wprowadzone sowa.

Bardzo niska zoono obliczeniowa


oraz czas wykonywania.

Wysokie zuycie pamici. Przetworzone


dane wejciowe musz permanentnie
znajdowa si w pamici operacyjnej.

Tabela 13: Wady i zalety acucha Markowa.

[28] Maria Podgrska i in.: acuchy Markowa w teorii i zastosowaniach. Warszawa: Szkoa Gwna
Handlowa, Oficyna Wydawnicza, 2002.

38

Algorytm dziaania acucha Markowa dla generowania sw:


1. Okrel ilo liter bdcych baz do wybierania kolejnych znakw i zapisz j do zmiennej n.
2. Pobierz kolejny wyraz ze zbioru wejciowego oraz zapisz go jako wyraz aktywny.
3. Dla kadych n kolejno wystpujcych liter w wyrazie aktywnym dokonaj nowego
przypisania w tablicy asocjacyjnej:
[podcig wyrazu aktywnego o dugoci n liter] => [znak wystpujcy
zaraz za tym cigiem]
4. Jeeli aktywny wyraz nie jest ostatnim wyrazem zbioru wejciowego, wr do punktu 2.
5. Dokonaj losowego wyboru podcigu znajdujcego si w tablicy asocjacyjnej oraz zapisz
go jako aktywny podcig.
6. Z tablicy asocjacyjnej losowo wybierz znak nalecy do zbioru skojarzonego z aktywnym
podcigiem i przycz ten znak do jego koca, a nastpnie usu pierwsz liter podcigu.
7. Jeeli wybrany znak jest kocem wyrazu (np. \0 w jzyku C++) albo wyraz osign
podan maksymaln dugo - przerwij dziaanie algorytmu. W przeciwnym wypadku wr
do punktu 6.
Przykad:
Dany jest zbir wejciowy:
banan, jabko, kabanos
Uzyskane dane dla konkretnych wartoci bazy liter:
n = 1
banan
[b]
[a]
[n]
[a]
[n]

=>
=>
=>
=>
=>

jabko
[a]
[n]
[a]
[n]
[\0]

[j]
[a]
[b]
[]
[k]
[o]

=>
=>
=>
=>
=>
=>

Przykadowe rezultaty

[a]
[b]
[]
[k]
[o]
[\0]

kabanos

wynikowa tablica

[k]
[a]
[b]
[a]
[n]
[o]
[s]

[b]
[a]
[n]
[j]
[]
[o]
[k]
[s]

=>
=>
=>
=>
=>
=>
=>

[a]
[b]
[a]
[n]
[o]
[s]
[\0]

=>
=>
=>
=>
=>
=>
=>
=>

[a, , a]
[n, n, b, b, n]
[a, \0, o]
[a]
[k]
[\0, s]
[o, a]
[\0]

nano
babananos
k
abkos

Tabela 14: Efekty dziaania acucha Markowa dla n=1.

39

n = 2
banan
[ba]
[an]
[na]
[an]

jabko
=>
=>
=>
=>

[n]
[a]
[n]
[\0]

[ja]
[ab]
[b]
[k]
[ko]

=>
=>
=>
=>
=>

kabanos
[b]
[]
[k]
[o]
[\0]

Przykadowe rezultaty:

[ka]
[ab]
[ba]
[an]
[no]
[os]

=>
=>
=>
=>
=>
=>

wynikowa tablica
[b]
[a]
[n]
[o]
[s]
[\0]

[ba]
[an]
[na]
[ja]
[ab]
[b]
[k]
[ko]
[ka]
[no]
[os]

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

[n, n]
[a, \0, o]
[n]
[b]
[, a]
[k]
[o]
[\0]
[b]
[s]
[\0]

bananos
ko
jabanan
nananos

Tabela 15: Efekty dziaania acucha Markowa dla n=2.

n = 3
banan

jabko

kabanos

[ban] => [a] [jab] => []


[ana] => [n] [ab] => [k]
[nan] => [\0] [bk] => [o]
[ko] => [\0]

[kab]
[aba]
[ban]
[ano]
[nos]

Przykadowe rezultaty:

banan
ko
abanos
jabko

=>
=>
=>
=>
=>

wynikowa tablica
[a]
[n]
[o]
[s]
[\0]

[ban]
[ana]
[nan]
[jab]
[ab]
[bk]
[ko]
[kab]
[aba]
[ano]
[nos]

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

[a, o]
[n]
[\0]
[]
[k]
[o]
[\0]
[a]
[n]
[s]
[\0]

Tabela 16: Efekty dziaania acucha Markowa dla n=3.

Analizujc powysze przykady mona wycign pewne wnioski:


czym wiksza warto zmiennej n, tym wikszy stopie
podobiestwa
wygenerowanego wyrazu w stosunku do zbioru wejciowego,
dla maych wartoci n otrzymujemy wyrazy przypominajce konkatenacje losowych
liter.
Dwoma parametrami sterujcymi algorytmem s ilo liter bdcych baz do losowania
kolejnych oraz maksymalna dugo otrzymanego sowa. Dodatkowo, aby nie otrzymywa

40

wyrazw zbyt krtkich, mona ograniczy zbir startowych podcigw tylko do tych, ktre
znajduj si na pocztkach wyrazw (w podanym przykadzie dla n=3 otrzymane wyrazy
mogyby zaczyna si tylko od ban, jab lub kab).

7.2 Imiona postaci


Dla kadej z trzech obecnych w grze ras wykorzystano inne dane sownikowe.
Dodatkowo bazy danych wejciowych zostay podzielone na mskie i eskie,
co w oglnoci daje 6 rnych sownikw. Przyjtymi parametrami dla algorytmu
generujcego s 2 - jako ilo bazowych liter sucych do losowania kolejnych
oraz 7 - bdca maksymaln dugoci uzyskanego wyrazu.

7.2.1 Imiona nordyckie


Baz do utworzenia zbioru imion nordyckich byy imiona mitologicznych bogw
skandynawskich. Popularne nazwy jak Thor czy Gunnar dodatkowo zostay poczone
z klasycznymi imionami nadawanymi wikingom. Przykadowe wykorzystane sowa to:
Alf, Bjorn, Bodvar, Einar, Fridgeir, Glum, Grim, Hakon, Harald,
Knut, Mord, Olaf, Sigurd, Stein, Thord, Thorstein, Valgard
Inaczej sprawa wyglda w przypadku imion eskich. Oryginalne skandynawskie sowa
okrelajce kobiety brzmi bardzo msko i trudno je od takowych rozrni. Sposobem
na wybranie bardziej kobiecych imion z jednoczesnym zachowaniem klimatu mronej
pnocy jest zastosowanie sownika bdcego zbiorem najpopularniejszych i teraniejszych
imion norweskich kobiet, jak np.:
Thea, Nora, Victoria, Vilde, Frida, Mia, Sunniva, Hanna, Eline,
Andrine, Tuva, Pernille, Ingeborg, Linn, Malene, Rikke

7.2.2 Imiona europejskie


O ile dla przecitnego europejczyka imiona skandynawskie bd brzmiay podobnie,
to trudno ujednolici sowa europejskie. Istniej bowiem znaczce rnice midzy
wyrazami dla przykadu niemieckimi, francuskimi, a hiszpaskimi. Aby wybra neutralny
i wiarygodny zbir danych posuono si imionami bohaterw literatury fantastycznej.
Przykadowe imiona mskie i eskie:
Agnar, Bewul, Cardon, Darkkon. Enidin, Folmard, Gryn, Hezak,
Ilgenar, Jex, Kirder, Lackus, Mythik, Nydale, Ospar, Pildoor
Adorra, Brana, Celoa, Fayne, Helenia, Kassina, Lyna,
Orwyne, Qara, Rivatha, Sennetta, Tressa, Vessere, Zoura

Mirayam,

41

7.2.3 Imiona afrykaskie


Dla czarnoskrych postaci w grze zdecydowano si na dobr imion o brzmieniu
afrykaskim. S w to gwnej mierze najbardziej popularne imiona nadawane obecnie
obywatelom pastw takich jak Kongo, Czad lub Nigeria.
Przykady imion kolejno mskich i eskich:
Abebi, Aziza, Chipo, Falala, Iman, Jendayi, Kafi, Lateefah, Maizah,
Malika, Nakeisha, Ramla, Safara, Shasa, Waseme, Zalika
Abimbola, Babajide, Chidi, Chima, Emeka, Faraji, Isingoma, Kojo,
Masamba, Nkosana, Nnamdi, Paki, Simba, Wekesa, Zuberi

7.3 Nazwy miast


Nazwy miast s o wiele bardziej skomplikowane ni imiona. W oglnoci mona
podzieli je na:
zwizane z pooeniem geograficznym (np. South Lake City),
zwizane z konkretnymi osobami (np. Washington).
Generowanie nazw wieloczonowych, w ktrych poszczeglne ich czci s istniejcymi
przymiotnikami, nie jest zgodne z ide tworzenia wyrazw poprzez cig Markowa.
Dla celw projektu nazwy miast ograniczone s do jednego, maksymalnie
dziesicioliterowego wyrazu.
Do bazy sownikowej zostay wybrane pomniejsze miejscowoci Wielkiej Brytanii.
Posiadaj one szlachetnie brzmice pre- i postfiksy, ktre nadaj charakterystycznego
patosu brzmieniu nazw wygenerowanych. Przykadami danych wejciowych s:
Sheffield, Bradford, Newham, Derby, Norwich, Poole, Gloucester
Kilka wynikowych nazw miejscowoci:
Brawle, Shestmidge, Southon, Watfortham, Yorough, Exet

7.4 Tytu gry


Ze wzgldu na specyfik tytuw samych w sobie, wykorzystanie cigu Markowa
dla generowania nazwy gry nie jest najlepszym rozwizaniem. Powstae w ten sposb
tytuy nie brzmiayby wiarygodnie, a baza przykadowych nazw gier musiaaby
by nieoptymalnie dua. Wybrane rozwizanie dla generowania tytuu to odpowiednie
czenie ze sob zdefiniowanych wczeniej sw (danymi w zbiorach wejciowych
s odpowiednio posortowane wyrazy nalece do tytuw realnie istniejcych gier cRPG),
tak, by rezultat wyglda podobnie do:
<sowo1> of <sowo2>: <sowo3> <sowo4>

42

Uyte zbiory wejciowe:


Przymiotniki (np. Final, Sacred, Broken) - A1
Rzeczowniki wraz z liczb mnog oraz biernikiem (ang. possesive)
(np. Dragon | Dragons | Dragon's, Hero | Heroes | Hero's) - A2
Rzeczowniki w dopeniaczu (z przedrostkiem "of") (np. of Fate, of Heaven, of War)
- B1
Rzeczowniki podrzdne (pojawiajce si najczciej jako drugie sowo w tytule)
wraz z liczb mnog (np. Quest | Quests, Fantasy | Fantasies) - B2
Algorytm, kierujc si zbiorem regu, dopasowuje wylosowane z konkretnych grup wyrazy
w celu uzyskania maksymalnie wiarygodnego tytuu. Ponisza lista przedstawia niektre
z regu:
Jeli pierwszym sowem jest wyraz z grupy B2, preferuj po nim wyraz z grupy B1.
Nie stosuj biernika w drugiej czci tytuu, jeeli wystpowaa ona w pierwszej.
Jeli pierwsze sowo jest w liczbie mnogiej, nastpne moe nalee tylko do grupy
B1.
Nie stosuj liczby mnogiej, jeli pierwsze sowo jest biernikiem (np. zabezpieczaj
przed konstrukcjami typu "Hero's Days")
Odrzu nieelegancko wygldajce kombinacje;
jeli wystpuj obok siebie dwa sowa, ktrych mianownik liczby pojedynczej
jest ten sam,
jeli pierwsza litera drugiego sowa jest taka sama jak ostatnia pierwszego,
oraz ta litera nie jest samogosk.
Stosuj szans na dodanie przedimka The lub A/An.
Stosuj szans na dodanie rzymskiego numerau do tytuu.
Wygenerowane przykadowe tytuy:
Dragon's Dusk: The Hero Blade
The Sanctums of Life VI: Dark Hero
Spells of Avalon: Ogre's Spell
Valkyrie Swords: Dragon Paths
Nightmare Devil IV: A Dragon's Quest
Sonatas of War: Ages of Arcadia

43

8. Efekty specjalne i czcionka


8.1 Zastosowanie w praktyce
Obiekty wystpujce w grze oraz posiadajce stay ksztat, atwo reprezentowa poprzez
rysowanie prostych obiektw skadajcych si z podstawowych bry geometrycznych.
Ciecze bdce we wzgldnym spoczynku (np. reprezentacja rzeki pyncej przez
kontynent) mona odzwierciedli paszczyzn odpowiadajc tafli wody. Dynamiczne
generowanie staje si bardziej skomplikowane jeeli pojawia si potrzeba odwzorowania
dymu, ognia, lub chociaby deszczu. Powszechnie stosowan metod uzyskiwania takich
efektw s systemy czsteczkowe29.
Czcionka jest jednym z najrzadziej generowanych proceduralnie elementw w grach.
Nawet najstarsze gry, opierajce si wycznie na znakach wywietlanych w konsoli
polece, korzystay z czcionek systemowych. Zaoenie projektu o tym, e wszystkie
elementy generowane s proceduralnie wymaga jednak algorytmicznego utworzenia
fontw.

8.2 Pomie
Opisane w rozdziale 5. labirynty tworzone pod miastem, owietlone s pomieniami
pochodni umieszczonymi na cianach. Aby najlepiej odzwierciedli taki rodzaj ognia, naley
przyj kilka zaoe:

rdem pomienia jest jeden punkt (szczyt pochodni),


ogie wdruje od swojego rda w gr, lecz dopuszczalny stopie odchylenia
od osi pionowej to okoo 45,

rdowy kolor pomienia to czerwony, nastpnie przechodzi on w ty,


a do penego zaniknicia.

Stosujc te reguy w odniesieniu do systemu czsteczkowego, tworzymy struktur ktra


w punkcie rdowym generuje czsteczki. Nastpnie wyrzuca je z pewn startow
prdkoci w kierunku grnym z moliwoci odchylenia o kt nalecy do przedziau
<-45,45>. Kolor czsteczki zmienia si wraz z upywem czasu, od czerwonego
do tego, rwnoczenie zwikszajc swoj przeroczysto. Pojedyncze punkty
[29] William T. Reeves: Particle Systems - A Technique for Modeling a Class of Fuzzy Objects. Computer
Graphics 17:3 pp. 359-376, 1983 (SIGGRAPH 83)

44

reprezentowane s na ekranie poprzez koa o kolorze oraz pozycji zalenych


od waciwoci czsteczki. Znaczcym parametrem jest rwnie czas ycia elementu,
rnicuje on m.in. wysoko pomienia.

8.3 Zjawiska pogodowe


W odrnieniu do pomienia pochodzcego ze rda punktowego, opad atmosferyczny
zazwyczaj posiada rwnomierny rozkad na danym obszarze. Zastosowanie systemu
czsteczkowego jest dobrym wyjciem rwnie w tym przypadku, gdy pozwala
na swobodne przypisanie pojedynczych kropli lub patkw do generowanych czsteczek.
Zaoenia:
opad jest wzgldnie rwnomierny na caym obszarze,
krople i patki przemieszczaj si w kierunku dolnym z moliwym odchyleniem
o 45, musi by ono jednakowe dla wszystkich czstek w danej jednostce czasu,

reprezentacj kropli deszczu jest przezroczysta linia, lecz w momencie zetknicia


z ziemi przedstawiona jest jako okrg symbolizujcy rozprysk,
reprezentacj patku niegu jest biay okrg zmniejszajcy swj promie
wraz z upywem czasu,
opad nie moe by obecny wewntrz budynkw.

Rodzaj i czstotliwo wystpowania opadu uzalenione s od biomu w ktrym znajduje


si miasto. Jedynym miejscem gdzie pojawiaj si opady niegu jest pustynia lodowa,
prawdopodobiestwo opadw deszczu przedstawione jest w poniszej tabeli.
Biom

Prawdopodobiestwo
opadu deszczu

Sawanna

50,00%

Las tropikalny

80,00%

Tajga

20,00%

Pustynia

0,00%

Las liciasty

50,00%

Tundra

20,00%

Step

20,00%

Las twardolistny

50,00%

Pustynia polarna

0,00%

Tabela 17: Prawdopodobiestwo opadu deszczu w miecie w zalenoci od biomu.

8.4 Czcionka
Napisy s nieodcznym elementem kadej gry cRPG. Dziki nim moliwa jest intuicyjna
nawigacja po menu gry, dialogi z napotkanymi postaciami, opisy zachodzcych zdarze
fabularnych czy chociaby wywietlanie imion i nazw przedmiotw. Gra skadajca
si z elementw wycznie generowanych musi zapewnia rwnie tworzenie swojej
czcionki.

45

Kroje oglnie dostpnych fontw s wysoce zrnicowane, cz z nich sprzyja metodzie


generowania algorytmicznego, s to gwnie czcionki typu courier w ktrych kady znak
posiada tak sama szeroko. Zdecydowanie prociej jest rwnie generowa kroje
skadajce si tylko z linii prostych, tak zwane fonty typu square.
Kady znak generowanej czcionki da si utworzy poprzez ustalenie pocze miedzy
punktami tworzcymi kratownic o wymiarach 3x3.

Rysunek 29: Szablon dla rysowania znaku.

Rysunek 30: Wygenerowana proceduralnie


czcionka.

8.4.1 Parametryzacja
Generowana czcionka pozwala na pen modyfikacj jej parametrw. Dziki temu
moliwe jest ustalanie wzorcw odpowiednich dla rnych zastosowa. Na zestaw cech
opisujcych konkretny wzorzec skada si:

wysoko znaku,
szeroko znaku,
kolor,
grubo linii,
kolor obramowania znaku,
grubo obramowania.

Rysunek 31: Przykad uzyskanych fontw.

46

9. Zagadnienia fabularne
9.1 Przedmioty
Kada gra cRPG dysponuje szerokim wachlarzem przedmiotw spotykanych w grze.
Gwnie s to bronie wykorzystywane przez bohatera do walki z przeciwnikami, mikstury
modyfikujce statystyki oraz przedmioty fabularne.
W opisywanym projekcie najwikszy nacisk pooono na przygodowy aspekt gry, oznacza
to, e ma umoliwia ona graczowi swobodn eksploracj wygenerowanego wiata. Wie
si to z du gam dostpnych przedmiotw, niekoniecznie uytecznych, lecz bdcych
odbiciem wiata realnego.

9.1.1 Inwentarz
Kady przedmiot wystpujcy w grze zalicza si do jednej z moliwych kategorii, takich jak:

Ubrania
Odzienie znajdujce si w ekwipunku postaci wpywa na jej reprezentacj
graficzn. Gra oferuje moliwo przebierania sterowanej postaci w celu
wywoania konkretnych zachowa u postaci niezalenych.
Przykad:
Sposb nabycia:

Bro
W grze wystpuje kilka rodzajw broni. Nie su one graczowi do walki
lecz znajduj inne zastosowanie.
Przykad:
Sposb nabycia:

Przebranie si za kapana zwiksza zaufanie rozmwcy.


Kupcy lub otwarte szafy w domach.

Uycie buzdyganu powoduje zniszczenie kdki


uniemoliwiajcej dostp do zamknitego kufra.
Kowal broni i skrzynie.

Jedzenie
Poywienie zaspokaja rosncy wraz z upywem czasu gd bohatera.

47

Przykad:
Sposb nabycia:

Picie
Napoje alkoholowe zwikszaj poziom nietrzewoci bohatera, co skutkuje
efektem rozmycia ekranu. Alkohol wykorzystywany jest w grze do pozyskiwania
informacji.
Przykad:

Sposb nabycia:

Sposb nabycia:

Sprzedanie znalezionej bransolety kupcowi daje nam zoto,


a ofiarowanie jej wybranej kobiecie pozyskuje jej wzgldy.
Kupcy i kufry skarbw.

Przedmioty fabularne
Posiadanie rzeczy specjalnych, bdcych unikatowymi w grze, jest warunkiem
koniecznym do ukoczenia powierzonych graczowi zada.
Przykad:
Sposb nabycia:

Wypicie kilku kufli piwa razem z oberyst skutkuje


zdradzeniem przez niego informacji o ukrytym przejciu
do piwniczki.
Oberyci.

Biuteria
Ozdoby s dobrem oglnym i nie maj adnych waciwoci poza wartoci
pienin oraz moliwoci wrczania jej jako prezent.
Przykad:

Zjedzenie sernika obniy poziom godu o 2 punkty


w dobowej skali 24. punktowej.
Kupcy, kucharze, beczki oraz drzewa.

"Napotkany sdziwy pan zagubi swoj fajk."


Zobowizaniem gracza jest jej odnalezienie.
W peni zalene od aktualnego zadania.

Pozostae
Przedmioty codziennego uytku nie maj adnego konkretnego zastosowania
w rozgrywce, mog jednak suy jako rodki do osignicia dalszych celw.
Przykad:
Sposb nabycia:

Posiadanie pustej butelki w ekwipunku umoliwia zebranie


magicznej rosy, bdcej przedmiotem fabularnym.
Kupcy oraz szafki.

9.1.2 Interakcja z przedmiotami


Kada posta wystpujca w grze ma swj wasny, wygenerowany inwentarz. Podczas
rozgrywki, gracz ma moliwo wpywania na swj ekwipunek poprzez menu wywoywane
wciniciem klawisza inwentarza. Akcje moliwe do wykonania na przedmiotach to:

Wyrzucenie
Powoduje trwae usunicie przedmiotu z ekwipunku. Po wybraniu tej opcji gracz
nie jest w stanie przywrci wyrzuconego przedmiotu.

48

Zaoenie ubrania
Bez wzgldu na pe i zawd, gracz moe zakada dowolne ubrania.
Nie ma ograniczenia co do iloci noszonego na sobie odzienia.

Zdjcie ubrania
Kade noszone przez bohatera ubranie moe by w dowolnym momencie zdjte,
a on sam by rozebranym do naga.

Kupno
Postacie posiadajce moliwo sprzeday przedmiotw maj dodatkowy
ekwipunek bdcy ich zapleczem. Kady przedmiot posiada swoj okrelon
warto w wewntrznej walucie gry - zocie.

Sprzeda
Handlarze znajdujcy si na rynku oferuj moliwo kupowania przedmiotw
od gracza za cen stanowic poow wartoci przedmiotu. Gracz moe sprzeda
dowolne przedmioty nie bdce przedmiotami fabularnymi.

Kradzie
Opcja kradziey pozwala graczowi na wgld w inwentarz wybranej postaci.
Kady przedmiot bdcy w jej ekwipunku, poza zaoonymi ubraniami,
jest podatny na kradzie. Gracz moe sprbowa przywaszczy sobie wybrany
przedmiot, nastpuje wtedy test na udan kradzie, bdcy wylosowaniem
wartoci "udana" bd "nieudana". Jeli kradzie powioda si, wybrany przedmiot
staje si wasnoci bohatera, w przeciwnym przypadku rabowana posta
alarmuje o kradziey. Jeli bohater zosta przyapany na gorcym uczynku,
okradana posta nie bdzie chciaa mie z nim adnych kontaktw, co uniemoliwi
rozmow z ni lub handel (w przypadku kupcw).

9.2 Fabua
Na fabu gry skadaj si zadania przydzielane do wykonania graczowi przez postacie
niezalene - NPC (ang. non-player character, to kada posta wystpujca w grze, ktrej
gracz nie moe kontrolowa w sposb bezporedni. Termin NPC w zaweniu do tej pracy
okrela postacie w grze, ktre maj moliwo przydzielenia graczowi zada
do wykonania). Historie przekazywane przez postacie niezalene nawizuj do wiata
w ktrym porusza si gracz oraz tworz stosown atmosfer gry. NPC losowani
s dla kadego nowego miasta, a rodzaj zadania ktrym dysponuj okrelany jest
na podstawie ich zawodu.
Rdzeniem kadego zadania, ktre ma zosta wykonane przez bohatera, jest drzewo
dialogowe. Skada si ono z sentencji wypowiadanych przez NPC oraz odpowiedzi
udzielanych przez gracza. Kada wypowied postaci niezalenej zakoczona jest
co najmniej dwiema opcjami dialogowymi z ktrych gracz, aby kontynuowa, musi wybra
dokadnie jedn. Wybranie konkretnej opcji rozmowy rozwija skojarzon z nim ga
drzewa dialogowego. Limi takiej struktury s flagi decydujce o postpie zadania.

49

Drzewo dialogowe niekoniecznie musi by drzewem w konwencji struktury algorytmicznej.


Moliwo istnienia ptli w ktrej wybrana opcja dialogowa rozwija ga znajdujc
si na niszym poziomie drzewa uoglnia tak reprezentacje do struktury grafu.

9.2.1 Implementacja zada


Zadanie do wykonania (ang. quest) skada si z drzewa dialogowego oraz danych
dodatkowych typu lista przedmiotw do zdobycia lub lista postaci z ktrymi naley
przeprowadzi rozmow. Takie nieszczegowe podejcie wymusza zastosowanie
programowania generycznego, w ktrym kod programu musi by pisany w taki sposb,
aby mg dostosowa si do konkretnej implementacji. Gwnym nurtem w dziedzinie
implementacji zada w kod programu jest wczytywanie ich jako skrypty z oddzielnych
plikw. Jednym z zaoe projektu jest pene uwolnienie aplikacji od zasobw
zewntrznych. Rozwizaniem ktre spenia taki warunek oraz wspomaga programowanie
generyczne, jest polimorfizm. Std te zadania w grze s zaimplementowane w osobnych
klasach dziedziczcych po typie abstrakcyjnym.

9.2.2 Przykadowe zadanie


W prezentowanym przykadzie gracz dostaje od kucharza zadanie, aby znale srebrny
czajnik. Jeeli bohater wrci z podanym przedmiotem w swoim ekwipunku - zostanie
wynagrodzony. Poniszy diagram zosta wykonany na potrzeby projektu w darmowej
aplikacji Diagramly30. Prezentuje on szkielet przykadowego zadania, na ktry skadaj si:

kwestie wypowiadane przez:


NPC,
bohatera,
zmienne zadaniowe (np. poszukiwany przedmiot),
warunki zmiany statusu zadania.

[30] http://www.diagram.ly/

50

Rysunek 32: Jedno z zaimplementowanych drzew dialogowych.

51

10. Optymalizacja aplikacji


10.1 Rozmiar aplikacji
Rozmiar gotowej aplikacji analizowany jest najszczeglniej z uwagi na to,
e zastosowanie generatorw proceduralnych drastycznie ogranicza ilo pamici trwaej
wymaganej przez program.

10.1.1 Dane wewntrzne


Gwnym zaoeniem tworzonej gry jest cakowity brak zasobw wczytywanych
z zewntrznych rde - plikw oraz danych pobieranych z internetu. Ogranicza to rozmiar
powstaej aplikacji do jej kodu wykonywalnego. Oczywistym jest, e pomimo
proceduralnego
charakteru
programu,
zawiera
on
dane
wewntrzne
(np. lista przykadowych imion postaci). Wpywaj one znaczco na rozmiar wynikowy pliku
wykonywalnego, gdy nie s przeksztacane na instrukcje maszynowe zajmujce
optymalnie ma ilo pamici.

Imiona postaci
13661 B
27%

Sowniki tytuw
2208 B
4%

Definicje kolorw
4567 B
9%
Rodzaje przedmiotw
3992 B
8%

Wypowiedzi NPC
8615 B
17%
Zadania fabularne
12934 B
26%

Typy wyliczeniowe
3856 B
8%

Rysunek 33: Procentowy udzia poszczeglnych danych w zbiorze danych wewntrznych.

52

10.1.2 Komponenty pliku wynikowego


Poza instrukcjami oraz danymi wewntrznymi na rozmiar gry ma wpyw rwnie
zaczona biblioteka Allegro5 obsugujca funkcje graficzne oraz systemowe (np. tworzenie
okna). Poniszy wykres prezentuje procentow zawarto poszczeglnych komponentw
w pliku wykonywalnym.

Dane wewntrzne
53 KB
5%
Kod programu
349 KB
34%
Biblioteka graficzna
611 KB
60%

Rysunek 34: Procentowy udzia poszczeglnych komponentw w rozmiarze pliku


wynikowego.

Pomiary dokonane zostay po kompilacji w Microsoft Visual Studio 2010 Premium


(MSVC) w systemie Windows 7 Professional z zastosowanymi domylnymi opcjami
kompilacji w trybie Release (Synteza kompilatora MSVC2010 wraz z bibliotek Allegro5
oferuje dwa domylne tryby kompilacji - Debug i Release. Tryb Debug umoliwia lepsze
raportowanie bdw aplikacji kosztem gorszej wydajnoci, natomiast Release, jak sama
nazwa wskazuje, jest opcj suc wydaniu kocowej wersji aplikacji dziaajcej
maksymalnie wydajnie). MSVC posiada szereg dodatkowych moliwoci automatycznej
optymalizacji kodu z ukierunkowaniem na wielko pliku wynikowego lub prdko
dziaania aplikacji. Najlepsza konfiguracja pozwolia zminimalizowa rozmiar kodu
wynikowego z 1156 KB do 1013 KB.

10.1.3 Zewntrzna kompresja pliku


Programy komputerowe suce minimalizowaniu rozmiarw plikw exe nazywa si
potocznie packer'ami. Rol packer'a jest kompresja instrukcji oraz danych zawartych
w pliku wykonywalnym w sposb podobny do kompresji zip czy rar. W przypadku tworzonej
aplikacji uyty zosta Ultimate Packer for eXecutables (UPX). Rozmiar pliku
wykonywalnego poddanego kompresji przez UPX zmniejszy si ponad trzykrotnie.
UPX korzysta z algorytmu kompresujcego UCL. Zosta on zaprojektowany tak,
by zaimplementowany dekompresor zajmowa zaledwie kilkaset bajtw. UCL nie wymaga
rwnie alokowania adnej dodatkowej pamici dla dekompresji wic zuycie pamici
dla pliku spakowanego poprzez UPX nie zwiksza si.

53

1013 KB

Rozmiar oryginalny
Domylna kompresja

324 KB

Najlepsza kompresja

319 KB
0

200

400

600

800

1000

1200

Rysunek 35: Rozmiar aplikacji wynikowej dla rnych poziomw kompresji w UPX.

10.2 Zuycie pamici


Najwikszy wpyw na zuycie pamici operacyjnej w aplikacji ma wygenerowana grafika.
Reprezentacja graficzna kadego pola gry jest unikalna, std te nie jest moliwe
wielokrotne powielanie gotowych obrazw, tak jak w wikszoci tego typu produkcji. W celu
ograniczenia iloci przechowywanej grafiki w pamici operacyjnej do optymalnego
minimum, wszelkie elementy znajdujce si poza ekranem i widocznoci gracza
s usuwane. Obraz, ktry znajduje si na ekranie, skada si z siatki obrazw
wygenerowanych dla poszczeglnych pl. Podczas przemieszczania si bohatera
po mapie, pola pojawiajce si na ekranie rysowane s na miejsce pl z niej schodzcych,
a reszta przesuwana jest o odpowiedni wektor.
Drugorzdnymi, jednake kluczowymi danymi rezydujcymi w pamici, s dane logiczne.
Wrd nich znajduj si struktury przechowujce ukad pl na mapie, aktualne pozycje
postaci w grze, czy zawarto kufrw w katakumbach. Rozmiar danych logicznych
ma charakter przyrostowy. Oznacza to, e raz wygenerowana struktura zostaje w pamici
do koca dziaania aplikacji. Przykadowo, gdy gracz wejdzie do miasta, a nastpnie
je opuci, dane o tej miejscowoci bd cigle rezydoway w pamici. Takie rozwizanie
eliminuje problem przywracania wartoci domylnych lokacji za kadym razem
gdy zostanie ona odwiedzona przez gracza.

Zuycie pamici (KB)

65
60
55
50
45
0

Ilo odwiedzonych miast


Rysunek 36: Zuycie pamici operacyjnej przez aplikacj po odwiedzeniu
kolejnych lokacji.

54

10.3 Zuycie czasu procesora


Jak ujto w poprzednim paragrafie - wszelkie elementy gry generowane s tylko raz.
Proces algorytmicznego tworzenia komponentw jest najbardziej czasochonn czynnoci
aplikacji, dlatego naleao ograniczy j do minimum. Procedury wykonywane jednorazowo
nie powinny by uwzgldniane w pomiarach czasu procesora w przeciwiestwie do funkcji
wywoywanych w czasie rzeczywistym. Najbardziej obciajcymi procesor procedurami
s instrukcje rysujce. Gwnie z uwagi na to, e musz w szybkim tempie obsugiwa
zmiany na duych tablicach danych (w tym wypadku - bitmapach).
Wskim gardem aplikacji okazuje si zawarto pamici cache instrukcji. Wiadomym jest
ju, e najwiksze obcienie procesora to rysowanie ksztatw, czyli nic innego
jak wywoania funkcji graficznych. Skutkuje to odcieniem aplikacji z przetwarzania
danych. Minimalizacja jej rozmiaru optymalizuje rwnie rozmiar wywoywanych instrukcji,
z czego mona wywnioskowa, e czym mniejszy rozmiar aplikacji na dysku, tym bdzie
ona szybciej dziaa.
Rwnie same instrukcje rysujce musz by optymalizowane podczas wywoywania.
Biblioteka
graficzna
oferuje
systemowe
rysowanie
ksztatw
prymitywnych,
tj. najprostszych m.in. figur geometrycznych, ktrych procedury rysujce s domylnie
zaimplementowane w bibliotece graficznej. W przypadku Allegro5 do prymityww zalicza
si; prost, trjkt, prostokt oraz elips O ile dodawanie do bitmapy prymityww,
nastpuje w sposb byskawiczny (poniewa wykorzystywana biblioteka graficzna
wsppracuje bezporednio z ukadem GPU i pamici wideo), o tyle funkcje modyfikujce
bd sprawdzajce kolory poszczeglnych pikseli bitmapy, wymagaj zastosowania
specyficznego podejcia. Biblioteka Allegro5 umoliwia tzw. blokowanie obrazu. Procedura
ta daje szybki i bezporedni dostp do tablicy kolorw reprezentujcej bitmap.
Dla zablokowanego obrazu, pobieranie oraz ustawianie wartoci kolorw poszczeglnych
pikseli jest optymalnie szybkie, natomiast procedury rysujce prymitywy zajmuj o wiele
wicej czasu. W aplikacji, do graficznej reprezentacji obiektw uyte s zarwno figury
prymitywne jak i rysowane pojedyncze piksele, co wymusza cige blokowanie i zwalnianie
bitmap. Z punktu widzenia obcienia procesora wanie te funkcje zajmuj najwicej
czasu.
Oczywicie w aplikacji znajduj si rwnie elementy czysto logiczne, ktre maj niemay
wpyw na prdko dziaania gry. Najistotniejsze w tym wypadku s obliczenia funkcji
trygonometrycznych; kady logiczny szkielet postaci skada si z odpowiednio
poobracanych koci, natomiast kady obrt wymaga wywoania funkcji cosinus i sinus
dla obliczenia wypadowych wierzchokw. Uoglniajc - kada dodatkowa animowana
posta na ekranie zwiksza zuycie czasu procesora w odczuwalnym dla aplikacji stopniu.

10.4 Wieloplatformowo
Jedn z gwnych zalet biblioteki Allegro5 jest jej zgodno z trzema wiodcymi
platformami - Windows, Linux oraz iOS. Dziki temu kod napisany przy uyciu tego
systemu jest natychmiastowo gotowy do kompilacji pod kad z wymienionych platform.
Aplikacja tworzona jest domylnie na system Windows, lecz w przyszoci planowane jest
wydanie wersji dziaajcej w systemie Linux. Preferowan dystrybucj jest tutaj Ubuntu,
lecz gra zostanie uruchomiona na kadym standardowym jdrze systemu Linux z obsug

55

rodowiska graficznego Gnome lub KDE. Kompilacja na platform Apple iOS nie jest
przewidziana ze wzgldu na odpatno rodowiska programistycznego.
Naley pamita, e sama wieloplatformowo biblioteki wspomagajcej aplikacj
nie wystarczy do penej przenonoci kodu. Aby aplikacj dao si skompilowa w innym
rodowisku
programistycznym
musi
by
ona
niezalena
od
rodowiska.
Domylne ustawienia projektu w MSVC zakadaj wykorzystywanie pakietu
redystrybucyjnego C++. Jest to dodatkowy komponent systemu, ktry niekoniecznie musi
znajdowa si w kadej jego instalacji. Czsto spotykane s rwnie dyrektywy
preprocesora optymalizujce aplikacj lub w pewien sposb przypieszajce prac
programisty. Opisywana aplikacja pozbawiona jest tego typu zalenoci i kodowana
w cisej zbienoci ze standardami jzyka C++. Jedynym wyjtkiem jest stosowana
dyrektywa #pragma once, jednake jest ona obecnie wspierana przez wszystkie wiodce
rodowiska programistyczne.

10.5 Optymalizacja kodu programu


Aby uczyni kod maksymalnie czytelnym oraz minimalnie uwikanym w procesie jego
wytwarzania uyto szeregu standardw oraz notacji, na przykad:

Kod programu jest w znacznej wikszoci obiektowy, jednake specyfikacja jzyka


C++ wymaga nazwania go hybrydowym.
Nazwy zmiennych, funkcji, struktur oraz komentarze kodu pisane s w jzyku
angielskim.
Wszelkie zmienne, nie bdce automatycznymi, posiadaj logiczne nazwy
umoliwiajce atw identyfikacj ich zastosowania.
Bardziej skomplikowane algorytmy lub procedury zostay otoczone komentarzami
blokowymi.
Zachowane s standardy notacji kodu:
Jeeli jakakolwiek nazwa skada si z wicej ni jednego wyrazu, drugi i kady
nastpny wyraz rozpoczynany jest wielk liter i nastpujcymi maymi
(np. TileDrawer, currentHeroEffect, aIsPassable).
Nazwy klas oraz metod pisane s pocztkow
(np. class Character, int GetCharacterHeight()).
Nazwy pl klasy rozpoczynaj si
(np. float _gold, bool _isMoving).

podkrelnikiem

Argumenty funkcji zaczynaj si przedrostkiem


(np. string aName, float aHeroSpeedX).

"a"

wielk

liter

ma

liter

wielk

liter

Nazwy typw wyliczeniowych rozpoczynaj si wielk liter i przedrostkiem "E"


(np. EItemType, EBiome), wartoci enumeratorw pisane s wycznie
wielkimi literami z wyrazami rozdzielanymi podkrelnikiem oraz pierwszym
wyrazem bdcym nazw typu wyliczeniowego (np. ITEM_TYPE_FOOD,
BIOME_SAVANNA).
Pozostae zmienne
bool isRaining).

nazywane

od

maej

litery

(np.

int

i,

Podczas pracy nad gr, kod rdowy by regularnie synchronizowany


z repozytorium SVN. Umoliwio to pen kontrol nad zmianami w kodzie,

56

moliwo
swobodnej
edycji
projektu
na
rnych
komputerach,
i, co najwaniejsze, cige wykonywanie kopii bezpieczestwa kodu.
Wszelkie pliki znajdujce si w projekcie (37 nagwkw h oraz 40 plikw
rdowych cpp) mieszcz si fizycznie w jednym katalogu projektu. Pozwala
to na bezproblemowe i intuicyjne zaczanie plikw poprzez dyrektyw #include.
Jednake, aby zachowa porzdek w funkcjach wykonywanych przez odpowiednie
klasy, pliki pogrupowane s logicznymi filtrami wewntrz rodowiska MSVC.

57

11. Wnioski
Wnioski wycignite z projektu najlepiej przedstawi w formie analizy porwnawczej
elementw, ktre warto tworzy proceduralnie w grach komputerowych oraz tych, ktrych
generowanie mija si z celem. Zestawienie to utworzone jest na podstawie algorytmw
zastosowanych w projekcie, efektw ich pracy oraz nakadu roboczogodzin programisty
w celu ich implementacji. Niestety ze wzgldu na zaoenie projektu o tym, e generowany
ma by kady element rozgrywki, wybrane zostay tylko czoowe algorytmy dla kadego
aspektu gry.
Elementy gry, ktre warto generowa proceduralnie:

Mapa wiata
Szum Perlina pozwala na wiarygodne odwzorowanie wysokoci terenu i jest powszechnie
uywany dla generowania map w rnego rodzaju grach. Korzystnym zabiegiem jest
nawet jednorazowe uycie algorytmu generowania mapy, ktra bdzie nastpnie
modyfikowana rcznie przez deweloperw gry. Produkcje opierajce si na elementach
strategicznych bardzo czsto posiadaj w zasobach du ilo map. Generowanie takich
plansz oszczdza producentom czas oraz gwarantuje niepowtarzalno rozgrywki.

Labirynty
Cigi podziemnych korytarzy stosowane s w grach komputerowych od samego pocztku
ich istnienia. Nawet w produkcjach najwyszej klasy wydawanych obecnie istnieje
zaimplementowany tzw. system generowania lochw (np. Diablo III, Legend of Grimrock).
To wanie moliwo penetrowania losowo tworzonych jaski oraz katakumb
zagwarantowaa takiej grze jak Diablo II rzesze fanw nawet 12 lat po jej premierze.
Sam algorytm generujcy jest rwnie stosunkowo atwy w implementacji
i parametryzacji.

Postacie niezalene
Ten element warto generowa tylko wtedy, gdy w grze wystpuje bardzo duo postaci
lub gdy istoty tworzone s dynamicznie w zalenoci od sytuacji. W wielu grach
(jak chociaby popularnej Assassin's Creed) pojawia si zjawisko "ataku klonw",
w ktrym gracz odnosi wraenie, e nieustannie napotyka te same postacie.
Proceduralne generowanie chociaby elementw ubioru postaci pozawala wyeliminowa
ten problem.

Animacja szkieletowa
Taki rodzaj animacji opaca stosowa si, kiedy gracz ma bezporedni wpyw na animacje

58

odgrywane w grze (np. wybuchajca beczka odrzuca bohatera, a jego koczyny


realistycznie reaguj w trakcie kolizji ze cian - jest to tzw. system ragdoll31). Obecnie
animacja szkieletowa jest prosta w implementacji i wspierana sprztowo przez GPU.

Imiona
Spord dziedziny generowania nazw tylko tworzenie imion daje zadowalajce rezultaty.
Cig Markowa jest tutaj jednym z proponowanych rozwiza, lecz nie naley ogranicza
si jedynie do niego. Generowanie imion dobrze wspgra z generowaniem postaci oraz
dodaje wiarygodnoci w tworzonym wiecie gry. Unikalna osoba z unikalnym imieniem
jest bardziej realna ni kolejna kopia tego samego modelu postaci o imieniu Mieszkaniec.

Efekty specjalne
Uwzgldnienie tego komponentu jest w odniesieniu do dzisiejszego rynku gier
formalnoci. W starszych grach wideo, efekty specjalne tworzono rnymi wyszukanymi
metodami, tylko po to, by moliwie ograniczy zuycie czasu procesora i pamici. Rozwj
techniki umoliwi realistyczne modelowanie efektw czsteczkowych poprzez swobodne
tworzenie tysicy kopii obiektw i zarzdzanie nimi w niemale kadym obiegu gwnej
ptli gry.
Elementy gry, ktrych nie warto generowa proceduralnie:

Mapy miast
Generowanie miast ma sens tylko wtedy gdy jest to gwnym zagadnieniem aplikacji
(np. SimCity lub Pixel City). W kadym innym przypadku moliwoci rozoenia
topograficznego sieci drg, budynkw czy obiektw uytecznoci publicznej
s tak zrnicowane, e bardzo trudno uzyska wiarygodny wygld miasta. Historycznie
miasta powstaway z maych osad, ktre nastpnie rozwijane byy w coraz wiksze
metropolie. Dobry algorytm generujcy miasta musiaby symulowa ten proces.

Czcionka
Ilo dostpnych krojw czcionek, rwnie na licencjach bezpatnych, w zupenoci
wystarczy dla lwiej czci projektw. Generowanie czcionki wymaga algorytmicznego
podejcia dla kadego znaku, a utworzenie fontu wygldajcego np. jak pismo odrczne,
jest wyjtkowo czasochonne i nieopacalne.

Fabua
Komputerowe wytworzenie wiarygodnej i epickiej historii to zagadnienie z dziedziny
sztucznych sieci neuronowych i na dzie dzisiejszy jest tematem do abstrakcyjnym
w odniesieniu do gier komputerowych. Jeeli produkcja ma zainteresowa gracza lini
fabularn to zdecydowanie musi by ona nakrelona przez czowieka. Algorytm
komputerowy moe suy w tym wypadku pomoc i wygenerowa proste zmienne
dla danej historii, np. nazwa szukanego przedmiotu, lub pokrewiestwo osoby zlecajcej
zadanie w stosunku do bohatera.

Grafika gry
W caym projekcie to generowanie i dynamiczne rysowanie grafiki do gry zajo najwicej
czasu. Wytworzenie obrazw i modeli w programie graficznym trwa z reguy nie duej
niby to zajo poprzez pisanie procedur rysujcych, a moliwo kontroli grafiki

[31] Richard Wyckoff: Postmortem - DreamWorks Interactive's Trespasser. Game Developer, May 14, 1999

59

zdecydowanie zwiksza jej jako wynikow na korzy wytwarzania rcznego.


Dynamiczne generowanie grafiki ma jednak sens w kilku przypadkach.
Jeli istnieje potrzeba narysowania reprezentacji graficznej fraktali,
wymagane jest by rysowane obiekty byy unikalne (np. drzewa),
lub naley wygenerowa wiele prostych ksztatw o cile okrelonych parametrach
i pozycjach (np. szachownica).
Kolejn analiz ktr warto dokona w tym rozdziale jest bilans zyskw i strat
dla wykorzystania elementw generowanych proceduralnie w grze. Waciwoci
te s prawdziwe dla kadego generowanego komponentu.

Zalety elementw generowanych proceduralnie:


Brak danych zewntrznych, nie istnieje konieczno pisania dodatkowych importerw
oraz parserw.
Wielokrotnie mniejszy rozmiar elementu - zamiast danych podane s tylko parametry
wejciowe algorytmu.
Moliwo losowego doboru parametrw.
Uniwersalno algorytmw generujcych - ten sam zestaw instrukcji moe wytworzy
imi bohatera jak i nazw miasta.
Wady elementw generowanych proceduralnie:
Wysokie zuycie czasu procesora podczas generowania elementw - wczytanie ich jako
danych zewntrznych z reguy zajmuje o wiele mniej czasu.
Brak bezporedniej kontroli nad zawartoci gry - wiele zasobw atwiej i szybciej mona
stworzy w specjalistycznych programach zewntrznych, produkujc je samodzielnie
posiada si bezporedni kontrol nad jakoci wytworzonego zasobu.
Konieczno skrupulatnego doboru parametrw - nieprawidowo dobrane parametry
i brak regu sprawdzajcych wygenerowane losowo elementy moe prowadzi do mao
wiarygodnych wynikw generatora (np. w duym podziemnym labiryncie dwie jedyne
drabinki prowadzce do wyjcia znajduj si metr od siebie).
Wskie gardo aplikacji dla cache instrukcji - cache danych jest nienalezycie
wykorzystywany i aplikacja nie dziaa optymalnie w sposobie rwnowaenia przydziau
czasu procesora.
Komponenty generowane proceduralnie s bardzo dobrym sposobem na zapewnienie
grom dugowiecznoci poprzez losowe generowanie plansz i przedmiotw
oraz urozmaicanie elementw rozgrywki. Jednoczenie produkcje nie powinny opiera si
cakowicie na proceduralnoci, chyba, e takie jest gwne zaoenie projektu. Naley
pamita, e moliwo algorytmicznego tworzenia zawartoci jest potnym narzdziem,
jednake zawsze najwaniejsza bya, jest i bdzie oglna mechanika gry, do ktrej
to sposb tworzenia zasobw naley dostosowa.

60

You might also like