FEI archív 2007/2008 > 2. ro?ník
2D adventúra
Agamemnon:
Keďže prázdniny pomaly začínajú aj oficiálne, tak nadišiel čas rozbehnúť, čo som navrhol niekedy počas skúškového :)
Napíšem prv nejaké svoje predstavy, návrhy a pod., potom očakávam diskusiu, hlavne teda tých, čo sa chcú zúčastniť samotného projektu - tj. Mao, TradeMark a Apokalyps - ak sa chce pridať niekto ďalší, tak je vítaný, ale by som chcel upozorniť, že toto je malý projekt a miesto pre 10 kóderov tam určite nie je (to len pre prípad veľkého záujmu, hehe) :)
Je toho pomerne dosť, čo chcem napísať, tak sa to pokúsim nejak logicky rozdeliť a pokúsim sa to písať čo najzrozumiteľnejšie.
Základné informácie:
Začal by som popisom toho, o čo vlastne ide.
Moja predstava je taká, že sa napíše 2D adventúra z prvého pohľadu (dôvod je ten, že nie je potrebné kódiť postavičku a jej správanie - toto je možné potom neskôr tiež doplniť, ak by bol záujem).
Technické informácie:
Jazyk, grafické rozhranie: C# + OpenGL/DirectX
- dohodne sa, ktoré grafické rozhranie sa použije - nie je veľmi podstatné momentálne - avšak v spolupráci s C# je DirectX lepšou voľbou, avšak menej prenositeľnou)
- takisto si uvedomujem, že C# nie je práve najrýchlejší jazyk, ale na vykresľovanie adventúry stačiť v pohode bude; ak by sme robili FPS, tak samozrejme je nevhodný)
Keďže projekt je tímový, nutné je použitie systému pre revision control (použije sa SVN [@ wiki] - obľúbený tool pre win: TortoiseSVN) a takisto vhodné bude použiť nejaký issue tracking system [@ wiki].
Samotná hra:
Bude potrebné urobiť nejakú logiku pre:
- inventár
- objekty
- miestnosti
- akcie (tj. kliknutie na nejaký objekt, použitie objektu)
- grafický výstup
Inventár a miestnosti:
Logicky, musia obsahovať zoznam objektov sa v nich nachádzajúcich. Navyše musí byť možné tieto objekty použiť (či už vykonajú nejakú akciu, alebo sa stanú "vybranými", aktivovanými).
Navyše bude treba zabezpečiť ich vykreslenia a aj správne vykreslenie objektov, ktoré sa nachádzajú v nich.
Objekty a ich akcie
Toto je snáď najdôležitejšia vec :) Vykonávanie akcií po kliknutí na objekt. Je veľké množstvo možností, čo sa môže stať, ale je jasne definované, čo má ten-ktorý objekt v danej situácií vykonať. Preto je potrebné toto urobiť tak, aby bolo možné rovnakým spôsobom popísať čo najviac akcií.
Plus ku akciám: navrhujem nepoužívať rôzne stavy jedného objektu, ale namiesto toho vytvoriť rôzne objekty pre rôzny stav: napr. vypnutá a zapnutá lampa - nebude 1 objekt, ktorý bude mať flag "zapnutý", ale budú to 2 objekty, ktoré sa vymenia pri zapnutí lampy (dôvod je ten, že tých stavov môže byť obrovské množstvo a výsledkom bude neprehľadný kód, kde v týchto stavoch sa budeme strácať)
Rôzne príklady na akcie:
- vezmi objekt do inventára - objekt je v miesnosti, hráč na neho klikne a objekt sa vezme
- použi objekt - objekt sa použije - napr. hráč stalčí vypínač a rozsvieti sa lampa
- skombinuj nejaké objekty - toto sú v podstate 2 kroky: v prvom sa objekt aktivizuje (tj. vyberie sa) a v druhom sa tento vybraný objekt použije na iný objekt a to ich skombinuje (napr. zápalka sa skombinuje so zápalkovou krabičkou a výsledkom bude horiaca zapálka)
- etc. :) je toho viac, priebežne počas kódenia, návrhu deja a pod. sa určite objavia ďalšie :)
Môj návrh:
Vytvorí sa rozhranie, ktorého úlohou bude vykonať akciu, ktorá bude definovaná objektom triedy, ktorá rozhranie implementuje. Tieto jednotlivé akcie budú elementárne a výsledné správanie objektu sa môže zložiť z viacerých elementárnych akcií.
Plus je ku každej elementárnej akcií potrebné mať nejaké podmienky pre vykonanie akcie - tj. napr. ak chceme vziať objekt z miesnosti, tak ten objekt tam musí byť - toto navrhujem urobiť podobne - opäť rozhranie, ktoré bude kontrolovať podmienky a každá akcia bude mať sadu objektov, ktoré budú rozhranie implementovať, uložené napr. v ArrayListe.
pr.: Chceme objekt použiť - napr. to spomínané zapnutie lampy: to sa bude skladať z 3 elementárnych akcií: odstránenie vypnutej lampy z miestnosti a pridanie zapnutej lampy do miesntnosti:
- pred prvou akciou sa, napr., otestuje, či sa lampa nachádza v miestnosti - ak áno, tak sa objekt zo zoznamu objektov v miestnosti vyhodí
- druhá akcia pridá zapnutú lampu do zoznamu objektov v miestnosti
- tretia akcia si vynúti prekreslenie scény :)
=> tieto kroky budú na hráča pôsobiť dojmom, že došlo ku zapnutiu lampy
(navyše je to veľmi jednoduché nakódiť a kód je prehľadný + je možné použiť rovnaký postup na všetky akcie)
Grafika:
A teraz hlavná časť :) Síce C# ani zďaleka nie je najrýchlejší jazyk, ale to pre adventúru nie je podstatné. Na to, čo budeme potrebovať, je to dostatočné.
Navrhujem to takto:
- bude existovať objekt SceneManager, ktorý sa bude starať o celú scénu - o vykresľovanie, ale aj o spracovanie eventov - hlavne ide o mouseover event a click event
- vykresliteľná scéna bude implementovať rozhranie IScene (názov nie je dôležitý momentálne) - to poskytne SceneManagerovi zoznam objektov, ktoré sa v scéne nachádzajú + nejaké základné info o scéne, napr. obrázok pozadia
- všetky objekty, ktoré sa budú vykresľovať, budú implementovať rozhranie IDrawable, ktoré poskytne SceneManagerovi všetky potrebné informácie na vykreslenie - pozíciu a meno súboru, ktorý bude obsahovať obrázok objektu - samotné načítanie obrázku zabezpečí SceneManager pri vytváraní scény (napr. pri zmene lokácie)
- objekty, na ktoré sa bude dať kliknúť, budú implementovať rozhranie IClickable - takisto toto rozhranie poskytne SceneManageru základné údaje - klikateľná oblasť, metóda, ktorá spracuje kliknutie atď.
- obdobne je možné poskytnúť údaje ku animácií, prehrávaniu zvukov a pod.
Ďalšie veci:
- hra bude singleton
- potrebné urobiť Save/Load - vymyslieť tak, aby ukladal pozíciu čo najefektívnejšie
Prípadné rozšírenia:
Ak by bol záujem a chuť, tak je možné rozšíriť projekt o ďalšie veci:
- zvuk
- postavička (tj. zmena z 1st person na 3rd person)
- NPC postavy, rozhovory s nimi
- plynutie času
Toť je nateraz všetko - bol by som rád, keby sa rozdelili úlohy, a postupne sa začalo robiť...
PS: bol by som rád, ak by sa použilo VS2008 - nie je nutné - ide hlavne o to, aby mali všetci rovnaké projekty - ak sa použijú rôzne verzie VS, tak bude potrebné vytvoriť projekty ku každému VS, a súbory so zdrojovými kódmi len prelinkovať
PS2: ak niekto vyslovene nechce robiť grafiku, tak to by som si rád zobral ja na starosti...
Btw, prečítal som to po sebe len dosť zbežne, takže to môže obsahovať nezmyselné vety :) + písal som to s odstupom niekoľkých dní - po častiach - takže to môže pôsobiť trochu nekonzistentne...
Čakám akékoľvek vaše pripomienky, návrhy... čokoľvek :)
Plus vyberte si, čo chcete robiť - samozrejme sa to dá pomeniť, podohadovať postupne - a určite sa to bude dynamicky všetko meniť, podľa toho, ako sa to bude vyvíjať, ako bude pokračovať kódenie...
TradeMark:
No akurat som to docital a celkom by som mal zaujem o tu cast s inventarom a miestnostami - t.j. mapa, inventar, fazy vyberu, ulozenia objektu + co som chcel urobit aj na mojom zadani ale nezvysil cast tak to by bolo to NPC a rozhovor.
Bolo by vsak dobre si ujasnit aj take veci ako namet, dej, prostredie. Ale inac supa :bananadance:
Ing. nemtom:
a ja vam poradim, spravte si irc kanal alebo miestnost na pokeci lebo tento topic ked zbada kosti s evicou mate ppc, a hlasim sa ako betatester nech mam meno v credits :D
ApokalypS:
ak nejake credits bude.. ale testujem aj ja rad..
aj ked rad by som sa na tom podielal aj inak.. ale kedze citam, co vsetko treba vediet.. :((
no nic.. hadam cez prazdniny daco doucim..
a k tomu irc.. odporucam multi user chat na jabberovi.. :))
JCube:
--- Quote from: Bc. nemtom on 11.07.2008, 07:46:17 ---a ja vam poradim, spravte si irc kanal alebo miestnost na pokeci lebo tento topic ked zbada kosti s evicou mate ppc, a hlasim sa ako betatester nech mam meno v credits :D
--- End quote ---
tuna mam prava aj ja takze nic take nehrozi
Navigácia
[0] Index správ
[#] Ďalšia strana
Go to full version