Sunteți pe pagina 1din 25

JOC DE TIP PLATFORMER N PROJECT

ANARCHY FOLOSIND
ALGORITMI DE GENERARE PROCEDURAL A
NIVELURILOR

Profesor coordonator :
TDI

Student:
DBV

Jocuri de tip platformer


Un joc de tip platformer este un joc video care implic
micarea unui avatar pentru a sri intre platforme suspendate
sau peste obstacole sau chiar peste amndou pentru a avansa
in lume. Aceste provocri sunt cunoscute ca i puzzle de
srituri sau alergare liber (free-running). Juctorul controleaz
sritura pentru a evita ciocnirea sau cderea de pe platformele
suspendate.

Platforme /
Obstacole

Jucator / Inamici

Coninut procedural

n industria de jocuri digitale generarea de coninut procedural a fost


folosit cu succes pentru a crea un coninut variat. Acest tip de coninut
poate varia de la lumi ale jocului, la nivele, obiecte sau decoraii.
Exemple de jocuri cu coninut generat procedural : Terraria, Civilisation,
Diablo, Borderlands sau SpeedTree. Un exemplu interesant de generare
procedurala o reprezint jocul Elite, un joc cu comer in spatiu unde doi
programatori au reuit sa genereze 8 galaxi si 256 de stele cu numai
22KB de memorie, folosind doar numere pseudo-aleatoare.

Modelarea unui joc

Jocurile combin structuri de design. Regulile guverneaz ca jocul s


foloseasc structurile in asa mod incat sa aib sens pentru utilizator.
Contructia jocului da sens actiunii caracterelor non-jucabile, sau a altor
entiti care populeaz jocul.
Structurile n joc sunt fundamentale care sunt inter-conectate fiecare
intre ele printr-o relatie intr-un mod stabil si consistent ce dau sens
jocului. Ele trebuie s fie observabile si recunoscubile din perspectiva
utilizatorului, cat si pentru caracterul folosit de juctor. Structurile in
jocuri opereaz ca un context si particip n procesul de construire a
sensului jocului.

Combinarea ntre modelare i


generare procedural

Generarea procedural de coninut poate fi combinat cu design-ul de


niveluri. Cea mai buna metoda este acea de a crea un generator de
continut compositional, care vede fiecare model ca un element de desing
spatial i care simplu le interconecteaz, unul dupa altul bazndu-se pe
niste reguli. Acest lucru se poate face fie cu elemente statice fie cu
elemente parametrizabile. Acest lucru se poate face fie intr-o dimensiune
ca in Tanagra fie n dou dimensiuni ca in ORE sau chiar n trei
dimensiuni.

Project Anarchy (1)

Project Anarchy de la Havok Industries este un motor de jocuri complet i conine o


suit de componente de ultima generaie pentru crearea de jocuri pe dispozitive
mobile. Tot odata cuprinde i o mare comunitate de dezvoltatori. Motorul Project
Anarchy este inc la nceput dar promite c se va dezvolta rapid i c va acapara
piaa deinut de alte motoare de jocuri precum Unity3D, Unreal 4, CryEngine sau
altele. Project Anarchy este complet gratuit pentru dezvoltarea pe platforme mobile
cum ar fi iOS, Android sau mai noul sistem de operare de la Samsung Tizen

Project Anarchy (2)

Project Anarchy (3)

Plugin Vision (1)

Plugin-urile pentru motorul Project Anarchy sunt colecii de clase C++ compilate
ntr-o bibliotec static sau dinamic. Exista clase speciale i mecanisme de
declarare a membrilor pentru a face aceste clase vizibile n VForge i n motor de joc.
n mod normal, plugin-urile sunt folosite pentru a expune clase customizate cum ar fi
componentele sau entitile n VForge sau n motorul Vision.

class ProceduralRunPluginClass : public IVisPlugin_cl

public:

void OnInitEnginePlugin();

void OnDeInitEnginePlugin();

const char *GetPluginName()


{
return "ProceduralRunPlugin"; // export de acelasi nume

};

Plugin Vision (2)

ProceduralRunPluginClass g_myComponents;

DECLARE_THIS_MODULE(g_myComponentModule, MAKE_VERSION(1,0),

"DBV plugin",

"Havok",

"DBV plugin for procedural run game", &g_myComponents);

VEXPORT IVisPlugin_cl* GetEnginePlugin_ProceduralRunPlugin(){ return &g_myComponents; }


class BasicBlock_cl : public VisBaseEntity_cl

public:

BasicBlock_cl();

~BasicBlock_cl();

VOVERRIDE void InitFunction();

VOVERRIDE void ThinkFunction();

V_DECLARE_SERIAL_DLLEXP( BasicBlock_cl, DECLSPEC_DLLEXPORT );

IMPLEMENT_OBJ_CLASS(BasicBlock_cl)

....
START_VAR_TABLE(BasicBlock_cl,VisBaseEntity_cl,entitate bloc",0, NULL )
DEFINE_VAR_FLOAT(BasicBlock_cl, Duration, "Duration for translation (seconds)", "2.0", 0, 0);
DEFINE_VAR_VECTOR_FLOAT(BasicBlock_cl, EndPosition, "Desired position", "0.0,0.0,0.0", 0, 0);
END_VAR_TABLE

Masina cu stri finite

O main cu stri finite este bazat pe conceptul de stare, care n mod


normal const n dou lucruri.
- Un set de aciuni care ruleaz in acelai timp (animaia unui caracter,
un sunet sau ateptarea unuei perioade de timp)
- Un set de tranziii cu o verificare conditional care determin cnd se
va trece n starea urmtoarea dndu-se eventuale condiii de ndeplinit.

Algoritmul utilizat

Conexiuni ntre stri


Legtura

ntre stri

C
D

*
*

*
*

*
*

*
*
*
*

*
*

Conexiuni LUA
ChooseState = function(o)
o:ChooseNextState()
o["State" .. State](o)
o:CleanBlocks()
end

A={
Easy =
{
{State
50},
{State
100},
},
Normal =
{
{State
25},
{State
100},
},

CheckSubState = function(o, step, stepSize, type,


quantity)
if step>1 and step<stepSize or type == "Coins"
then
if o:CheckForCoins(o.LastPosition, quantity) then
return end
end
if step>1 and step<stepSize or type == "Diamonds"
then
if o:CheckForDiamonds(o.LastPosition, quantity)
then return end
end

= "A", Chance =
= "B", Chance =

= "I", Chance =
= "B", Chance =

Hard =
{
{State = "I", Chance =

if step>2 and step<stepSize-1 or type ==


"Obstacles" then
if o:CheckForObstacle(o.LastPosition, quantity) then
return end
ChooseNextState
= function(o)
end
local
endpossibleNextStates = TreeList[State][o.Difficulty]
local rand = math.random() * 100
for i=1,#possibleNextStates do
local state = possibleNextStates[i]
if rand < state.Chance then
State = tostring(state.State)
break
end
end
end

Starea A
Juctor

Diaman
t

Ban

Obstac
ol

Podea

Ap

Starea C
Juctor

Pode
a

Ap

Starea D
Juctor

Deplasare dreapta

Podea

Ap

Jucto
r

Starea E

Podea

Prpast
ie

Ap

Ban

Starea F
Podea

Juctor

Podea Turbo

Ap

Juctor

Starea G
Ban
Diaman
t

Podea

Ap

Juctor

Starea H
Prpasti
e

Podea

Ap

Starea I

Diaman
t

Juctor

Podea

Ap

Avantaje / dezavantaje
Mod de generare

Avantaje

Dezavantaje

Procedural

1.

Simplu de implementat, posibil doar din instruciuni IF

1.

2.

Nu este nevoie de calcul complex i este nevoie doar mutri simple ale
blocurilor.

Rezultatul este prea simplu, cteodat total


nespectaculos.

2.

3.

Timpul de ncarcare este foarte mic, dimensiunea datelor fiind deasemenea


minim.

Posibil generarea n timpul jocului, poate s


genereze blocri temporare ale acestuia.

4.

Se pot crea lumi infinite.

5.

Memoria folosit este minim.

1.

Nu necesit prea mult programare.

1.

Nu se pot crea lumi infinite.

2.

Rezultatul final este spectaculos n unele cazuri, persoana care se ocup de


manipularea elementelor deinnd tot controlul asupra acestora.

2.

Timpul de ncrcare este mai mare, iar datele la


fel sunt de dimensiuni mai mari.

3.

Necesit mai mult memorie deoarce jocul este


deja generat i ncrcat n memorie.

1.

Complexitatea este mai mare dect n cazul


generrii normale.

2.

Posibil generarea n timpul jocului, poate s


genereze blocri temporare ale acestuia.

Bazat pe modelare

Procedural i bazat pe
modelare

1.

Dei nu se deine controlul direct asupra elementelor, se poate crea un template


pe baza crora se vor genera elemente din joc, acest lucru ducnd la o generare
mult mai spectaculoas.

2.

Timpul de ncrcare este minim, memoria folosit este minima.

3.

Rezultatul poate fi la fel de spectaculos ca n cazul generri bazate pe modelare.

4.

Se pot crea lumi infinite.

Concluzii ...

Generarea procedural asigur o generare infinit a nivelurilor, facndu-le


interminabile, astfel eliminndu-se nevoia de personal care trebuie s se ocupe de
astfel de obiective ( compunerea de niveluri ). Exist totui o disput ntre cea ce
nseamn un joc bine fcut i unul generat procedural. O combinaie ntre design i
generarea aleatoare a jocului a fost creat n acest proiect pentru a arta ca
jocurile din ziua de azi pot fi create n totalitate de ctre o entitate central, posibil
chiar cu inteligen artificial. Un alt avantaj al acestei generri o reprezint
dimensiunea minim a datelor fa de jocurile n care nivelurile sunt pre-generate.
Se poate aduga un alt avantaj n cazul jocurilor de tip platform nesfrsit, faptul
c timpul necesar de ncarcare este minim totul generndu-se pe parcurs.

Viitoare implementri
Pe viitor acest proiect va fi continuat astfel:

prin adugarea de animaii noi

caractere bazate pe inteligen artificial

mai multe stri

pool pentru elementele refolosibile pentru a evita minim-freeze


urile din timpul generrii, dar trebuie testat i performana n
urma acestei implementri.

mbuntire algoritmi i elemente de randare

deploy-ul pe dispozitive Tizen i iOS

optimizarea geometriilor

implementarea de anunuri publicitare i comercializarea pe


Google PlayTM sau AppStoreTM

S-ar putea să vă placă și