Vitajte v pomocníkovi pre hru XposeCraft

Hra XposeCraft nie je obyčajná (zábavná) hra podobná hrám, ktoré sa ovládajú klávesnicou a myšou. Je to náučné prostredie určené na výučbu programovania v jazyku C#. Hru je potrebné hrať písaním zdrojového kódu robota, ktorý sa následne s hrou spojí a bude sa hrať samostatne. Ide o stratégiu, v ktorej je vašim cieľom zničiť všetky nepriateľské budovy skôr, než nepriateľ zničí tie vaše.

Inštalácia prostredia

Pre programovanie odporúčam buď bezplatné vývojárske prostredie Visual Studio Community od Microsoftu, alebo jednu z vhodných (lepších) alternatív, ktorou je nástroj od firmy JetBrains, keďže ho majú študenti k dispozícii zadarmo - Rider. V čase písania bol v stave Early Build.

Príprava prostredia

Je potrebné stiahnuť súbory z tohto GitHub projektu. Najrýchlejší spôsob je buď stlačiť tlačidlo na vrchu tejto stránky, alebo na stránke https://github.com/scscgit/XposeCraft/ vpravo kliknúť na tlačidlo Clone or download a zvoliť voľbu Download ZIP, prípadne kliknúť sem. Druhou alternatívou je lokálne si projekt pomocou Gitu naklonovať. Následne vo vašom obľúbenom C# editore projekt spustíte, napríklad otvorením súboru s príponou .sln v koreňovom adresári projektu.


Programátorské rozhranie hry (API)

Jazyk, v ktorom je napísaná samotná hra a ktorý sa používa aj na písanie robota sa volá C#. Existujú rôzne návody vo forme kníh alebo webstránok, príkladmi sú jedna anglická a jedna česká stránka, ktoré sa zaoberajú úplnými základmi. Platí ale, že väčšinou už prvé lekcie pracujú s funkciami z rámca .NET, akou je napríklad Console.WriteLine. Počas programovania robota bude ale táto znalosť zbytočná, keďže sa neprogramuje aplikácia pre konzolu. Poskytujem ale podobnú funkcionalitu, ktorú je dobrovoľne možné využívať na písanie správ do výstupného logu zobrazovaného po spustení simulácie, napríklad cez Log.i(object kontext, string sprava);.

Dokumentácia verejného API robota pomocou nástroja Doxygen

Dokumentácia vývojárskeho API na prispievanie do projektu

Písanie testov a overovanie úspešnosti

Práca na vlastnom kóde robota prebieha výhradne v adresári (balíku) Test, nachádzajúcom sa v adresári projektu. Obsahuje 3 triedy s fázami hry prebiehajúcimi v nasledujúcom poradí:

Na voľbe umiestnenia kódu síce striktne nezáleží, ale dodržanie tejto štruktúry výrazne zlepší prehľadnosť kódu. Každá trieda obsahuje jednu hlavnú public void metódu, kde sa má nachádzať váš kód, a ktorá poskytuje cez vstupný parameter funkciu startNextStage, ktorej zavolanie ako startNextStage(); spustí nasledujúcu fázu. Prvou fázou je teda EconomyStage. Okrem týchto tried je povolené ľubovoľné vytváranie ďalších tried. Príkladom je pripravená trieda MyBot.

Po akejkoľvek zmene je možnosť projekt spustiť a nechať zbehnúť testy, čím sa overí ako správnosť syntaxe, tak aj správne využitie funkcií.

Diagram Tried dostupného rozhrania

Class Diagram

Návod ku programátorskému rozhraniu hry (API)

Adresár (balíček) s poskytovaným API hry sa nazýva Game a na vyššie uvedenom obrázku sú znázornené všetky jeho časti. Táto sekcia obsahuje podrobný popis každej z nich, ale pozostáva iba z verejne viditeľných členov (public). Nadpis každej triedy obsahuje v zátvorke úplne jednoznačný názov, ktorý v prípade priloženia sekcie using nie je potrebné písať namiesto skráteného tvaru. Sekcia ‘using’ sa pre danú triedu vytvorí napríklad stlačením kombinácie kláves CTRL+BODKA vo Visual Studiu alebo ALT+ENTER pri používaní skratiek programu Rider nad názvom triedy v kóde a zvolením tejto voľby.


Trieda Event (XposeCraft.Game.Event)

Dátové členy:

Delegáty:

Statické metódy:

Metódy:

Použitie:

Príklad:

var registeredEvent = Event.Register(EventType.EnemyUnitsOnSight, args => {
	foreach(Worker worker in UnitHelper.GetUnits<Worker>()) {
		worker.MoveTo(PlaceType.NearBase);
	}
});
// When the event is not needed anymore
event.UnregisterEvent();

Trieda Arguments (XposeCraft.Game.Arguments)

Dátové členy:

Použitie:


Enumeračný typ EventType (XposeCraft.Game.Enums)

Použitie:

Možnosti + ich dostupné argumenty pre Event:

Príklad:

Event.Register(EventType.EnemyUnitsOnSight, args => {
	foreach(IUnit unit in UnitHelper.GetUnits<DonkeyGun>()) {
		unit.Attack(args.EnemyUnits[0]);
	}
});

Trieda UnitHelper (XposeCraft.Game.Helpers.UnitHelper)

Statické metódy:

Použitie:

Príklad:

if(UnitHelper.GetUnits<Worker>().Length < 5) {
	foreach(Worker worker in UnitHelper.GetUnits<Worker>()) {
		worker.MoveTo(PlaceType.NearBase);
	}
}

Úlohy

Scenár č. 1: Nastavenie vývojárskeho prostredia pre programovanie robota.

Scenár č. 2: Splnenie základných úloh v rámci ekonomickej fázy hry pre získanie dostatočného množstva surovín.

Scenár č. 3: Vytvorenie budovy a vytváranie jednotiek použitím nazbieraných surovín.

Scenár č. 4: Zaútočenie na nepriateľa.

Ukončenie testu

Po vykonaní všetkých požadovaných testov stačí odovzdať váš zdrojový kód osobne dopredu dohodnutým spôsobom - stačí napríklad zazipovať adresár Test, keďže očakávam, že všetky zmeny nastali iba tam.

Diskusia

Vstup na disqus