Špongia 2013

príprava - analýza zadania

1. časť – Príprava

Práve začína ôsmy ročník stredoškolskej súťaže Špongia zameranej na tvorbu počítačových hier. Ak ste sa do nej chceli zapojiť, ale neurobili ste tak, už je neskoro – poznačte si do kalendára, že na budúci rok sa o ňu máte zaujímať o čosi skôr. (A povedzte to aj všetkým známym, ktorých by niečo podobné mohlo zaujať.)

Pre tých, čo nepoznajú: je to skupinová súťaž v programovaní hier. Na rozdiel od bežných programátorských súťaží sa hodnotí nielen kód, ale aj grafika, hudba, nápad, hrateľnosť, celková atmosféra, atď. A kód, ten vlastne hodnotí iba nepriamo ako stabilita a bezproblémový chod hry. Zúčastňujú sa družstvá do 6 členov, je to teda súťaž nielen pre programátorov, ale aj grafikov, hudobníkov, scenáristov, testerov, atď. Skrátka, ako malá firma, ktorá vyvíja skutočný produkt; akurát trochu tvrdšie termíny. Tento rok sa začína v piatok 17.10.2013 a hotové hry sa odovzdávajú v pondelok 4.11.2013. To je spolu 18 dní. Nasledujúci týždeň hry vyskúša odborná porota, a v pondelok 11.11.2013 je slávnostná prezentácia s možnosťou získať dodatočné body, a vyhlásenie víťazov.

Ja už mám strednú školu za sebou, najprv v roli žiaka, potom učiteľa. Avšak pre nás starších je tu možnosť zúčastniť sa nesúťažne; rovnaké pravidlá, rovnaké termíny, ale žiadne oficiálne hodnotenie. Neoficiálne sa však asi bude dať približne odhadnúť (plusmínus dve miesta v rebríčku), ako by sa hra umiestnila, keby... ehm, som mal o polovicu menej rokov. A vôbec, už len dokončiť hru v danom termíne je úspech, ktorý sa nie všetkým súťažiacim podarí. To hovorím z vlastnej skúsenosti.

Náš tím s hrdým názvom „K2“ sa už raz zúčastnil v roku 2009, ale nestihli sme hru dokončiť, už si nepamätám prečo. Toto je druhý pokus. Ja budem písať program a kresliť obrázky; Mikie bude skladať hudbu. Držte nám palce; ak z toho niečo bude, výslednú hru si budete môcť voľne stiahnuť z tejto stránky.

Prečo vlastne? Aby som sa ako programátor udržal vo forme a zistil, kde mám slabé stránky. Ak sa roky živím programovaním a napriek tomu nedokážem pri programovaní udržať krok so žiakmi strednej či nebodaj základnej školy, niečo nie je v poriadku. Lepšie je, keď to zistím teraz, než keby som sa zobudil vo chvíli, až oni dokončia školu a prihlásia sa na moje pracovné miesto. Možno je to niečo, čo sa dá ľahko napraviť, napríklad že používajú novšie technológie, ktoré som si zatiaľ nevšimol alebo som ich podcenil. Takáto informácia môže mať cenu zlata, doslova.

Iste, mám pripravený kopec výhovoriek, keby dačo. Špecializujem sa na webové aplikácie, čiže programovanie na strane servera, ale do súťaže chcem urobiť desktopovú aplikáciu. Tým pádom nevyužijem nič z webových technológii, ale naopak budem musieť riešiť grafiku, animácie, hudbu, zvukové efekty, ovládanie myšou a mnoho ďalších vecí, s ktorými nemám toľko praxe. Atď. Napriek tomu, dvadsať rokov praxe by toto všetko malo prinajmenšom dorovnať. Čím dlhší by bol termín, tým väčšiu by som mal výhodu, pretože som zvyknutý na veľké projekty s väčšou hĺbkou abstrakcie; pri dva a pol týždni riskujem, že navrhnem niečo zložité, čo nestihnem naprogramovať a odladiť, najmä keď okrem toho budem kresliť obrázky a dizajnovať miestnosti. Ale túto informáciu mám vopred, treba s ňou počítať.

Mám rád počítačové hry, ale keď chcem nejakú robiť, je toľko možností, čo by sa dalo robiť, toľko technológií, ktoré by sa dali použiť, že sa neviem rozhodnúť. Z každej technológie by sa hodilo ešte niečo doštudovať a často to skončí tak, že študujem niečo nové namiesto využívania toho, čo už viem. Preto mi veľmi vyhovuje, že mi tentokrát niekto určí tému a termín, a ešte aj zabezpečí konkurenciu, aby som nakoniec vedel ohodnotiť, čo som urobil dobre a čo sa dalo aj omnoho lepšie. Ak budem s výsledkom spokojný, po skončení súťaže môžem ešte doplniť všetko, čo som nestihol, vylepšiť grafiku, pridať ďalšie miestnosti; a výsledok zavesiť na internet. Ak to nebude priveľa práce navyše, hru prerobím aj na Android (mobily a tablety).

Tento článok píšem ešte pred zverejnením zadania, čiže zatiaľ netuším, aká bude téma. Som pripravený na hocičo; pokiaľ to zvládnu stredoškoláci, nemalo by ma to výrazne zaskočiť – vyrobím hlavolam, bludisko, spoločenskú hru, textovku, vizuálny román, adventúru, plošinovku, ťahovú stratégiu, akčnú stratégiu, tower defense. Nerád by som robil fyzikálnu hru alebo 3D strieľačku, ale keby došlo k najhoršiemu, som pripravený aj na to. (Spolieham sa však na to, že 3D strieľačka nebude.)

Hudba je moja najslabšia stránka; zabezpečuje ju druhý člen tímu, Mikie. S hudbou súvisia zvukové efekty, ale na tie som nedávno našiel voľne použiteľný generátor sfxr; nie som celkom rozhodnutý, ale asi ho použijem, lebo nemám lepšiu alternatívu.

Obrázky budem kresliť vo vektorovom editore Inkscape. V grafike tiež nie som celkom doma, ale mal by som sa vedieť vyhnúť tým najväčším chybám. Myslím si, že ak človek nevie kresliť, mal by používať vektorový editor, lebo nešikovne nakreslený vektorový obrázok vyzerá podstatne lepšie ako nešikovne nakreslený rastrový obrázok: má pružné oblúky, vyhladené okraje, ľahko sa robia farebné prechody a tieňovanie. Je o čosi ťažšie nakresliť ho, ale ľahšie sa dodatočne upravuje. Ak budem potrebovať iba peknú fotografiu na pozadie, na Wikipédii je zoznam voľne použiteľných zdrojov.

Čo sa týka programovania, pravdepodobne použijem jazyk Java, s ktorým mám najviac skúseností, a je to aj môj najobľúbenejší jazyk. V ňom si trúfam urobiť všeličo, najmä rozsiahlejšie projekty. (Ak by sa súťažný projekt zvlášť vydaril, môžem ho neskôr rozširovať.) Javu používam aj pracovne, takže vedomosti z práce využijem aj v súťaži a naopak. Navyše som v Jave nejaké hry napísal v minulosti; môžem z nich teda vykrádať časti kódu. Zvyšné nástroje sú viacmenej do zálohy, keby náhodou vyšlo zadanie, na ktoré sa špecializujú. V Jave sa programuje aj na operačnom systéme Android, ale prerobenie hry nie je celkom automatické, vyžaduje si kopec práce. (Existujú aj knižnice, ktoré túto prácu šetria, ale nemám s nimi skúsenosť a nechcem experimentovať v časovej tiesni.)

Ren'Py je nástroj na výrobu ilustrovaných textových hier; zvládne ho aj desaťročné dieťa (viem, lebo som ich to kedysi učil). Ak vám vyjde dobré zadanie, veľmi jednoduchú hru vyrobíte aj za hodinu. Ďalší čas v podstate využijete na písanie scenára, kreslenie obrázkov a skladanie hudby; programovať tam nemusíte vôbec (ale môžete, ak chcete niečo extra). Je to záloha pre prípad živelnej pohromy počas súťaže. Keby však bolo zadanie vytvoriť textovú hru alebo adventúru, je to ideálny nástroj. Hry vytvorené v Ren'Py vraj fungujú aj na Androide; neskúšal som.

Unity 3D je nástroj na výrobu trojrozmerných hier: modely, kamera, fyzika. Keby bolo zadanie vytvoriť fyzikálnu simuláciu alebo 3D strieľačku, je to ideálny nástroj. Trojrozmerná grafika vyzerá dobre. Najväčší problém je, že namiesto obrázkov musíte pre všetky objekty v hre vytvoriť 3D modely, prípadne 3D animácie, a to je obrovské množstvo práce. To si za dva týždne môže dovoliť tím, ktorý má na robenie 3D modelov vyhradeného jedného človeka s praxou. Hry vytvorené v Unity 3D fungujú aj na Androide.

Prekvapilo ma, že možnosť Unity 3D uviedla až tretina súťažných tímov; je to najobľúbenejšia technológia tohto ročníka. (Na druhom mieste je Java, o kus ďalej je Python a Pascal/Delphi. Viaceré tímy neuviedli vybraný nástroj; dúfam, že sa túto informáciu dozvieme po odovzdaní hier.) Toto je príklad novej technológie, ktorú zamestnaný programátor ľahko prehliadne, až sa jedného dňa obzrie a zistí, že je tu vlak, ktorý mu ušiel. Samozrejme, o rok alebo o päť rokov môže opäť všetko vyzerať inak. Dnes je však Unity 3D nástroj, v ktorom si stredoškolák môže naklikať hru, pridať do nej reklamy alebo nákup herných prvkov, zavesiť ju na trh mobilných aplikácií a zarábať. (Na jednej strane dnešným stredoškolákom závidím takéto možnosti, na druhej strane si hovorím, že keby za mojich stredoškolských čias existoval Facebook a podobné elektronické drogy, možno by som ani nezmaturoval.)

Toto je teda moja príprava na súťaž, a teraz si konečne pozriem zadanie:

Hmmm...

viliam@bur.sk