.[ ČeskéHry.cz ].
Návrh architektury programu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Lorin



Založen: 18. 07. 2012
Příspěvky: 16

PříspěvekZaslal: 31. březen 2013, 17:27:18    Předmět: Návrh architektury programu Odpovědět s citátem

Dobré odpoledne. Momentálně dělám na jednoduché RPG hře. S návrhem hry jako takové by problém nebyl. Nápadů (byť třeba šílených) by bylo dost Smile. Problém mám s vytvořením struktury aplikace. Jde mi o to, že některé třídy mají mít možnost přistupovat k jiným třídám. Například třída okna by měla být veřejně dostupná, aby do ní bylo možné vykreslovat.

Na netu jsem našel několik možností, jak vyřešit globální viditelnost. Popravdě nevím, který z nich mám vybrat. Každý má vlastní plusy a mínusy. Rád bych od vás slyšel, jak podobný problém řešíte. Jestli některou z popsaných metod, nebo nějakým vlastním "super řešením".
1) Použití globálních proměnných. Jednak nejde o doporučovaný postup a ani mě se příliš nelíbí.

2) Předávání potřebné třídy jako parametr. Mnohem lepší možnost než ta první. Bohužel se mi nelíbí nutnost předávání třeba tří, čtyř tříd plus dalších parametrů.

3) Vytvoření jedné třídy, která obsahuje další dílčí. V podstatě jde o stejný postup jako v druhém případě, jen není nutné předávat tolik tříd. Stačí předat jednu.

Jako příklad můžu uvést třeba třídu okna a správce událostí. Pokud správce událostí zaznamená ukončení aplikace, mělo by se zavřít okno.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 31. březen 2013, 19:30:49    Předmět: Re: Návrh architektury programu Odpovědět s citátem

Zkus signály.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jakub Doucek



Založen: 08. 12. 2011
Příspěvky: 14
Bydliště: Pardubice

PříspěvekZaslal: 31. březen 2013, 19:41:09    Předmět: Odpovědět s citátem

Na tvou otázku asi neexistuje tak konkrétní odpověď jak by sis představoval. Na konkrétní problémy je třeba hledat konkrétní řešení. Být tebou prostudoval bych si základy OOP, určitě se podívej alespoň na základní návrhové vzory a dobrá věc je určitě podívat se na nějaké již hotové herní enginy. Existuje i pár celkem dobrých knížek přímo o tvorbě herního enginu.

Pokud ti jde ovšem spíš vymýšlení her, než jejich programování a baví tě to, tak bych se věnoval tomu. Než budeš schopen naprogramovat "od nuly" hru, kterou by sis přál, tak to bez nadsázky může trvat i několik let. Buď bych doporučil použít nějaký již hotový engine a nebo i něco ve stylu GameMaker či Construct.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lorin



Založen: 18. 07. 2012
Příspěvky: 16

PříspěvekZaslal: 31. březen 2013, 20:10:22    Předmět: Odpovědět s citátem

citace:
Existuje i pár celkem dobrých knížek přímo o tvorbě herního enginu.

Mohl byste prosím uvést nějaké příklady?

citace:
Pokud ti jde ovšem spíš vymýšlení her, než jejich programování a baví tě to, tak bych se věnoval tomu.

Baví mě jak vymýšlení, tak programování. MMF, Game Maker a RPG Maker jsem zkoušel. Vždy mi přišlo, že jsem neměl dostatečně "volnou ruku". Proto jsem se rozhodl, že si naprogramuju hru od nuly. Miluju ten pocit, když něco napíšu a ono to funguje jak má. Obzvlášť když mi to trvá nějaký čas ladění. Smile

citace:
dobrá věc je určitě podívat se na nějaké již hotové herní enginy

To jsem zkoušel, bohužel jsem neměl štěstí na nějaký rozumně velký engine. U těch velkých je trochu problém vysledovat, co s čím a jak souvisí.

citace:
Zkus signály.

Jde o nějakou "obrzličku" nebo je to toto?

Zkusím uvést hlavní problém, který teď řeším. Mám několik tříd - Window, Audio, GameState a Settings. Window ovládá okno, Audio přehrává hudbu a zvuky, GameState spravuje jednotlivé herní části hry a Settings je třída obsluhující čtení a zápis do konfiguračních souborů.

Napadlo mě vytvořit třídu, která by obsahovala ukazatel na jedináčky dříve popsaných tříd.
Jednotlivé ukazatele bych dal jako public, takže by se k nim přistupovalo pomocí HlavniTrida->window->nějakámetoda().

Na druhou stranu si říkám, že jde asi o špatný návrh. Rozhodně se kouknu po nějakých knížkách nebo tutoriálech popisujících návrh aplikační architektury.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 31. březen 2013, 20:50:18    Předmět: Odpovědět s citátem

me se osvedcilo nevytvaret zadne stavove tridy (kod hry mam temer jen c bez ++) a delat jen naproste minimum funkci se sideefekty. Data prakticky vzdy transformovat do nove podoby a nemenit je inplace (tj. temer vsechny data jsou immutable). Ve vysledku to znamena ze na hru se divam jako na inkrementalni vyrobu dat kdy se stara data transformuji do novych.

Naposledy upravil quas4 dne 31. březen 2013, 23:22:05, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 31. březen 2013, 23:19:13    Předmět: Odpovědět s citátem

to co si postol su POSIX signaly. to je nieco ine. on myslel nieco taketo http://www.ceske-hry.cz/forum/viewtopic.php?t=3638
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Jakub Doucek



Založen: 08. 12. 2011
Příspěvky: 14
Bydliště: Pardubice

PříspěvekZaslal: 1. duben 2013, 18:39:29    Předmět: Odpovědět s citátem

Lorin napsal:
citace:
Existuje i pár celkem dobrých knížek přímo o tvorbě herního enginu.

Mohl byste prosím uvést nějaké příklady?


http://www.amazon.com/Game-Engine-Architecture-Engineering-Applications/dp/012229064X - Není špatné

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135 -Tato mi přijde vesměs sqěláSmile Určitě doporučuji přečíst.

citace:

citace:
dobrá věc je určitě podívat se na nějaké již hotové herní enginy

To jsem zkoušel, bohužel jsem neměl štěstí na nějaký rozumně velký engine. U těch velkých je trochu problém vysledovat, co s čím a jak souvisí.


Tento by možná stál za shlídnutí pokud neznáš:
http://code.google.com/p/angel-engine/


Problém, který řešíš je například v XNA řešen tak, že se všude předává odkaz na Game, což je jakási hlavní třída zastřešující vše.
Já osobně používám ve svém enginu Entity/component architekturu a třídu Game předávám entitám ale jednotlivé komponenty už si z ní vytáhnou jen co potřebují.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna