• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

2D adventúra

Started by Agamemnon, 11.07.2008, 03:36:52

« predchdzajce - alie »

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...
All code is crap.

42

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:
Pičoch jest veľo, ale nalivačoch malo!

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
brix will be shat

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.. :))
80% mozgu človeka tvorí kvapalina, v mojom prípade brzdová..

CHCEM S5 :zuzka: STARY IS :zuzka: !!!!
http://www.tu-ke.com/forum/o-nicom/otvoreny-list-vedeniu-firmy-dupress-(dodavatel-mais)/

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
tuna mam prava aj ja takze nic take nehrozi
sudo [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Alive!"

Agamemnon

také veci ako vzájomná komunikácia, to sa nejak vyvynie, hehe :) nejak sa to bude musieť poriešiť... ten multichat cez jabber sa mi páči asi najviac... pokec je zase najvariabilnejší - dostupný z akéhokoľvek miesta, stroja, aj z takého, kde sa nedá prihlásiť na jabber/irc

námet, dej, prostredie, obrázky objektov, scén a podobne:
ak má niekto záujem, tak nech navrhne a urobí niečo krátke na testovanie - bude treba kód na niečom skúšať - formát obrázkov, veľkosť, typ a pod. sa dorieši postupne... ono, aj grafik sa bude hodiť :)
plus tu patria aj také veci ako rozlíšenie obrazovky :) lebo od toho sa budú odvíjať veľkosti obrázkov a pod :)

apokalyps: toto robím práve preto, aby sa ľudia (a aj ja) naučili ďalšie veci :) hovorím, ako základ stačí vedieť tie veci, čo boli na OP v tomto roku - hlavne teda objekt, trieda, interface, dedenie, čo sa s tým dá robiť a také podobné základné veci...
eventy a delegáty sú výhodou, lebo celý SceneManager bude na tom postavený, keďže ide o interakciu s hráčom, a ten bude vyvolávať eventy - kliknutie a pod...

All code is crap.

42

Agamemnon

to credits - to mi vnuklo ďalšiu vec, čo treba urobiť:
stavový stroj, ktorý bude ovládať stavy hry, tj:
- hra je v menu - jednotlivé časti menu asi ako samostatné podstavy, uvidí sa, premyslí sa :)
- hra "je v" hre
- hra je v ingame menu
- hra je v credits

a teraz, čo sa dá robiť, ak je hra v danom stave - napr. ak je v menu, tak sa nebude vykresľovať scéna, ale namiesto toho sa vykreslia položky menu... ak je zase v credits, tak sa vykreslia kredity a bude sa reagovať na akýkoľvek kláves tak, že sa preskočí do menu... a tak pod.

asi sa bude hodiť ku tomu nakresliť nejaký diagram, hehe :)
All code is crap.

42

kamelot

existuje aj free engine pre adventury http://dead-code.org/home/index.php/about/
ale pouziva vlastny skriptovaci jazyk (vraj podobny C#, Jave)

while (2*2 == 5) { echo "If you're reading this, something is definitely wrong"; }

Agamemnon

exisuje :) free engineov je pomerne dosť... na rôzne veci

ale mne ide viac o kódenie :) cieľom je niečo sa naučiť :)
All code is crap.

42

kamelot

nj doslo mi z tvojich postov... link na engine som hodil skor pre info, ze aj take existuje :)

while (2*2 == 5) { echo "If you're reading this, something is definitely wrong"; }

TradeMark

Ja som si az teraz vsimol tu pasaz o VS2008. Ja s tym budem mat mensi problem (pohlad na avatar napovie).
Pičoch jest veľo, ale nalivačoch malo!

Agamemnon

nemusí byť VS :) ja som len písal, že v prípade, že budú rôzne IDE, tak nebude môcť byť spoločný projekt...
v takom prípade sa urobí adresár s kódmi a adresár s projektom - a kódy budú do projektu len zalinkované, nie priamo vložené... a tak je možné mať rôzne projekty ku 1 kódu bez problémov... len sa každý bude musieť manuálne starať o projekt...

btw - monodevelop dokáže minimálne čítať projekty z VS, afaik
All code is crap.

42

JCube

dokaze...a dokaze v obmedzenej miere spustat aj nejake windowsacke zalezitosti
sudo [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Alive!"

Agamemnon

tomu sa pokúsim vyhnúť práve :) aby to bolo, čo najviac nezávislé... takže to znamená, že sa použije openGL a nie directx :) zvyšné veci by mali byť v pohode
All code is crap.

42

kamelot

Quote from: TradeMark on  12.07.2008, 06:55:28
Ja som si az teraz vsimol tu pasaz o VS2008. Ja s tym budem mat mensi problem (pohlad na avatar napovie).

tak si skus nahodit virtual windows do linuxu :)

while (2*2 == 5) { echo "If you're reading this, something is definitely wrong"; }

Mao

No tak mne je v podstate jedno ci budem robit jadro alebo grafiku. Sice s grafikou,ak neratam windows forms, nemam velmi skusenosti (citaj ziadne :D ), ale mam rad nove veci a vyzvy  :D .
Ad VS 2008 - bolo by lepsie mat rovnake prostredie, ale ked sa inak neda tak sa nezastrelim :).
Ad pribeh - mozme pouzit moj z OOP  :h_azn:
Ad navrh -* momentalne nemam ziadne pripomienky, je sobota vecer, a ja mam vtedy zakazane rozmyslat  :emot-LMAO: , radsej az zajtra  :)

Agamemnon

oka, takže ďalšie kroky:
- zajtra, alebo možno už dnes, uvidím, nahodím projekt na nejaký code hosting - najskôr asi na www.assembla.com - hlavne pôjde o svn repozitár a potom o issue tracking system - v tomto prípade to bude trac + nejaký zápisnik na spôsob wiki asi
- bolo by vhodné sa dohodnúť, oi., na coding conventions
- plus by som rád vedel, či ste niekedy používali nejaký revision control system (najskôr cvs alebo svn) a či ste používali nejaký issue/bug tracking system (napr. trac, flyspray) - alebo či mám sem hodiť stručný výklad o čom to je...

ad coding convention: môj návrh:
- odsadenie o 4 znaky - namiesto tabulátorov používať medzery
- názvy metód, tried a pod. začínajú veľkým písmenom - každé slovo v názve začína veľkým písmenom: MethodName
- názvy premenných - prvé písmeno malé, každé ďalšie slovo začína veľkým písmenom: fieldName
- názvy konštánt - kompletne veľkými písmenami
- názvy budú mať zmysel - názvy a, aa, aaa nie sú povolené
- používanie zátvoriek je voliteľné - tj. otváracia zložená môže byť na novom riadku, alebo aj na aktuálnom riadku: komu čo viac vyhovuje:

if (...) {
...
}

if (...)
{
...
}

- komentáre metód, tried a pod. musia byť - komentovanie v štýle c# xml - automaticky tieto komentáre generuje ako VS, tak  aj monodevelop (po napísaní /// obe IDE doplnia formu komentáru, kóder už len dopíše popis metódy, parametrov a pod.)

+
dôležité:
dohoda o jazyku:
- názvov metód, premenných a pod.
- komentárov

možnosti na výber sú angličtina a slovenčina - pre názvy metód, premenných a pod. jednoznačne odporúčam a navrhujem angličtinu... pre komentáre si vyberte vy, mne je to jedno
All code is crap.

42

TradeMark

Problem vyrieseny, VS2008 dostupne  :thumbsup:
Pičoch jest veľo, ale nalivačoch malo!

Mao

Super  :thumbsup:

Ohladom jazyka som za anglictinu.Hlavne co sa tyka nazvov metod premennych atd. Pri komentaroch moze byt aj SJ ak ma niekto problem s AJ.
K formatovaniu kodu ja navrhujem pozuvat defaultne formatovanie Visual studia, teda otvaracia zlozena na novom riadku, resp. pouzivat autoformat ctrl+E,F :)
Agameemnon: aka je vyhoda pouzivat 4 medzery oproti tabulatoru ? :)

JCube

neviem ci ine IDE s tym nemaju problem...
sudo [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Alive!"

Agamemnon

všade to vyzerá rovnako :)

inak nvm veľmi... ale zatiaľ som sa v podstate stretol s tým, že to používa každý - či už v škole, čo robím na projekte, a aj v robote sa používa nastavenie medzier namiesto tabulátorov... hmm, ale v podstate som nikdy nezisťoval prečo vlastne používajú medzery
All code is crap.

42

Agamemnon

hm, teraz ma napadlo... ak sa použijú medzery, tak stĺpec 10 bude na tom istom mieste v každom riadku... ak sa použijú tabulátory, tak to tak nemusí byť - nebdue
All code is crap.

42

TradeMark

#22
Davam hlas anglictine. A inac agamemnon mozes daco spomenut o svn-ku (cvs-ku) lebo ja som sa so subversionom stretol iba ako dependencie k nejakemu softu takze nemam dajaku extra predstavu jak sa to pouziva. Ale idem aj studovat Wiki  :bananawrite:

EDIT: Do dabla tak predsa len to nebude VS2008 ale MonoDevelop. Vcera vecer som formatol a nahodil Win XP (akoze aspon na leto nech nevidim konzolu) a dneska rano to naslo aktualizaciu SP3 tak som ju dal instalovat. Z nejakych neznamych pricin skolaboval Explorer.EXE takze som sa vratil spät k my precious.

Taze kebyze sa dala ta grafika riesit v OpenGL ta by bola parada  :h_azn:
Pičoch jest veľo, ale nalivačoch malo!

Agamemnon

oka, názvy a aj komentáre budú v en... :)


svn:
slúži to na manažment kódu

vytvorí sa repozitár s kódom, kde je uložený kód projektu - je to umiestnené na nejakom serveri, a tak ku nemu majú prístup všetci členovia tímu...

ak niekto ide niečo kódiť, tak si aktualizuje prv svoj lokálny kód (svn update), potom niečo nakódi a potom sa to pošle na server, aby ku zmenám mali prístup aj ostatní členovia tímu (svn commit)...

svn server navyše udržuje jednotlivé zmeny, takže sa dá v prípade potreby vyvolať akýkoľvek minulý kód - napr. ak sú potrebné nejaké veci, čo už boli zmenené a pod...
All code is crap.

42

Agamemnon

Quote from: TradeMark on  13.07.2008, 19:00:42

Taze kebyze sa dala ta grafika riesit v OpenGL ta by bola parada  :h_azn:


bude v openGL...

btw, ku tomu treba knižnicu csgl.dll - je to projekt opengl pre c#... najskôr to hodím asi do repozitára ku zvyšku kódu, nech s tým nie sú problémy...

ešte jedna vec - nejaké logovanie - mám napísanú jednu triedu na to, môže sa to použiť, a imo to bude stačiť na tie maličkosti, čo sa nám budú hodiť... prípadne sa môže stiahnuť nejaký hotový logger pre c# a ten sa použiť... len tam treba potom dať pozor na licencie...
All code is crap.

42