Jak programujeme Scorch

Opět jsme se inspirovali starou dobrou klasikou. Scorched Earth je počítačová hra z roku 1991, ve které hráči spolu soupeří v tankové bitvě. Za svůj název zřejmě vděčí způsobu, jakým dopadající střely postupně ničí a přetvářejí krajinu, na které se bitva odehrává, což je asi nejzajímavější prvek hry. Postupně, jak hráči ve hře postupují, mohou si dovolit nakoupit lepší a ničivější zbraně a podobně to platí pro programátory. Postupně vymýšlejí stále lepší a ničivější zbraně a přidávají je do hry, aniž by je člověk musel povzbuzovat.

Vektorová grafika

Jednu z prvních věcí, kterou jsme při programování této hry potřebovali, je umět nakreslit krajinu. Není to totiž předpřipravený obrázek, ale je generovaná přímo programem a kolo od kola se náhodně mění. Ale nestačí jen naivně kreslit čáru zleva doprava a nahodile měnit výšku, to by krajina nevypadala věrohodně – neměla by zároveň velké široké kopce i jemné detaily na nich. Použili jsme proto rekurzivní algoritmus náhodného posouvání středního bodu.

A když už jsme měli vektorovou krajinu, proč ne celou hru! Kruhy a kružnice jsme uměli z dřívějška, kvůli ohníčkům za letící raketou jsme se naučili kreslit i vyplněné trojúhelníky a o moc více nepotřebujeme. Vektorová kresba má tu výhodu, že můžeme snadno přizpůsobit velikost a vyřádit se s plynulými přechody barev při vyplňování. Dokonce máme i (stylově hranaté) vektorové písmo v menu.

Fyzika hry

Střely létají po parabole. Výpočet, kam dopadne střela letící po této trajektorii, jsme si vyzkoušeli už dříve, když jsme programovali dělostřelecký souboj jako textovou hru. Ale v grafice je to vlastně o mnoho jednodušší, protože nepočítáme místo dopadu, ale simulujeme postupně celý let. Máme tedy uloženu aktuální polohu střely a snímek za snímkem ji měníme připočtením aktuálního vektoru rychlosti střely a k němu zase připočítáváme vektor zrychlení, což je v tomto případě gravitace táhnoucí střelu k zemi. To je celé, jednoduché sčítání vytvoří elegantní zahnutou dráhu letu.

Abychom mohli testovat kolize střel s terénem, udržujeme si v paměti zjednodušenou mapu obrazovky, kde o každém pixelu víme, zda je či není hlínou. Lze si to představit jako černobílý obrázek, na kterém je jen krajina. Když střela hlínu zničí, necháme zbylou spadnout na uvolněné místo. Všechny tyto operace provádíme na mapě i na obrazovce.

Týmový vývoj

Všechny své předchozí programy programovali kluci každý zvlášť. Ale Scorch už je trochu větší projekt a tak se nabízelo jít o krok dál a pojmout ho jako týmovou práci. Myslím, že práce v týmu je pro studenty vynikající zkušenost, která stojí za to. Klade mnohem větší nároky na komunikaci a vede studenty k větší odpovědnosti.

Samozřejmě aby spolupráce byla efektivní, je potřeba se naučit pracovat se správnými nástroji. V oblasti správy verzí zdrojových kódů se v posledních letech stále více prosazuje Git. Původně ho Linus Torvalds vytvořil pro vývoj Linuxu, ale dnes se s ním setkáváme ve většině otevřených projektů i v komerčním prostředí. Během několika schůzek kroužku jsme se naučili běžnou rutinu commitování změn a jejich slučování s prací ostatních. Už žádné posílání změn mailem nebo přenášení na flashce – domácí úkol se pushne na server a hned je k dispozici ostatním.

Webové stránky pro hru

Aby programování nebylo stále monotónní a abychom poznali i jinou problematiku, jiné jazyky a přístupy, uděláme si občas výlet do úplně jiného světa. Tentokrát jsme se rozhodli, že našemu Scorchi uděláme webovou stránku, na které se bude zobrazovat žebříček nejlepších hráčů z celého světa ;-) Nahlédli jsme tedy pod pokličku webového programování.

Vlastně s tím přišel Ondra, že by se chtěl něco dozvědět o webovém programování. Dlouho jsem ho brzdil, protože přeci jen základy programování je lepší učit v tradičním programovacím jazyce, ale nakonec jsme se k základům PHP a souvisejících technologií dostali a ponořili jsme se do toho asi na půl roku a poměrně hluboko. Naučili jsme se pracovat s databázemi a dostali se i k pokročilejším SQL dotazům. Samozřejmě jsem při tom zdůrazňoval bezpečnost a není nic názornějšího, než každému před jeho zraky aplikaci cracknout. Dokonce i Kryštof uznale pokýval hlavou, že to bylo poučné. Aby také ne, vždyť u něj to dalo zdaleka nejvíce práce!

Hlavně jsme se ale posunuli od špagetového kódu směrem ke smysluplnější architektuře aplikací. Udělali jsme si i databázovou vrstvu, která se postará o bezpečnost, a generátor formulářů, který zjednodušil opakující se rutinu. Školní rok jsme zakončili různými triky s AJAXem a příští školní rok snad vytvoříme opravdu stránky pro naši hru.