Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
mochr
Založen: 13. 07. 2017 Příspěvky: 11
|
Zaslal: 25. červenec 2017, 06:50:04 Předmět: Herní principy - Simcity |
|
|
Ahoj,
jako občasného "programátora" mě zajímá, jak fungují principy v budovatelských hrách, typu simcity , možná i Age of empire. Myslím původní 2D (2,5D) verze. Jsou data ze hry uložena v databázi typu:
kód: |
ID | pozX | pozY | pozadi | elektřina | voda | zona | silnice | ...
1 | 12 | 12 | 5 | 1 | 0 | 3 | 0 |... |
s tím že:
ID, pozX,pozY je jasné - souřadnicový systém
pozadí - vykreslení obrázku ?
elektrina - jestli je v bunce zavedena elektrina 0 = false, 1 =true
voda - jestli je v bunce zavedena voda 0 = false, 1 =true
zona - 1 = prumyslova,2 = nakupni,3 = obytna
silnice - 0,1 (2,3,4,5) typy silnice
v rámci tréninku jsem zkusil udělat jednoduchý prográmek kde se generuje mapa, stromy a je možnost pokácet strom a postavit studnu. ukládání mám do txt souboru jako indexove pole + soubor s aktualní pozici a surovinama:
kód: |
10;10;10;10;12;12;12;11;11;11;12;11;11;11;11;
12;12;12;12;12;12;12;12;10;10;13;13;12;11;17;
10;10;12;12;12;12;12;12;12;12;12;12;12;12;17;
10;10;10;10;12;10;12;12;10;10;10;12;12;12;17;
10;10;10;10;10;10;10;10;10;10;10;12;12;12;12;
10;10;10;10;10;10;10;10;10;10;12;12;12;12;12;
|
stáhnout: http://mochr.cz/Debug.zip
pozor VB.net - nekomentujte prosím že je to nepoužitelný jazyk, mě vyhovuje a nehodlám se živit tvorbou her
pro tento účel by to asi stačilo, ale případě zmiňováneho Simcity jsem ztracen .
Je uvažovaný databázový systém správná cesta, nebo jsem úplně mimo? S herní tvorbou nemám zkušenosti, a spíš mě zajímá jak to vlastně funguje než abych to tvořil. s mým volným časem by to bylo na pár desetiletí...
Děkuji za reakce |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 25. červenec 2017, 10:03:23 Předmět: |
|
|
+- by to odpovidalo, akorat pozice se neuklada.
Budovy mas ulozeny v 2D poli a uz samotna souradnice do toho pole ti dava pozici budovy.
Pokud tam pak jsou jednotky, tak ty se obvykle ukladaj zvlast a maji u sebe pozici, protoze jednotky uz nepasujou do gridu, resp. by ten grid musel bejt tak velkej, ze uz by to zralo moc pameti. |
|
Návrat nahoru |
|
|
JC
Založen: 06. 10. 2007 Příspěvky: 137
|
Zaslal: 25. červenec 2017, 12:15:10 Předmět: |
|
|
Ale to by to 2D pole budov muselo mít stejné rozměry jako mapa/grid? To je docela zbytečné. Stejně jako u těch případných jednotek to je lepší mít v nějakém dynamickém seznamu a dílek mapy pak obsahuje pointer na daný objekt.
V případě, že by herní objekty byly komplikované a měly spoustu shodných parametrů, můžou se tyto parametry brát z databáze.
Pak by struktura, např. u domů mohla být zhruba taková:
Map[ x, y].PointerHouse -> ListHouse[ 0 .. n - 1].DB_ID -> DBListHouse[ DB_ID ]
Tj. dílek mapy odkazuje na objekt v dynamickém seznamu a dále tento objekt odkazuje na parametry v databázi. V tom dyn. seznamu jsou jen nezbytné proměnné pro herní logiku - např. zda je budova poškozená nebo silnice přecpaná, kolik má budova pater a kolik se do ní vejde lidí se bere z databáze.
Záleží samozřejmě na složitosti hry, co vše by se mělo simulovat a jak by to mělo být rozšiřitelné nebo modifikovatelné. SimCity 1 bude jednoduchá záležitost co se týče struktury a dost věcí tam je "napevno". |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 25. červenec 2017, 14:01:21 Předmět: |
|
|
JC: j, takhle to mám ve strategii teď, to bylo myšlený třeba pro to Simcity, kde pokud vím budovy už žádný další hodnoty ukládat nepotřebovaly. |
|
Návrat nahoru |
|
|
JC
Založen: 06. 10. 2007 Příspěvky: 137
|
Zaslal: 25. červenec 2017, 14:47:14 Předmět: |
|
|
@satik: chápu, ovšem je to takový zrádný, člověk začne s jednoduchou tilemapou, ale většinou to nikam moc nevede a z jednoduché struktury se stane peklo
Také to mám tak, políčko mapy obsahuje pointery na 4 hlavní druhy objektů a ty mají ještě další vrstvy. Celkem by mě zajímalo jestli to je např. v Dwarf Fortress udělané jinak, pokud má mapa více Z - vrstev (defaultně 50) a políčko může držet hromadů různých objektů, tak těch dat je už hodně. |
|
Návrat nahoru |
|
|
mochr
Založen: 13. 07. 2017 Příspěvky: 11
|
Zaslal: 26. červenec 2017, 08:28:19 Předmět: |
|
|
diky za odpovedi
aha, takže se na začátku vytvoří prázdné pole mapa(100,100), vygeneruje se zakladni teren. ( mapa(50,50)=trava )
pri stavbe domu se zmeni mapa(50,50) = dum1(dum2,dum3)
a ted abych mel v poli seznam domu: poledomu(0)=50,50,dum1(dum2,dum3),...
to je asi blbost se odkazovat hodnotama 50,50 zpet na mapu..
v minihre co je vprvnim prispevku to mam v jedom dvojrzmernym poli, s hodnotama od 10 do 99 s tim ze:
' 10 = voda
' 11 = pisek
' 12 = trava
' 13 = strom
' 14 = studna
' 15 = sekera
' 16 = parez
' 17 = ovocny_plny
' 18 = ovocny_prazdny
kdyz zasadim strom :
pole_stromy(0,0) = pozX
pole_stromy(0,1) = pozY
pole_stromy(0,2) = 10 (plodiny)
coz v pripadne vetsiho poctu objektu bude slusnej chaoz a moc prommenych. ukladam si index_pole_stromy jako pocet stromu, coz by slo udelat dynamickym polem nebo seznamem.
pointery slysim prvne, to uz je vyssi divci |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 26. červenec 2017, 09:09:51 Předmět: |
|
|
mochr napsal: |
diky za odpovedi
aha, takže se na začátku vytvoří prázdné pole mapa(100,100), vygeneruje se zakladni teren. ( mapa(50,50)=trava )
pri stavbe domu se zmeni mapa(50,50) = dum1(dum2,dum3) |
Teren klidne nech oddelenej od budovy.
Udelej si tridu pro policko mapy, ktera bude mit treba teren a id budovy, ktery bude odkazovat do seznamu budov (nebo bude -1, pokud tam zadna budova neni).
Kdyz zasadis strom, jen vytvoris do seznamu budov strom a jeho id ulozis na jeho pozici v tom dvourozmernym poli hernich policek.
mochr napsal: |
pointery slysim prvne, to uz je vyssi divci |
to nemusej bejt primo pointery, staci indexy do pole |
|
Návrat nahoru |
|
|
mochr
Založen: 13. 07. 2017 Příspěvky: 11
|
Zaslal: 21. srpen 2017, 13:06:08 Předmět: |
|
|
Tak mi to přece jen nedalo, a ve volných chvilkách zkouším vytvořit takove male minisimcity. prepracoval jsem system z prvni 2D verze do 2,5D , u cehos jsem se trochu zapotil,ale nakonec jsem to vyresil myslim ze dobre. navic funguje posun mapy, z cehoz mam fakt radost:).
zatim me funguje:
pridavani domecku-na zkousku vic druhu, nachystano pro vic obrazku
nemocnice, elektrarny - zatim bez funkce
kresleni silnic a krizovatek (UFF!) - tady jsem si pomohl jednoduchy dvojrozmernym polem s hodnotami 0,1 kde je cesta a kde ne a tim se zvolil obrazek silnice.
bourani -
oznacovani poli - ne uplne pekny ale jaks taks to funguje
pic upload
uvidime ja kto pujde dal, ale nejakou ideu mam, bude to zjednoduseny a zalozeny na 2D polich.
dalsi krok bude vytvorit elektrinu a vodovod s oznacenim dosahu - tusim jak na to
ale co vubec netusim jak na to,tak jak vytvorit auticka aby jezdili po cestach, samotne generovani cesty asi jo, pojede po hodnote 1 v poli array_road , ale nevim jak udelat pohyb, nyni cela hra bezi v timeru 100ms...,pridat dalsi timer a pohyb generovatv nem? no uvidime
odkaz ke stahnuti http://www.mochr.cz/debug1.zip kdyby se chtel nekdo podivat |
|
Návrat nahoru |
|
|
Peto
Založen: 01. 08. 2007 Příspěvky: 206 Bydliště: Košice
|
Zaslal: 21. srpen 2017, 19:16:17 Předmět: |
|
|
A ake auta tam chces, take co budu len vizualizovat preplnenost cesty ako to bolo napr v SimCity 2000 alebo chces normalne auto ktore pojde z policka A do policka B ako napr Transport Tycoon alebo novsie SimCity 3000 ?
Inak super dalsia strategia tak nech sa dari _________________ Code or die!
|
|
Návrat nahoru |
|
|
mochr
Založen: 13. 07. 2017 Příspěvky: 11
|
Zaslal: 23. srpen 2017, 13:46:54 Předmět: |
|
|
uplne bych se spokojil se systemem jako v simcity 2000, nahoda trasa, aby to trochu ozilo
do super strategie to ma hodne daleko, beru to spis jako trenink a uceni se
udelal jsem dalsi postup, zjednoduseni kodu na par mistech, a vytvorene podzemi s trubkama a hranici kam saha zavodneni - zatim jen graficky, ale pro dalsi pouziti by bylo vhodne to supnout taky do pole. je to vubec v poradku mit ve hre XX dvojrozmernych poli? zatim si vystacim s 5-6, ale kdyz si tak predstavuju co bych tam chtel udelat, tak 2D pole se me zda jako nejjednodusi napad. i kdyby melo byt s hodnotami 1,0, jako mam ted pro trubky a silnice.
asi neresitelny problem mam ale s vykreslovanim, pri tahnuti mysi a drzeni tlacitka se to pekne seka a nemuzu prijit na to cim to je. vykreslovani mam do pictureboxu. asi me nezbude nic jinyho nez to predelat nejspis do XNA, pro ktery je i par navodu pro VB.net.
objevil jsem hru factorio a naprosto nechapu jak se muze naraz hybat tolik veci
soubory: http://www.mochr.cz/Debug3.zip |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 23. srpen 2017, 14:45:02 Předmět: |
|
|
To pole bys mel mit jedno a v nem tridu policko, na kterym bude teren, treba ta postavena budova, stav zavodneni, hustota dopravy apod.
XNA je mrtve, budto vem Monogame (nastupce XNA) nebo SharpDX, ten ve sve strategii pouzivam ja, viz vlakno http://www.ceske-hry.cz/forum/viewtopic.php?t=5172 |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 24. srpen 2017, 07:12:17 Předmět: |
|
|
Factorio je uzasna hra ktora je dokonca ceska. Treba si precitat na ich strankach FFF kde casto opisuju optimalizacie ktore robia. Zakladom je ale ze robia update iba tych entit ktore treba a nie vsetky kazdy tick. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
Peto
Založen: 01. 08. 2007 Příspěvky: 206 Bydliště: Košice
|
Zaslal: 25. srpen 2017, 13:53:33 Předmět: |
|
|
Na Visual Basicu (pixture boxy a timery) som zacinal aj ja, je to fakt dobry jazyk na ucenie sa programovat hry - odporucam kazdemu. Na druhej strane je to fakt špatny jazyk pre hry (ako ked sa bavime robit hry s picture boxami a timermy), ked chces robit serioznejsie hry tak radsej prejst na nieco ine az budes citit ze uz si pripraveny.. Ja som presiel na Revolution3D co je uz nejaky mrtvy 3D engine pre Visual Basic. Pre teba by to co spominal nou by mohlo byt fajn _________________ Code or die!
|
|
Návrat nahoru |
|
|
mochr
Založen: 13. 07. 2017 Příspěvky: 11
|
Zaslal: 25. srpen 2017, 22:21:37 Předmět: |
|
|
Díky. Zkusil sem nahodit monogame ale nějak se mě nezadarilo jej rozjet. Zvolil sem tedy mrtvý XNA ????. Je pro něj stále docela dost návodu a některé i v češtině. Většina sice pro C#, ale to už si dokážu přepsat do VB, většinou teda????.
No musím říct že od pictureboxu a buttonu a timeru je to pěkné skok. . Musí se řešit spoustu věcí navíc a toho programování a podmínek je o hodně víc a přibývají věci o kterých zatím nemám tušení jak vlastně udelat????. Zatím mám nějaké kusy kódu prekopirovane do nového XNA projektu, a funguje mě stavení silnic s křižovatkách, stavení domečku a bourání. Programování je tam fakt hodně, a začínám se v tom trošku ztrácet narodil od čistého VB. A jako bonus sem si nakreslil svoje tlačítka v pěkným retro stylu. Uvidíme jak to půjde dál a jak moc mě to bude bavit. Zatím to beru jako malou výzvu a trénink programovani(nejsem programátor, jen pár základu že školy ve VB net před pár lety a pokusy s arduina a PHP). |
|
Návrat nahoru |
|
|
Mnemonic
Založen: 28. 07. 2007 Příspěvky: 93
|
Zaslal: 26. srpen 2017, 11:51:28 Předmět: |
|
|
Mrtvého XNA se neboj, kód napsanej pro XNA by měl být později 1:1 přenositelnej do Monogame (teoreticky; prakticky tam nějaké drobné rozdíly být samozřejmě můžou). Ale proti pictureboxu je to určitě krok správným směrem, protože to je bližší "opravdovému" hernímu programování. Jen to jen věc zvyku. |
|
Návrat nahoru |
|
|
|