Hlavní navigace

Frogs - hra využívajúca SDL

Martin Hudák

Týmto článkom by som chcel predstaviť jednoduchú hru, ktorá využíva knižnicu SDL, a samozrejme aj samotnú knižnicu. Takže nechcem dopodrobna rozpitvávať jedno ani druhé. Skôr ako o hru sa jedná o súhrn mojich znalostí a skúseností s týmto API.

Týmto článkom by som chcel predstaviť jednoduchú hru, ktorá využíva knižnicu SDL, a samozrejme aj samotnú knižnicu. Takže nechcem dopodrobna rozpitvávať jedno ani druhé. Skôr ako o hru sa jedná o súhrn mojich znalostí a skúseností s týmto API. Keby mal však niekto záujem vedieť aj čosi viac, môže mi napísať na hudo@centrum.sk. Ak by bol záujem dosť veľký, mohol by som vyplodiť na tejto stránke aj nejaké podrobnejšie tutoriály v SDL.

Čo je SDL?

SDL je knižnica určená pre programovací jazyk C, v ktorej sa s obľubou vytvárajú rôzne hry, demá, MPEG prehrávače atď. Je to dané hlavne jej jednoduchosťou a radou výhod. Medzi ne patrí napr. aj jej dostupnosť na takmer všetkých používaných platformách (Linux, BeOS, MacOS, Win32, Solaris, IRIX, FreeBSD). To so sebou prináša obrovské možnosti, lebo aplikácie písané pod touto knižnicou možno skompilovať na každej platforme s minimálnymi alebo žiadnymi zásahmi do zdrojového kódu. Spomeňte si napr. na hry ako Unreal Tournament alebo Quake 3. Tieto hry sú portované do Linuxu práve pomocou SDL. Ako je to možné? SDL vie totiž spolupracovať s OpenGL. Vtip je v tom, že základné nastavenia, inicializáciu a prácu s udalosťami necháme na SDL a ostatné už je na OpenGL. To znamená, že netreba poznať už API konkrétneho operačného systému. Tým sa samozrejme zabezpečí aj jednoduchší prenos aplikácie do iného systému. Mnohí môžu namietať, že by bolo jednoduchšie použit pre OpenGL knižnicu GLUT. SDL však ponúka aj širšie možnosti. Príkladom môže byť doplnková knižnica SDL_mixer, ktorá je vhodná na ozvučenie hier a aplikácií, lebo okrem prostého prehrania rôznych zvukových formátov (wav, mp3, ogg, mid, voc, mod,…) dokáže tieto zvuky aj mixovať. Ešte by som sa chcel zmieniť o použití knižnice pod Windowsami. O 2D grafiku sa stará DirectDraw, takže všetko beží ako po masle. S portovaním programov z Linuxu som v kóde musel meniť len nutné minimum, takže to musí potešiť hádam každého.

Čo sa týka dostupnosti dokumentácie, na Internete sú jej doslova tony. Dokonca aj v naších končinách sa niečo nájde. Hlavným zdrojom informácií však zostáva domovská stránka www.libsdl.org. Nájdete tu množstvo príručiek, tutoriálov, doplnkových knižníc a zdrojových kódov. Medzi nimi nájdete zdrojáky na výpis truetype aj rastrových fontov, zaujímavú knižnicu RotoZoom, alebo už naprogramované rôzne herné enginy. Okrem toho by som ešte odporučil knihu Programming Linux Games od spoločnosti Loki Software, ktorá sa stará napr. aj o portovanie komerčných hier z Win32 do Linuxu. Sú v nej popísané takmer všetky (ak nie všetky) grafické rozhrania a dopodrobna práve knižnica SDL na konkrétnych príkladoch, od inicializácie až po samotnú kompiláciu aplikácie. Takže pre začiatočníkov je knižnica SDL ako stvorená a hlavne vďaka dostupnosti informácií, doplnkov a dokumentácie poráža aj jej konkurenta, ClanLib.

Frogs

Túto hru určite všetci poznajú ešte z čias 8bitových počítačov. Ide o jednoduchú arkádu, v ktorej je cieľom dostať žabu z jednej strany cesty na druhú. Vyriešil som to však trochu inak a hlavným cieľom v jednotlivých úrovniach je preniesť tri malé žabky cez cestu. Hru som chcel maximálne zjednodušiť, a preto som vytvoril len jedno pozadie, pričom s postupným prechádzaním úrovní sa zvyšuje rýchlosť. Apropo celková rýchlosť hry, hardwarová podpora grafiky a zobrazenie okna sa nastavuje v nezávislom programíku setup, ktorý nastavenia uloží do súboru frog.ini, z ktorého sa pri inicializácii načítajú. Nastavenie rýchlosti hry sa dalo určite vyriešiť aj elegantnejšie cez systémový časovač a výpočet rýchlosti pohybu, ale ako som už spomenul, hru som chcel maximálne zjednodušiť. Po spustení hry sa objaví asi najskromnejšie Menu, aké sa len dalo spraviť, a potom hurá do hrania.

Menu

Zdrojový kód hry nechcem veľmi obkecávať. Akurát, že som pre hierarchiu áut použil lineárne zreťazený zoznam tvorený štruktúrami. Kolízie som riešil pomocou prekrývania štvoruholníkov, čo pre túto hru bohate stačí, a využil som aj doplnkovú knižnicu SDL_image, pomocou ktorej možno načítavať aj formát jpg. Čo sa týka ozvučenia, inšpiráciu som bral z knihy Programming Linux Games. Bolo by asi vhodnejšie z hľadiska náročnosti použiť ďaľšiu knižnicu SDL_mixer. Na vytvorenie grafiky som využil programy 3DS Max a Photoshop 7. Inak zdrojový kód je aspoň čiastočne okomentovaný, čo môže byť vhodné pre odvážlivcov, ktorí do neho nazrú.

Takže čo dodať? Mnohí určite nájdu kopec vecí, ktoré sa dajú hre vytknúť, ale treba brať ohľad na to, že ani som sa tak nesnažil spraviť plnohodnotnú hru, ako skôr dať dokopy to, čo som sa o SDL naučil. Ako som už povedal, pripomienky posielajte na hudo@centrum.sk.

Ešte pár obrázkov na záver…

Stresová situácia
Toto nepoteší nikoho

Našli jste v článku chybu?