Author
luka-kozuh
View
227
Download
2
Embed Size (px)
DESCRIPTION
games
[email protected],draftv09,PeterPeer++ 51
Poglavje#4(igralnost)
(BojanKlemenc++)
Aktualnekatlice:
oblikovanjeigralnostio igralnost
poudarekpredvsemnatemdelu,kerosplonihzadevahgledeprogramiranjaigralnostinivelikozapovedat(razenkarjeosamiarhitekturiobjektovigre)
arhitekturaigreo arhitekturaobjektovigre
1. pravilaigreo splonapravilaigreo pravilaintegriranavobjekteigre
shranjevanje(str.118119,304307)o serializacija
1.Igralnost
Poskusopredelitvessintezoopredelitevrazlinihavtorjev:Igralnost(gameplay,playability)jeinterakcijazigroprekonjenihpravil,povezavamedigralciznotrajigre,izziviinreevanjeleteh,zgodbainvpletenostigralcavzgodbo[Wikipedia10].Igralnostjesubjektivnainodraadoivljanjeigre.Pravilaigreinmehanikaigre(gamemechanics):Mehanikaigrejepotekigreiznekegazaetnegastanjazinterakcijomedpraviliigreinakcijamiigralca.Posledinoigralecdoivljaigro:igralnost.[de.wikipedia10]
[email protected],draftv09,PeterPeer++ 52
Primer:(Gospodarska)simulacija(Constructionandmanagementsimulation)obravnavanekogospodarskopanogozdoloenegazgodovinskegaozadja,izesarizhajazaetnostanjeigre(TransportTycoon:simulacijalogistinegapodjetjaodzaetka20.st.naprej).Pravilaigresimulirajogospodarstvoproizvodnja,ponudba,povpraevanje,finannitokovi.Tevrednostisespreminjajovodvisnostiodasa,morebitniraunalnikovodeninasprotnikireagirajonadelovanjeigralcatojemehanikaigrevojemsmislu.Igralnostpajepolegmehanikeesubjektivnoovrednotenaizkunja,kijoimaigralecmedigranjemsmozaznavanjepotekaigre,poglednazemljevidinstatistike,kisorezultatnjegovegaigranja.edvezanimiviopredelitvi:Igrajezaporedjezanimivihizbir(aseriesofinterestingchoices)SidMeierIgralnostjeedenalivezaporednihvzronoposledinihizzivovvsimuliranemokolju(Oneormorecausallylinkedseriesofchallengesinasimulatedenvironment)InternationalGameDevelopersAssociationIgralnostlahkoopazujemo(inmerimo)zvevidikov[Gonzlez10]:Zadovoljstvo:stopnjazadovoljstvaoznaujeigralevobutekuitkapriigranjuigrevcelotialikakneganjenegadela:mehanika,grafika,zgodbaipd.Zadovoljstvojeprecejsubjektivnointekomerljivo.Uenje:omogoarazumetiinobvladovatisisteminmehanikoigre.Vprimerjavizuporabnikimiprogrami,kjersielimoimmanjuenjainimboljpreprostouporabo,jelahkopriigrahkoliinainhitrostuenjaodvisnaodvrsteigre:igralcalahkoenazaetkuigrezintenzivnimtreniranjemnauimoobvladovatiigroalipagapostopomanauimopopotrebi.Lahkotudipredpostavimo,daimaigralecdoloenesposobnostiepredenjezaeligratiigro.Uinkovitost:Kakodobroigraizkoristiasinvire,daseigraleczabavamedtem,koposkuadoseiciljeigrekakodobroigrapritegnepozornostigralcaodzaetkadokonca.Zatomoramodobroporazdelitinaloge(oziromaizzive).Zatopljenost:Kakodobroseigraleczatopivnavideznisvet.Igralecpostanedelnavideznegasveta.Daigralecostanezatopljenvigro,jepotrebnoposkrbetizadobrorazmerjemedizziviinveinami,kisopotrebne,dapremagaizzive.Kakopoveatizatopljenost:
izkoristiradovednostigralca nekateriodgovorinaskrivnostisolahkodvoumni igralcuponudirazlinemonostiinnovesvetove igralcupokaikuliso(innetistega,kijoupravlja) igralcupokaistvari,kigazanimajointakoohranizanimanjedoigre ustvariritem principnedovrenosti,umnajzapolnimanjkajoe prikaistvarivvejemalimanjemobseguodpriakovanega strahospotovanje domiljija zanimivezgodbeinliki zvok(nevidenega).
[email protected],draftv09,PeterPeer++ 53
Motivacija:Kakopripravitiigralca,daizvrinekadejanja,oziromavztrajaprinjihovemizvajanjudoklerjepotrebno.Takojepotrebnoposkrbeti,daseigralecosredotoinaizzive,nalogemorajoimetismisel,nagraditijepotrebnonapredekznotrajigre.Sistemnagrad:
nagradezadoseke nagradeprihajajovciklihpo15min nagradelahkoustvarijoritem nagradesedopolnjujejo nagradezanaloge,kinajjihigralecizkusi zbirkemanjihnagradvodijodovelikihnagrad.
ustva:pomagajo,daimeigralecimboljeizkunjepriigranjuigre.Zuporaboizzivov,zgodbe,situacij,estetskegaizgleda,glasbeitd.lahkoizzovemorazlinaustvenastanja,kotnaprimerveselje,strah,radovednost,alost.Vkratkemasulahkoigranjevzbudirazlinaustva,kisevresninemivljenjualinebipojavilaalipapojavilavtakokratkemasu.Druabnost:Vkaknemobseguigraspodbujadruabnost(priigranju)innjenvplivnadoivljanjeigre.Igralcilahkoreujejonalogeskupajalipatekmujejo,pritemsetvorijonovarazmerja,lahkopasetudiobstojearazmerjavresninemsvetupreslikajovsvetigre.Zaspodbujanjedruabnostilahkovigrovkljuimoizzive,kisoskupniveigralcem,jihtakozdruujejoinmotivirajo,daskupajpremagajoizzive.Druabnodoivetje:druabneigreigrenaosebnihraunalnikihspletZadruabnodoivetjefizinaprisotnostvokolicinivenujnopotrebna(povezavajelahkotudisamoprekotokovanjaizidovlestvica).Smernice:
ustvariprilonostizatekmovanje ustvariprilonostizasodelovanje omogoiigralcempokazatisvojespretnosti omogoiigralcemindividualnostinrazkazovanjeznaaja dodajorodjazakomunikacijoinizmenjavo omogoiobutekmentorstvainobutkazadovoljstvaobuspehudrugih omogoiljudem,dagledajo.
Pregledpojmov,kisopomembnizaigralnostinnakajmoramobitipozorni:Cilji/naloge(objectives):Ciljiznotrajigresozahteve,kijihjepotrebnoizpolniti,dadoseemodoloenizid.Vzpostavljajokonflikteinizzive,motivirajoigralcaskonnimnaboromreljivihproblemov.Vosnovidajoigralcumonost,danekajpone.Priigrahjepomembnapotdociljaoziroma,daseigralecobtemzabava.Izidi(outcomes):Igreimajomnoicomonihizidov(konecigre),kisoposledicaigralevihdejanj(interakcijezigralcem).Bitimorajomerljiviigralecugotavljasvojouspenostnapodlagimerljivihizidov.Nekateriizidisobolji,nekaterislabi;brezmerjenjaizidovlahkopridemodosituacije,konevemo,kdojezmagal.Najboljosnovnaizidastazmagainporaz,tretjipogostizidpajeneodloeno.Negotovost(uncertainty):
[email protected],draftv09,PeterPeer++ 54
Odigrepriakujemo,dasoizidinegotovi.Vnasprotnemprimeruigramoigro,vkaterijeizidvnaprejdoloennegledenato,kakoigramo,inigrapostanenezanimiva.Igralcielijovigrinekajdosei,vendarpamoraobstajatimonost,dajimnebouspelo.Ciljnapublika(targetaudience):Glavnopravilo:nikolineposkuajzadovoljitivsehigralcev,kerzvelikoverjetnostjonebozadovoljilnobenega.Potrebnojeidentificiraticiljnoskupinoinugotovitinjihoveelje.Pritemsilahkopomagamotako,dasizamislimoinnakratkoopiemoprofiletipinihuporabnikovciljneskupine(tipiniigralnias,obstojeeigre,kijihigrajoipd.).Obvladovanjeigre:Zaveinoigralcevjesmiseligreuporabitispretnostiinznanje,dazmagamo(obrnemo)igro.Polegsameeljepozmagijepomembenobutekkakodobrismo(in,datolahkopokaemodrugim).Porazjevtemprimerusprejemljiv,sajnamjezmagaizziv.Pomembenjeobuteknadzoraenimamonadzorainizgubimoalizmagamo,nizabavno.Nekajnasvetov:
igranajpreizkusisposobnostiigralca preizkusimolahkovesposobnostinaenkrat zmanjatijepotrebnovplivsree ponuditiigralcemvabljivenagrade(vigriseveda) predpomembneciljejepotrebnopostavitivejeovire ponuditiigralcemmonost,datvegajo ponuditiveciljevnaenkrat,dalahkoigralecizoblikujestrategijoobdelovanjaciljev ponuditiigralcu,daizberestopnjotveganja ejemono,navideznopoveatiobutekteavnosti(dejanskateavnostjelahkomanja).
Principkarjekamenpapir:Cilj:prepreiti,daigraleczenostrategijodominiraigroterstempovzroi,dasovseizbiretrivialne.Primer:pogostoseuporabljavstrategijahpeakskopjempremagakonjenika,konjenikpremagalokostrelca,lokostrelecpremagapeaka.Teava:kakonarediti,daovirenebodopretekeinpovzroalefrustracije?
Ostatimoramovidealnempodroju.Teavnost:
[email protected],draftv09,PeterPeer++ 55
Igranesmebitipretekaaliprelahka.Kervsiigralcinisoenakospretni,jimlahkoponudimomonost,dasamiizberejotakoteavnost,dalahkoevednouivajovigri.Dejavniki,kijihlahkospreminjamo:
as(hitrejialipoasnejitekigre) tevilonasprotnikov znailnostinasprotnikov(poasneji,ibkejinasprotniki,omejenaUI) koliinavirov porazdelitevingostotaobjektovzapovrnitevalinadgradnjomoi(powerups).
Dejavnikiselahkospreminjajotudisamodejnotakoseteavnostlahkoprilagajaigralevimsposobnostim.Informacije:Kolikoinformacijdamoigralcuoziromakolikojihskrijemo.Informacijezmanjujejonegotovost.Igreuporabljajopristopegledenato,kolikoinformacijnudijoigralcu(poker,ah).Kadarjeigraprevepredvidljiva,bilahkoponepotrebnem(...???)dodalinakljuje,vendarpavveiniprimerovzadoa,daigralcuneponudimodoloenihinformacij(omejenovidnopoljepristrategijah(fogofwar)).Kratkoronispominigralca:Kratkoronispominlahkonaenkrathrani(inhkratiobdeluje)72podatka.eelimo,dasiigralecnekajzapomni,potemsedrimospodnjemeje,eelimo,dapozabi,potemgremovijeodtemeje.Vendarpamoramopaziti,daigralcanezasujemospodatki,sajlahkopovzroimofrustracije.2.ArhitekturaobjektovigreKompozicijainagregacija(2.poglavje/3.predavanje):jetoponovitev...???dodatekzveprimeriProblemihierarhijeobjektov[Chandy09]:Imamohierarhijorazredov:
elimododatimonostanimiranja.Nekateriobjektisebodosamoizrisali,nekateribodotudianimirani,nekateribodosimuliraniinanimirani,nekaterisamosimulirani:
[email protected],draftv09,PeterPeer++ 56
Monareitevzvekratnimdedovanjem:
Kajpa,esepojavizahteva,daseobmojeproilca(trigger)izrienaekranu(drawable)?eenprimerizkonkretneigre:RedeemerizUnrealTournamentakakorealizirati:kotizstrelek,kigaigraleclahkokrmili;kotkamero,kilahkoustreli(ubije)nasprotnika?Reitev:kompozicijaUporabnostkompozicije:Primernaknadnerekonstrukcijehierarhijerazredov(zvekratnimdedovanjem)izigre,kjersejeuporabilmodelkompozicije:
[email protected],draftv09,PeterPeer++ 57
Izslikejerazvidno,dajeuporabakompozicijeomogoaprecejvelikokompleksnostebimodeliralishierarhijorazredov,postanemodelprecejnepregleden,teavenzaspreminjanjeindopolnjevanje.Zgradbaobjektovspomojokomponent:
[email protected],draftv09,PeterPeer++ 58
Predstavitevvoblikimree:objektisovodoravno(naprimerigralec),navpinokomponente(igralecimakomponentepozicija,premikanje,izris,skriptinfiziko).obrazloitev...???Vzorcinartovanjaobjektov(designpatterns):Vzorcinartovanjaobjektovpodajajoreitveproblemovindoloenihsituacij,kisepogostopojavijoprirazvojuprogramskeopreme.Kerreujejoproblemenavijemabstraktnemnivoju,sejihnavadnonedadobitivoblikiknjinic.Oglejmosinekajnajpomembnejihvzorcevzvidikaiger:Edinec(Singleton):Problem:Potrebujemonatankoenoinstancorazreda,kijedostopnacelotnemuprogramu,globalno.Reitev(predstavljenazUMLrazrednimdiagramom):
Implementacijaimanavadnoenotokozaustvarjanjeindostop,karnamdajepotrebnokontrolonadinstancoznotrajcelotnegaprograma.Uporabavigrah:Predvsemstrojnivirigrafinenaprave,zvonenaprave,upravljalcipomnilnika,upravljalcidatotek,mrenivmesniki.Vendarpasedoloenenapravelahkopojavijovekrat,npr.igralnepalice,pomnilnikekartice.Slednjeimplementiramokotnavadneobjekte.Polegstrojnihvirovlahkotavzorecuporabimorecimozadnevnik,opozorila,akalnovrstozasporoila,aliceloobjekt,kipredstavljasamoigro.Posledice:Lahkosepojavivelikoglobalnihspremenljivk(objektov;znjimiimamoleboljinadzornadustvarjanjeminunienjemletehvprimerjavisspremenljivkami),modularnostinpreglednostkodejemanja,zato,eseleda,seposkuamotemuvzorcuizogniti.Primer:public class MemoryManager { private static final MemoryManager INSTANCE = new MemoryManager(); // Private constructor prevents instantiation from other classes private MemoryManager() { } public static MemoryManager getInstance() { return INSTANCE; } } Uporaba:MemoryManager mm = MemoryManager.getInstance(); (Lepebibilo,ebiizimenarazredabilojasno,dagrezaSingleton.)XNIprimer:.h:@interfaceTouchPanel:NSObject{...}...
[email protected],draftv09,PeterPeer++ 59
+(TouchPanel*)getInstance;@end.m:@implementationTouchPanelstaticTouchPanel*instance;(id)init{ self=[superinit]; if(self!=nil){ ... } returnself;}+(void)initialize{ instance=[[TouchPanelalloc]init];}+(TouchPanel*)getInstance{returninstance;}@end
Tovarnaobjektov(ObjectFactory):Problem:Vasihelimoustvaritiobjektrazreda,kiga(torejnjegovegatipa)enepoznamovtrenutkuprevajanjaprograma.Tipdoloimoelevasuizvajanja.Reitev:
Namestoustvarjanjainstancznew,imamotovarnoobjektov,kijisporoimoprekoklicametodezustreznimparametrom,kateriobjektnajustvariintovarnaustvariinvrnetaobjekt.Uporabavigrah:Tovarnaobjektovimakljunovlogopripodatkovnovodenemrazvoju.Npr.prinalaganjustopnjezvsemiobjektinimamometode,kieksplicitnopoklienewzavsakobjekt,ampakpreberemodatoteko,kivsebujeseznamvsehpotrebnihobjektov,jihidentificiramoinpokliemotovarno,daustvariobjekttegatipa.Posledice:Primer#1:enum GameObjectType { PLAYER, ENEMY,
[email protected],draftv09,PeterPeer++ 60
POWERUP, WEAPON, // ... rest of the objects... } GameObject * ObjectFactory::Create(GameObjectType type) { switch (type) {
case PLAYER: return new Player(); case ENEMY: return new Enemy(); case POWERUP: return new PowerupO; case WEAPON: return new Weapon();
} return NULL; } Pomanjkljivosttaknetovarneje,damoravedetivnaprej,kakneobjektesplohlahkoustvari.Tolahkoodpravimotako,dasevsakrazred,kiseeliustvaritispomojotovarne,registrira.Registracijavsebujeunikatnoidentifikacijskotevilkoinspecificirannainzaustvarjanjetaknegaobjekta.Primer#2(imaomenjenopomanjkljivost?):public class ImageReaderFactory { public static ImageReader getImageReader(InputStream is) { int imageType = determineImageType(is); switch(imageType) { case ImageReaderFactory.GIF: return new GifReader(is); case ImageReaderFactory.JPEG: return new JpegReader(is); // etc. } } } Tavzorecjezelouporabentudizaproduciranjenovevsebinezaigre,kisoenaprodajnihpolicah.Opazovalec(Observer):Problem:Objekti(razlinihtipov)elijovedeti,kosenekajzgodi,alikosespremenistanjedrugihobjektov(priemersoobjektiimmanjsoodvisni(coupling)).Reitev:Imamoopazovancainveopazovalcev.Opazovalciseregistrirajopriopazovancu,kijihdodavseznam.Obprimernemdogodkuopazovaneckliemetodonotify()(aliupdate())privsehopazovalcih(messagepassing,eventdriveninteraction...???).
[email protected],draftv09,PeterPeer++ 61
Uporabavigrah:Interakcijamedobjekti.Vratarecimoelijobitiobveena,dajeigralecpritisnilprimerengumbinseposledinolahkoodprejo.Obratnobilahkogumbeksplicitnoklicalfunkcijozaodpiranjevrat,vendarjepotemvednopotrebnorazmiljati,kajvsejepotrebnopoklicati,kosepritisnegumb.Vdrugismerisekotopazovalcigumbaprijavijosamotistiobjekti,kisejihspremembastanjagumbatie.edvaprimera:Kadarjedoloenobjektunien,morajovsinasprotniki,kisoimelitaobjektnaciljan,spremeniticilj,sajobjektneobstajave.erecimonagrafinikarticispremenimololjivost,potemjesmiselnootemobvestitivseobjekte,kiimajonekgrafinipomnilnikivmesnik(buffer),daseustreznoposodobijo.Posledice:Tavzorecjedobrareitevzaveinointerakcijmedobjektiobpraktinonielnistopnjiodvisnostimedobjekti,vendarjepotrebnaprevidnostpriuinkovitostiinporabispomina.esedogodkipojavljajovekratnasliico(frame)alipajeseznamopazovalcevdolg,lahkohitropridemososlabeuinkovitosti.Dostopdonepovezanihobjektovpajedodatnoenenaklonjendozapisavpredpomnilniku(cache).Problempridolgihseznamihlahkoreimotako,dasevsakopazovalecregistrirasamozadoloendogodekopazovanca(edenrecimozavsakgib,drugipalezaunienje).eimamonatisoeopazovancevinpravtakoopazovalcev,potemlahkozahtevapospominueskaliraprekorazumnihmeja,sajzavsakovozlievkazalnemseznamupotrebujemodvakazalca(nanaslednjevozlieinnaopazovalca...???).XNIprimer:Event*orientationChanged;(PriObserverjujetrebaedefiniratilinkedlistnadopazovancem(Subject),kipotemobdogodkuklieopazovalca(Observer)oz.njegovoupdate/notifymetodo.Toeimaimplementirano?Dogodekjeleodskonadeskazatadesignpattern.???)Vsamiigrisicerzaenkratenimamotega(implementationunderway;).PodobenprimerimamoobdogodkupositionChanged,kisesproivsaki,kosespremenivektorlokacijenaobjektu.TorecimoposluaABTdrevoinpopotrebipremakneobjektizenecelicevdrugo.
Kompozitum(Composite):Problem:Skupinoobjektovelimoobravnavatikotenobjekt.Reitev:Lahkonaredimonovobjekt,kijezbirkaobjektov(zdruiobjekte).Novobjektvsebujevsemetode,kijihvsebujenavadenobjekt(niobravnavankotposebenprimer).
(Leafjelespecifinakomponenta.)
[email protected],draftv09,PeterPeer++ 62
Uporabavigrah:Pogosto,naprimervmenijuimamogumbeznapisi,vsakegalahkopremikamopoekranu,lahkopajihpremikamokotskupino.Pritemomenimo,daimamorecimovmenijutuditekstovnepaneleinslike,kiskupajzgumbigradijouporabnikivmesnik(naComponentnazgornjisliki),vendarvtemprimerunetvorijokompozitumazgumbi.Kompozitumsevvelikimeriuporabljatudinadentitetamiigretervozliigrafascene.Posledice:Zavsemetodevdedovanemrazredu(slednjemorajobitivirtualne)moraronospisatikodoinnareditinovoimplementacijo,kiboiteriralaezvsezdrueneobjekte,nadkaterimibouveljavljalaizbranooperacijo.Primer:/** "Component" */ interface Graphic { //Prints the graphic. public void print(); } /** "Composite" */ class CompositeGraphic implements Graphic { //Collection of child graphics. private List mChildGraphics = new ArrayList(); //Prints the graphic. public void print() { for (Graphic graphic : mChildGraphics) { graphic.print(); } } //Adds the graphic to the composition. public void add(Graphic graphic) { mChildGraphics.add(graphic); } //Removes the graphic from the composition. public void remove(Graphic graphic) { mChildGraphics.remove(graphic); } } /** "Leaf" */ class Ellipse implements Graphic { //Prints the graphic. public void print() { System.out.println("Ellipse"); } } /** Client */ public class Program { public static void main(String[] args) { //Initialize four ellipses Ellipse ellipse1 = new Ellipse(); Ellipse ellipse2 = new Ellipse(); Ellipse ellipse3 = new Ellipse(); Ellipse ellipse4 = new Ellipse(); //Initialize three composite graphics CompositeGraphic graphic = new CompositeGraphic(); CompositeGraphic graphic1 = new CompositeGraphic(); CompositeGraphic graphic2 = new CompositeGraphic(); //Composes the graphics graphic1.add(ellipse1); graphic1.add(ellipse2); graphic1.add(ellipse3);
[email protected],draftv09,PeterPeer++ 63
graphic2.add(ellipse4); graphic.add(graphic1); graphic.add(graphic2); //Prints the complete graphic (four times the string "Ellipse"). graphic.print(); } } Dodatnipopularnivzorci:Uporabaspodajnatetihvzorcevnaelomanisplonoaplikativnanavsehpodrojih.Nekaterivzorcisotakoboljprimernizavijenivojekodeigrekotzapogone,nekaterisouporabnipriizraunihfizike,anepriUI.Dekorater(decorator):Omogoadodajanjenovefunkcionalnostiobstojeimobjektommedizvajanjemprograma(brez,dabispremenilidrugeobjekte).Primer:
Zanemoznavadnimoknom,kimuelimododatidrsnike.RazredWindownimatemonostizatolahkodedujemonovrazred(ScrollingWindow),kimudodamotofunkcionalnost.Drugamonostje,danaredimoScrollingWindowDecorator,kidodatofunkcionalnostobstojeimobjektomtipaWindow.Obereitvistavtemtrenutkuenakovredni.ebioknuelelidodatieobrobo,bimoralinareditidvanovapodrazreda,enega,kidedujeodWindowinenega,kidedujeodScrollingWindow.Zavsakofunkcionalnostsetaproblemeposlaba.epauporabimodekorator,samoustvarimoBorderedWindowDecoratorindekoriramoobstojeaoknazBorderedWindowDecoratoraliScrollingWindowDecorator,obemaskupajalinobenim.Fasada(facade):Zdruikompleksnomnoicovmesnikovzvelikoobjektiinfunkcijamivenenotnivmesnik.slika...???Primer[wikipedia10:Facade_pattern]:zagonraunalnika(nipotrebnovedeti,kakoseposameznakomponentazaene)./* Complex parts */ class CPU {
[email protected],draftv09,PeterPeer++ 64
public void freeze() { ... } public void jump(long position) { ... } public void execute() { ... } } class Memory { public void load(long position, byte[] data) { ... } } class HardDrive { public byte[] read(long lba, int size) { ... } } /* Facade */ class Computer { private CPU cpu; private Memory memory; private HardDrive hardDrive; public Computer() { this.cpu = new CPU(); this.memory = new Memory(); this.hardDrive = new HardDrive(); } public void startComputer() { cpu.freeze(); memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE)); cpu.jump(BOOT_ADDRESS); cpu.execute(); } } /* Client */ class You { public static void main(String[] args) { Computer facade = new Computer(); facade.startComputer(); } } Obiskovalec(visitor):Loialgoritem(operacijo)odmnoicepodatkov,kijihobdeluje.Takoomogoanoveoperacijenadmnoicoobjektov,brez,daspremenimoobstojeokodo(samonapiemonovegaobiskovalca).Vobiskovanihobjektihjepotrebenpovratenklicnaobiskovalca.Primer:
[email protected],draftv09,PeterPeer++ 65
class CarElementPrintVisitor implements CarElementVisitor { public void visit(Wheel wheel) { System.out.println("Visiting "+ wheel.getName() + " wheel"); } public void visit(Engine engine) { System.out.println("Visiting engine"); } public void visit(Body body) { System.out.println("Visiting body"); } public void visit(Car car) { System.out.println("Visiting car"); } } class CarElementDoVisitor implements CarElementVisitor { public void visit(Wheel wheel) { System.out.println("Kicking my "+ wheel.getName() + " wheel"); } public void visit(Engine engine) { System.out.println("Starting my engine"); } public void visit(Body body) { System.out.println("Moving my body"); } public void visit(Car car) { System.out.println("Starting my car"); } } public class VisitorDemo { static public void main(String[] args){ Car car = new Car(); car.accept(new CarElementPrintVisitor()); car.accept(new CarElementDoVisitor()); } }
T[email protected],draftv09,PeterPeer++ 66
Adapter:Omogoa,darazredi,kidrugaenemorejokomuniciratimedsabo,lahkokomunicirajo.Primer:
"Client"klie"methodA()"na"Adaptee",vendar"Adaptee"temetodenima,zatonaredimovmesnirazred"Adaptor",kiimametodo"methodA()",kijolahkoklie"Client"inznotrajtemetodepoklie"methodB()",kijoima"Adaptee".Lahkiobjekti(Flyweight):Omogoajodeljenjepomnilnikaprivejemtevilumanjihobjektov.Primer:Grafinapredstavitevrkevsakarkalahkovsebujepodatkeonjenihmerah,pisavi,barviitd.Vendarimajovsestavkubesedilaposameznerkepogostovsenateteparametreenake,zatojihlahkohranimosamoenkratnarko,zaposameznorkoizbesedilapahranimosamoenaprimerpozicijo.Ukaz(command):Vzorecenkapsulira(uinkovitopovzameinzapie)zahtevoalisproilo,kigalahkonatoshranimo,posredujemomedobjektiipd.Primer:...???Vzorciustvarjanja(creation...???):tovarnaobjektov,edinec.Vzorcistrukture(structure...???):kompozitum,adapter,dekorater,fasada,lahkiobjekti.Vzorciobnaanja(delovanja)(behaviour...???):ukaz,opazovalec,obiskovalec.3.Pravilaigre
splonapravilaigreo zaetnostanje
[email protected],draftv09,PeterPeer++ 67
o konnipogoji pravilaintegriranavobjekteigre
o razdelitevpravil,kiseneodvisnotiejodoloenihobjektovigre
Zaetnostanjeigre(initialstate)sevzpostaviobzagonuinstanceigre(npr.0tok,vsaivljenjaipd.).Iztegastanjase(obinterakcijiuporabnika)spomojopravilspreminjastanjeigre.Konnipogoji(endconditions)doloajostanjeigre,kipomenisprememboigralneganaina,doseencilj(alinezmonostdoseicilj),konecinstanceigrealiseanse[Bjrk05].Tipienprimerdoseenegakonnegapogojaje,koigralecizgubivsaivljenja.Pobratidoloenotevilozastavjekonnipogojigralneganaina,kjerigralcizbirajozastavenasprotnikov.Pravilaintegriramovobjektespomojoagregacije(glejarhitekturoobjektovigrezgoraj).Splonapravilaigre(gamerules)inpravilaobjektovigre(itemrules):Pravilaobjektovsenanaajonaposamezenobjektigre.Prinjihovemobravnavanjusesprehodimoezvseobjekteinzavsakegaposebejobravnavamopravila.Kodazaizvajanjepravilajelahkointegriranavobjektkotmetodakomponente.Simulatorvenemobhoduzankeizvedeiteracijoezvseobjekteigre.Navsakemobjektuseobdelajopravilaobjektov.Splonapravilaigresepreverjajoenkratnasimulacijskikorak(oziromaenkratzavsakostanjeigre).
PrimerobravnavanjapravilzaigroPong[Jan09?]:publicclassPongRules:Part{ intitemUpdateOrder; intglobalUpdateOrder; publicPongRules(intitemUpdateOrder,intglobalUpdateOrder){
[email protected],draftv09,PeterPeer++ 68
this.itemUpdateOrder=itemUpdateOrder; this.globalUpdateOrder=globalUpdateOrder; } publicoverridevoidInstall(Itemparent){ base.Install(parent); parent.As().RegisterUpdateItemMethod(itemUpdateOrder,ItemRules); parent.As().RegisterUpdateMethod(globalUpdateOrder,GlobalRules); } //ITEMRULES voidItemRules(floatdt,Itemitem){ //Ball Ballb=item.As(); if(b!=null){ Particlep=b.As(); if(Math.Abs(p.Position.X)>450){ intwinner=(int)(Math.Sign(p.Position.X)*0.5f+0.5f); Pong.Score[winner]++; b.Reset(); } } } //GLOBALRULES voidGlobalRules(floatdt){ if(Pong.Score[0]>9||Pong.Score[1]>9){ Pong.Score[0]=0; Pong.Score[1]=0; } }}...???razlaga4.ShranjevanjeShranjevanjeoziromaposnetektrenutnegastanjaigre.Glavnirazlogizauporaboshranjevanjaso:
omogoajoprekinitevigranjainkasnejenadaljevanje(tudiigriarjiimajoivljenjeizvenigre) zavarujejotrenutnostanjeigre(innapredovanjeigralca)predmorebitnimkasnejim
sesutjemigre omogoajopreigravanjerazlinihpotekovigrenatokah,kjerseigralcuponudive
alternativnihpoti/monosti.Izigralskegavidikaloimonaslednjenaineshranjevanja:
omejenoshranjevanje:konnoteviloshranjevanjalipaposebnelokacijeshranjevanja(npr.FinalFantasy)
kontrolnetoke(checkpoints):avtomatskoshranjevanjenakljunihtokahvokolju neomejeno:kjerkoli,kadarkoli,kolikokratkoli(npr.Civilization) samodejnoshranjevanje(autosave):periodinoalipokljunihdogodkih(primerjaj:
kontrolnetoke) vezanonaprofil:samodejnoshranjevanjevezanonaprofiligralca(npr.Diablo).
Neomejenoshranjevanjelahkospremeniteavnostigre.Prisamodejnemshranjevanjuinkontrolnihtokahjepomembno,daneshranimoigralcavslabemstanjuoziromabrezizhodnisituaciji.
[email protected],draftv09,PeterPeer++ 69
Predvsemprineomejenemshranjevanju(pristratekihigrah)lahkoigraleczlorabisistemshranjevanjatako,dashranjujeinnalagaigrodoklerrezultat,kijeodvisenodnakljuja,nivigralevokorist.Problemselahkoreizdeterministinemobnaanjuponalaganjuigrenpr.vsaki,konaloimoigroborezultatbojaenak(razen,enespremenimostrategije).Kakospravitistanjeigrevobliko,kijolahkoshranimonadisk?Potrebnojeshranititrenutnostanjeobjektovvzaporednoobliko(zaporedjebajtov),kijolahkozapiemonadiskserializacija.Najboljeje,davsakobjektsamposkrbizasvojoserializacijo.Takosevtrenutku,koelimoigroshraniti,samosprehodimoprekoobjektov,kijihelimoshranitiinpokliemonjihovemetodezaserializiranje(podamojimtudipodatkovnitok,kamorbodoshranilisvojestanje).Vrsteserializacije:
tekstovna binarnaserializacija xmlserializacija.
...???serializacija/deserializacijashranjevanje/nalaganjePrimerserializacijekamere:boolGameCamera::Write(IStream&stream)const{ //oetovskirazredposkrbizaserializacijopozicije,rotacije, boolbSuccess=GameEntity::Write(stream); //serializacijaosnovnihpodatkovnihtipov bSuccess&=WriteFloat(stream,m_FOV); bSuccess&=WriteFloat(stream,m_NearPlane); bSuccess&=WriteFloat(stream,m_FarPlane); //serializacijaobjekta bSuccess&=m_lens.Write(stream);}Osnovnepodatkovnetipeshranimoneposrednovpodatkovnihtok,naobjektihpasamokliemonjihovemetodezaserializacijo.Nataknainzapiemosamopodatkebrezmetapodatkov,karjehitro,vendarpavsakamanjaspremembavstrukturirazredalahkopovzroi,daseshranjeneigrenemorejovenaloiti.Zatolahkoimplementiramoepoasnejometodo,kishranipodatkevtekstovnioblikiinopremizmetapodatki.Problemkazalcev:Zaradidinaminegadodeljevanjapomnilnikakazalciobnaslednjemnalaganjuigrenebodokazalinapravepomnilnikelokacije.Teavolahkoreimo,dasenadrugeobjektesklicujemoprekonjihovihenolinihidentifikatorjev(UID...???).Lahkotudineposrednoshranimokazalce,vendarmorapotemtudivsakobjektshranitisvojnaslov.Prinalaganjuseobjektiponovnokreirajonanovihnaslovinustvarisetranslacijskatabela,kivsebujestarinnovnaslov.Kosovsiobjektinaloeni,sevsikazalcinaenkratpopravijo.Dodatniviri:[Chandy09]MarcinChady.TheoryandPracticeofGameObjectComponentArchitecture.GameDevelopersConferenceCanada.2009.
[email protected],draftv09,PeterPeer++ 70
[Gonzlez10]GonzlezSnchez,J.L.Jugabilidad.CaracterizacindelaExperienciadelJugadorenVideojuegos.PhDThesis(2010)[Wikipedia10]...???[de.wikipedia10]...???[wikipedia10]...???#2[wikipedia10:Facade_pattern]...???[Bjrk05]StaffanBjrk,JussiHolopainen.Patternsingamedesign,CengageLearning,2005.[Jan09?]MatejJan.TeajXNA,2009.Naloganavajah:
Delonaelementihigralnosti:Specializacijaobjektovigre,daseobnaajopopravilihigre,terpreverjanjepravilnanivojustopnjeinsejeigre(gameplaysession).Gledenaspisanapravilavkonceptuigralnostijepotrebnonaredit,dasevsedogajakotjepredvideno(razenUIelementovseveda):vpeljavakonnihpogojevigre,dodajanjeatributovigre(npr.rezultat,ivljenja).(Lestvicanajboljihinshranjevanjeboele,kopridemodomenijevpoUI.Enakoveljazanalaganjestopnjeizdatotek.)