IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Dunkleosteus

Hra Dunkleosteus bola programovaná v jazyku C# a bol pritom použitý framework MonoGame.

S pôvodným nastavením frameworku (najmä Pipeline Tool) boli trochu ťažkosti, viď napr. toto vlákno na fóre. Potom už však jeho užívanie bolo príjemné a pomerne v pohode.

Kto pozná aspoň trochu objektový C#, tomu MonoGame vychádza naozaj v ústrety. Opakujúca sa postupnosť Draw() a Update() je navyše pomerne intuitívna a vedie k tej správnej dichotómii uvažovania pri vytváraní hier: tj po prvé, čo sa deje na strane počítača, po druhé, ako sa to reprezentuje hráči.

Myšlienka

Dunkleosteus bol rod panciernatých rýb vo štvrtom období paleozoika alebo prvohôr. Jednu dobu sa o tejto veľkej rybe hovorilo dokonca ako o živočíchovi s vôbec najsilnejším stiskom čeľustí všetkých čias... tie časy sú bohužiaľ preč au väčšiny paleontológov a ďalších vedcov o tento primát prišiel, akási aureola smelé a mocné ryby, ktorá bola vrcholovým predátorom milióny rokov pred prvými dinosaurami, mu však zostala. Preto som sa mu rozhodol vzdať česť a spojiť to so zámerom urobiť hru, v ktorej hráč „letí“ doprava a zbiera veci (či sa im vyhýba), ktoré letia sprava (tu zas trochu inšpiráciou bol level s koberčekom sa staručkej hry Aladdin).
Úvodná obrazovka - Zdrojákoviště C # .NET - XNA a MonoGame

Zdroje

Uvediem použité zdroje.

Grafika

Všetky sprity som našiel cez vyhľadávač Googlu so zaškrtnutým hľadaním Creative Commons licencie. Tým sa samozrejme život vždy zásadne komplikuje, pretože máločo dobré je zadarmo. Pri obrázkoch nie je ale taká zložitá situácia ako pri zvukoch. Obrázkom som potom už poladil viac-menej len farby a dal im farebnú auru. Schválne som pritom dobré živočíchy (tj tie, ktoré by mal dunkleosteus jesť) dával do farby zelenej a so zelenou septembrom, zatiaľ čo nepriatelia majú farby do červena, fialova či žlta. Aj v rýchlosti tak hráč vie, či uhýbať, alebo prenasledovať.

Hudba

Royalty Free hudby je našťastie na YouTube celkom dosť a je zvyčajne podarená. Autori pritom spravidla chcú len, aby boli uvedení, čo som urobil na úvodnej obrazovke hry. Celkom sú v hre len dve skladby: pre úvodnú obrazovku a pre zvyšok. Zámerne som vybral hudbu so zlovestným vyznením.

Zvuky

Nájsť zvuky bolo horšie. Väčšina zvukových bánk nemala tie, ktoré som chcel, navyše väčšinou bola vyžadovaná registrácia či rovno platba. Nakoniec poslúžil opäť jednoducho YouTube. Drvivá väčšina kódu je v hlavnej triede Hra.cs Ostatné triedy sú najmä na ukladanie do výsledkovej listiny (pozri zdroják na konci článku).

Je asi zbytočné rozpisovať celý koncept, pre to je najlepšie nahliadnuť do zdroja. Zlatým pravidlom však bolo robiť čo najviac metód na zvýšenie prehľadnosti a urobiť metódu na čokoľvek, čo by som užíval (s obmenami) viackrát. To je však, povedal by som, úplne základná myšlienka OOP. Veľmi šikovné je využívanie vlastných definovaných premenných (enum). Rozhodne to je lepšie, než priradiť jednotlivým stavom niečoho napr. int a potom si pamätať (alebo niekde písať do komentu), čo znamená čo. Navyše je to elegantnejšie v duchu Ockhamovej britvy: používam dátový typ, ktorý má presne toľko možných hodnôt, koľko ich reálne využijem, nie mnohonásobne viac.

Tiež si treba dávať bacha na to, že Update() prebehne 60-krát za sekundu: keď napr. detekujeme stlačenie nejakej klávesy a hneď sa nestane niečo, po čom by prestala byť detekovaná, tak ju najskôr detekujeme niekoľkokrát. Hráč teda bude napr. chcieť prepnúť myš klávesom M, ale program ju vyhodnotí ako stlačenú napríklad 20-krát za sebou. To sa dá riešiť niekoľkými spôsobmi, z ktorých asi najjednoduchšie sú dva: buď detekovať, že nový kláves nerovná sa skoršiemu klávesu, alebo spustiť po stlačení klávesu krátke počítadlo, v ktorého intervale nebude program danú klávesu detekovať. Oboje si vyžaduje jednu premennú navyše, ale premenná pre počítadlo sa dá obvykle použiť na viacerých miestach.

Devónsky oceán #1 - Zdrojákoviště C # .NET - XNA a MonoGame

Koncepcia hry

Ukážem koncepciu hry.

Pohyb dunkleostea a rýchlosť hry

Hráč ovláda dunkleostea vo zvislom a vodorovnom smere. Vo zvislom smere je to samotná hra o sebe: hráč jednoducho uhýba hore a dole nebezpečným živočíchom (žraloky, nautiloidi atď.) a snaží sa vstupovať do smeru rybkám, ktoré jej (tie mu potom pridávajú zdravie, ktoré je vyjadrené zelenými srdiečkami, a body ). Vo vodorovnom smere sa môže dunkleosteus pohybovať len trochu, nejde tu však o pohyb, ten je len symbolický, skôr sa týmto nastavuje rýchlosť (a tým pádom aj obtiažnosť) celej hry.

Nepriatelia

Nepriateľov aj koristi je viac druhov a niektoré sú skryté ako easter eggy. Generujú sa náhodne, ale samozrejme s rôznymi pravdepodobnosťami. S narastajúcej úrovni sa pritom dvíha obtiažnosť hry: okrem iného preto, že sa generuje viac žralokov rôznych veľkostí, ale napríklad aj preto, že tí menší žraloky začínajú byť agresívnejší (rýchlejší a viac idú smerom, kde je dunkleosteus). Žraloky sú tiež agresívnejšie, keď má dunkleosteus vysoké (zdravá strava) alebo naopak nízke (pach krvi) zdravie. Zrada je tiež v tom, že nautiloidy alebo cefalopódy uberajú viac-menej stále rovnako zdraví, ale žraloky tým viac, čím viac ho dunkleosteus môže mať.

Úroveň

Za jedenie rybiek či uplávanie celých kilometrov získava hráč skóre, z ktorého sa potom vypočítava jeho level. Ten jednak mení pozadie (a to až do úrovne 30), ale tiež mení šance na niektoré udalosti a na naspawnovanie určitých živočíchov. Rovnako sa od levelu počíta maximálne možné dunkleosteove zdravie.

Bonusy

V hre sú tiež dva zobrateľné (zožrateľné) bonusy: jeden je turbo ammonite, ktorý dodá rýchlostný boost, zatiaľ čo druhý je tak trochu easter eggom, prečo ho tu prezrádzať nebudem.

Udalosti

Nemyslím teraz udalosti v C#, ale v hre: občas sa spustí tzv. event, pri ktorom sa naspawnuje veľa jedincov jedného typu nepriateľov. Nebezpečnejšie eventy majú opäť menšiu šancu. Ako istú mieru kompenzácie majú žraloky pri svojom evente o niečo menšie poškodenie.

Plávajúce bodky a riasy

V oceáne tiež plávajú dva typy objektov, s ktorými nemožno interagovať a len dokresľujú prostredie. Jednak to sú riasy a za druhé bodky rôznych farieb modrej či zelenej, ktoré majú navodzovať prúdenie vody. Tieto bodky sú v skutočnosti nápisy a jedná sa o skutočnú bodku, ktorá sa dáva za vetu či rádovú číslovku.
Devónsky oceán #2 - Zdrojákoviště C # .NET - XNA a MonoGame

Ovládanie a záver hry

Uvediem ovládanie hry.

Predvolené ovládanie a bindovanie kláves

V základe sa hra ovláda šípkami. Pridal som však možnosť si nabindovať vlastné klávesy, samozrejme s výnimkou tých vyhradených pre niečo iné.

Myš

Počas hry sa dá tiež prepínať mód myši, a to na vypnutý, len po vertikále a všetko. Pohyb myšou funguje tak, že čo chvíľu vracia neviditeľný kurzor priamo na dunkleostea. Zároveň však sleduje, či nie je kurzor vyššie alebo nižšie ako dunkleosteus (popr. viac vľavo a vpravo) a ryba potom ide za ním. Keď hráč prestane ťahať myšou, kurzor sa zase vráti a dunkleosteus sa zastaví.

Prepínanie zvukov

Daným klávesom sa dá tiež prepínať mód hudby a zvukov, a to na všetko, iba efekty, iba hudba a nič. Zvláštny efekt, ktorý hrá na začiatku eventu, je síce technicky vzaté hudbou, ale tu patrí k zvukom.

Zápis do listiny najlepších

Pokiaľ hráč nahrá aspoň 1000 bodov (žiadny strach, to ide rýchlo), smie sa zapísať do listiny. Vstup písmen je ošetrený pomocou metódy ToString() na objekte klávesu. Je však potrebné si poradiť s tým, aby GetPressedKeys(), z čoho je výstup poľa, nebolo nulové, ani aby neregistrovalo moc stlačení klávesu naraz. Opäť nám pomôže buď detekcia starej klávesy (ale pozor, hráč môže mať v nicku aj dve rovnaké písmená vedľa seba, čo by sme mu mali dovoliť), alebo spomaľovacie počítadlo.

Listina najlepších sa tradične serializuje do XML súboru v zložke hry, z ktorej sa zase deserializuje do Listu. XML by sa samozrejme dal editovať, ale zachovajme si vieru v ľudstvo a verme, že nikde nebude panovať taká revnivosť ohľadom dunkleostea pri jednom počítači, že by sa niekto musel uchyľovať k takým podvodom. Avšak by inak išlo dávať výsledky aj na server na web.

Devónsky oceán #3 - Zdrojákoviště C # .NET - XNA a MonoGame

Jazyk a zdrojáky

Hra je v angličtine, pretože som pôvodne myslel, že pôjde do letnej súťaže. Komentáre v zdrojáku (nerobil som ich nakoniec veľa, keď to nie je súťažné) sú ale po slovensky. Zdrojáky dávam sem do zdrojákoviska, pod článkom je potom na stiahnutie už releasnutá hra, pretože solution zložka by bola príliš veľká (asi o 100 Mb).

Hra.cs (najdôležitejšia trieda s väčšinou herného kódu)
UlozenieVysled­ku.sk (pre serializáciu nového výsledku do XML)
Listina.cs (pre vypísanie listiny 25 najlepších)
Hrac.cs (slúži na zápis jedného záznamu do listiny)


Galéria


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 8x (61.92 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
Zdrojákoviště C # .NET - XNA a MonoGame
Článok pre vás napísal Jakub Raida
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor má rád literaturu, dějiny, filmy, počítačové hry, paleontologii, vesmír a programování.
Aktivity