Avatar
Iwitrag
Člen
Avatar
Iwitrag:

Ahoj všem developerům (a developerkám of course :D ) !

Ještě než položím dotaz, napíšu sem, co vše ovládám:

  • Základní syntax Javy
  • Základy OOP
  • Práce se soubory + výjimky
  • Základy práce s knihovnou SWING (formuláře ne - spíš přímo kreslení na JPanel) - spolu s Alarmy, událostmi a vším, co k tomu patří, na vytvoření jednoduché hry
  • GameMaker

Co se týče Javy, postupoval jsem podle zdejších SKVĚLÝCH tutoriálů v sekci Java.
GameMaker (a jeho jazyk GML) ovládám už z dřívejška (5 let jsem v něm dělal, ale narazil jsem na strop jeho možností (i v novém GM:S) a hlavně - přecházím k Javě protože se chci učit něco, co bude mít pro mě větší význam).

Teď jsem se rozhodl, že si znalosti zocelím tím, že si od základů vytvořím svou jednoduchou hru.

O co půjde: Hráč bude hrát za myšku, bude ji ovládat pomoci šipek / WSAD (půjde oboji), pohled shora, 2D.
Cílem hráče bude dostat se skrz levely až k sýru, který hráče pošle do další úrovně.

Každý level bude obsahovat:

  • Hráče na různé startovní pozici (liší se level od levelu)
  • Mnoho stěn (přes které nejde projít)
  • Právě jeden sýr

Bude to spíš taková bludišťovka a cílem bude najít cíl. Časem budu hru dále rozšiřovat (spolu s mými znalostmi).

A proč tohle vše píšu? Chci se Vás, zkušenějších, zeptat, jak bych měl do tohoto projektu vestavět levely. Konkrétně mě zajímá, jak to přímo v Javě napsat.
Přemýšlel jsem o tom, že bude existovat např. ArrayList, ve kterém budou zapsány všechny stěny pro danou úroveň (takže každá úroveň bude mít svůj ArrayList se stěnami). Dále budou existovat 2 pole, v jednom budou startovní pozice hráče (resp. hráč jako objekt) a v druhém bude pozice cíle (resp. sýr jako objekt). Takže obě pole budou stačit pro celou hru.

Levely (ArrayListy a Arraye) budou načítány skrz externí soubory (zašifrované skrz Caesarovu šifru s daným klíčem) a budou v nich zapsány pozice pro jednotlivé stěny, hráče i cíle.

Level editor, který tyto soubory bude tvořit, udělám v GM, ve kterém to hravě zvládnu (narozdíl od Javy, kde jsem začátečník) - editor bude fungovat tak, že tam jednoduše zvolím rozměr levelu, číslo levelu, případně čas pro tento level (který do hry zakomponuji, pokud čas vyprší, hra končí) a pak si jednoduše stěny, hráče i cíle naklikám, jak potřebuji. Editor mi pak vygeneruje hotové (třeba TXT) soubory, které načtu přes Javu.

Chci se zeptat, zda je můj koncept správný, rád bych od Vás slyšel, co si o tom myslíte, na co si dát pozor, případně co udělat jinak.

Ještě se chci doptat, zda je možno na Devbooku vložit něco jako projekt, který budu postupně updatovat, psát changelog, atd... nebo to mám psát na stěnu, či zda je to nějak jinak vyřešeno (nezkoumal jsem).

Mockrát díky za Váš čas :)

Odpovědět 20.1.2014 17:56
Učím se ostře vidět.
Avatar
Iwitrag
Člen
Avatar
Iwitrag:

Tady jsem vytvořil na ukázku jednoduchoučký level-editor, tak nějak by to mohlo vypadat.
http://uloz.to/…vleditor-exe

Nejde edit, tak píšu double-post

Editováno 21.1.2014 2:02
Nahoru Odpovědět 21.1.2014 1:59
Učím se ostře vidět.
Avatar
MrPabloz
Člen
Avatar
MrPabloz:

Ono je docela jedno jak na to pujdeš, hlavně že to budeš chápat a vědět jak na to ty :) Jinak ale skus se třeba kouknout po JavaFX, je to náhrada Javovského swingu a myslím si že je i lepší, i když těžší o něco možná ze začátku :) ale jinak jen tak dál :) Nevzal sis nic lehkého pro začátek :)

Nahoru Odpovědět  +1 21.1.2014 8:47
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Iwitrag
Jan Vargovský:

V Jave nedělám, ale obecně bych použil 2D pole pro reprezentaci té mapy. Bud bys mel objekt Policko a ten by mel několik stavu (empty, wall apod.) a pak objekt Hrac a Syr. Řešení je hodně, do nějakého listu si můžeš udržovat ty zdi, startovni pozice apod. Zbytečně bys pak ale zatěžoval paměť, takže když umíš pracovat se soubory, ulož si každý level zvlášť a potom načti.

 
Nahoru Odpovědět  +1 21.1.2014 9:13
Avatar
Iwitrag
Člen
Avatar
Odpovídá na MrPabloz
Iwitrag:

Díky moc :) Koukal jsem na stackoverflow, byla tam otázka swing vs JavaFX... názoru tam byla spousta, swing je prý "oficiálnější" ale JavaFX má daleko lepší předpoklady do budoucna (nehledě na to že se prý daleko lépe udržuje a poskytuje více nástrojů).

Takže uvidím, ono asi není na škodu, umět oboji... mrknu se na rozdíly v syntax a jak se s tím pracuje a kdyžtak to udělám v JavaFX :)

Díky za tip ;)

Nahoru Odpovědět  +1 21.1.2014 12:54
Učím se ostře vidět.
Avatar
Iwitrag
Člen
Avatar
Odpovídá na Jan Vargovský
Iwitrag:

To není vůbec špatný nápad! Neuvědomil jsem si, že vlastně dělat grid layout můžu přes 2D array :D Budu muset přepracovat export a import editoru, ale určitě to bude daleko lepší řešení :)

Se soubory už pracuji, nakonec to šifruji přes Vigenerovu šifru, každý level má svůj .dat soubor, ve kterém jsou uložené informace o daném levelu... ve hře se to pak jednoduše dešifruje a hra získá všechny potřebné informace...

Level editor pak může sloužit k tvorbě vlastních levelů, které se pak dají sdílet pomoci toho .dat souboru.

Level editor není problém, ale hra samotná, jelikož ji dělám v Javě, kterou se teprve 2 týdny učím, to mi dá zabrat, ale nějak to zvládnu :) Ušetřím si dost práce díky tvému tipu o tom 2D poli, takže díky moc :)

Nahoru Odpovědět 21.1.2014 13:00
Učím se ostře vidět.
Avatar
Odpovídá na Iwitrag
Michal Žůrek (misaz):

Ahoj,
osobně bych udělal třídu Level a ta by měla všechny parametry levelu (čili mapu a vše co k tomu patří), pak bys měl LevelManager a ten by levely načítal třeba z xml. Takhle bych to dělal já, netvrdím že je to dobře.
k JavaFX: zační swingem až narazíš na strop (jako u gamemakeru), tak přejdi k JavaFX.

Editováno 21.1.2014 13:01
Nahoru Odpovědět 21.1.2014 13:00
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Iwitrag
Jan Vargovský:

Kdyžtak mrkni na můj editor map. Asi by se to dalo přepsat do Javy :)

 
Nahoru Odpovědět 21.1.2014 13:07
Avatar
Odpovídá na Iwitrag
Luboš Běhounek (Satik):

Postup je správný, jak už tu padlo, můžeš to řešit jako 2D pole objektů a nebo jako pozice hráče, sýra a pole zdí.

Ten kód by měla obsahovat ideálně třída Level.

Místo Caesarovy šifry bych ten level radši třeba zazipoval přes java.util.zip a dal mu nějakou nezipovou koncovku.
Soubor bude o něco menší a běžný uživatel se ti k datům uvnitř taky nedostane.

Nahoru Odpovědět 21.1.2014 14:18
:)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.