V dnešním posledním díle tutoriálu si prohlédneme zbývající prvky Machinations. Podíváme se na zoubek registrům, zpomalovačům a grafům, konečně si povíme také něco o barevném kódování a podíváme se na možnosti exportu dat a automatického testování.

Register (Registr)

Vrátíme-li se k modelu Warcraftu, jedna z věcí, která nebyla zachycena, je pravidlo slotů ve zlatých dolech. Každý důl, který vlastníte, vám umožní zaměstnat maximálně 5 peonů na důl (můžete jich sice poslat více, ale v jednu chvíli uvnitř dolu nebude nikdy víc, než pět dělníků). K vyjádření tohoto pravidla slouží registry.

Registr je element, jehož hodnota je rovna jeho výrazu, přičemž jeho proměnné jsou určeny vstupními stavovými modifikátory a  pravá strana výrazu je určena hodnotou výstupního modifikátoru. Můžete tedy k registru připojit sklad vyjadřující počet vlastněných dolů, sklad s počtem dělníků v dolech a výstupní modifikátor s hodnotou >0. Poté stačí určit výraz jako (5*“počet dolů“ – „počet dělníků v dolech“) a připojit výstupní modifikátor k bráně, která umožní posílat peony do dolů.

Pokud bude výraz větší než 0, je možno posílat další peony a řídící brána se stane aktivní. Pomocí matematických výrazů pak lze nadefinovat celá řada podmínek. Pokud například chcete umožnit, aby hráč  mohl poslat 10 dělníků do dolů i když žádný důl nemá (bůh ví proč), stačí upravit výraz na 5a-b+10. Nebo naopak pokud chcete, aby první důl žádné sloty neuvolnil, můžete výraz upravit na 5a-b-5. Jako bonus v současné době existují 3 matematické funkce, které můžete použít jako hodnotu výrazu.

  • add –hodnota registru je rovna součtu hodnot všech prvků připojených vstupními proudy
  • min – minimální hodnota všech vstupních prvků je rovna hodnotě registru
  • max – maximální hodnota všech vstupních prvků je rovna hodnotě registru

Bohužel v současné době výraz add nefunguje. Můžete ho však jednoduše nahradit tím, že namísto písmen označíte vstupní modifikátory registru hodnotou +1.

Registry také mohou být interaktivní. V takovém případě můžete měnit hodnotu registru za chodu. Konceptuálně je interaktivní registr to samé jako sklad připojený ke konzumentovi a producentovi.

Výstupem registru ovšem nemusí být pouze nějaká podmínka. Může to být i klasický modifikátor. Jako například zde:

A stejně tak můžete propojovat i více registrů najednou:

Více příkladu užití naleznete na oficiální Wiki Machinations.

S registry lze vytvořit velmi dynamická omezení v rámci modelu herních mechanik, takže si je doporučuju pořádně vyzkoušet a nezapomínat na ně až budete vytvářet vlastní modely.

Delay(Zpomalovač)

V některých případech je surovina odebrána mnohem dříve, než je ve skutečnosti znát důsledek jejího odebrání. Typicky je to například výroba jednotek ve strategických hrách. Přestože suroviny jsou odečteny okamžitě, jednotka je vyprodukována až s určitým zpožděním. K vyjádření takového prvku slouží zpomalovač.

Zpomalovač vždy přijme surovinu a pozdrží ji po určitý počet intervalů. Ten je dán hodnotou výstupního proudu. Zpomalovač může být v jednom ze dvou režimů:

  • Klasický – každou surovinu, kterou obdrží, zdrží přesně na délku daného počtu intervalů
  • Fronta (queue) – intervalu propustí maximálně jednu surovinu. Ostatní se řadí do fronty.

Vyzkoušet si to můžete na následujícím modelu:

Zpomalovač má také hodnotu a může sám fungovat jako aktivátor. Jeho hodnota je rovna počtu surovin, které aktuálně zdržuje. Stejně tak může figurovat jako trigger. Ten se spustí vždy, když zpomalovač propustí surovinu.

Color Coding(Barevné kódování)

Barvy hrají v Machinations zásadní roli a doplňují informace o způsobu proudění surovin, ale především slouží k vyjádření typu suroviny. Ve spoustě hrách hráč operuje s mnoha druhy surovin a mnoho z nich se také promíchá ve stejném skladu. Barevné kódování vám umožní vytvořit pravidla, která rozhodnou o tom, jak s tou kterou surovinou daného typu nakládat.

Základní charakteristikou barevného kódování je následující pravidlo:

Pakliže se barva zdroje liší od barvy vstupního či výstupního proudu skladu, surovina nemůže projít skrz.

Toto pravidlo však platí pouze v případě, že jste v obecných nastaveních diagramu zaškrtli „Color Coding“. Poté můžete vytvořit například situaci jako tuto:

Producent vytváří současně jak červené, tak žluté zdroje. Konzument je ovšem přijímá v různém množství. Pakliže bude zapnuto barevné kódování, v souladu s výše uvedenou podmínkou se do červeného proudu dostane vždy jen červená surovina apod. Důležité ale je, že barva skladu se od barvy proudu liší. Pokud bychom měli tuto situaci:

Pak by červeným proudem procházely i žluté suroviny (ovšem pro žlutý proud je podmínka stále platná – barva se liší, takže zde se nic nemění). Krom toho však existuje v Machinations několik speciálních případů, kdy barvy figurují i v jiném smyslu. Podívejme se tedy na následující model:

Část A si můžete vyzkoušet čistě pro ilustraci základního pravidla barevného kódování. Vyzkoušejte si různé varianty se zapnutým i vypnutým kódováním a sledujte, jak se diagram chová. Přesto ale obsahuje první výjimku. A tou je label „all“.

Pakliže označíte label jako all, podmínka color codingu je zde aplikována bez ohledu na to, zda ho máte zapnuto. Paradoxně oproti tomu label formátu „drawx“ implicitně color coding ignoruje. Tedy nebere ohled na barvu proudu či skladu, ani na nastavení diagramu a suroviny projdou vždy.

Podívejme se nyní na část B s obchodníkem. Zde barvy určují také cestu surovin mezi subjekty transakce. Surovina bez ohledu na svou vlastní barvu je vyslána do výstupního proudu stejné barvy jako proudu vstupního, po kterém přišla. Tato funkce však nijak neblokuje funkci barevného kódování jako takového.

Nakonec v části C vidíte další využití barev pomocí konvertoru. Zde barva výstupního proudu určuje typ (barvu) suroviny, kterou konvertor vyprodukuje. Stejné je to i s producenty (viz. příklady výše). Na barvy vstupních proudů konvertoru se však stále vztahuje pravidlo barevného kódování (je-li zapnuto).

Seznam všech použitelných barev naleznete zde.

Artificial Player(Umělá inteligence)

Při balancování hotového modelu je jistě velmi otravné a náročné testovat jej neustále dokola. Speciálně pokud je model komplexní a trvá dlouho jej otestovat. V takovém případě můžete využít služeb umělé inteligence.

Umělá inteligence je v podstatě pouze skript, který se vykoná vždy v určitý moment. Může být stejně jako sklad v jednom ze čtyř módů, které se svou funkcí ničím neliší. Většinou se ale používá automatický mód.

Každý řádek skriptu může obsahovat příkaz a podmínku jeho vykonání. V daném časovém intervalu se pak vždy řádek po řádku skript vyhodnotí a vykoná. Databáze příkazů v oficiální dokumentaci však prozatím prakticky neexistuje a tak se mi podařilo zjistit pouze následující dva:

Syntaxe Příkad Efekt
fire(element) fire(Buy army) Vyvolá akci cílového elementu(pull, push). Jako parametr příkazu se uvádí název (label) cílového elementu bez ohledu na jeho mód (passive, active atd.). Název je citlivý na velká písmena.
fireRandom(element1, element2, …) fireRandom(Buy army, Buy army, Buy peon) Funguje stejně, jako fire, přičemž náhodně zvolí jeden z udaných elementů. Počet parametrů je libovolný (alespoň 1) a pro zvýšení váhy určitého elementu jej můžete uvést vícekrát (v uvedeném příkladu jsou váhy 2:1).


Pokud víte, jak se v programování definuje podmínka, můžete směle přeskočit na další kapitolu. Podmínka se definuje klíčovým slovem if a za ní následuje závorka s definicí podmínky. Tedy např.:

  • if(Money>Woods) fire(Sell woods)

„Nebo“ se vyjadřuje pomocí dvou svislítek: „||“, „a současně“ se vyjadřuje pomocí ampersandů: „&&“. Závorky lze také vnořovat a seskupovat tak různé podmínky. Jako např.:

  • if(Peons > 5 || (Woods/50 > Peons   && Gold/50 > Peons)) fire(Buy army)

Tedy pokud máte více než 5 peonů nebo máte dostatek surovin na to, abyste jejich počet zdvojnásobili (jeden peon stojí 50 dřeva a zlata), kup armádu. Běžně se v programování používá také klíčové slovo else, což definuje situaci, kdy podmínka neplatí. Toto však v Machinations prozatím nefunguje. Musíte definovat nový řádek skriptu, kde uvedete reverzní množinu podmínky. Tedy např.:

  • if (Peons >= 5) fire(Buy army)
  • if (Peons < 5) fire(Buy peons)

Graf

Grafy jsou velmi užitečné pro kolekci dat, generovaných modelem. Pomocí stavového modifikátoru(pozor, proudy nefungují) k nim můžete připojit elementy a graf už bude automaticky zaznamenávat informace o jejich hodnotách a zakreslovat je křivkou.

Pro lepší názornost je po propojení viditelná pouze část stavového modifikátoru. Nastavením jeho barvy můžete určit barvu křivky grafu, kterou reprezentuje. Data můžete také exportovat pro použití jinými nástroji k hlubší analýze. Vyzkoušejte si funkce grafu na následujícím modelu:

Automatické testování

Mnohem silnější je ovšem graf v kombinaci s automatickými testy. Už jsme si ukázali jak vytvářet umělou inteligenci, která simuluje akce hráče v průběhu modelu. Také víme, jak zaznamenávat data. Ale bez automatických zrychlených testů by to přeci jen moc užitečné nebylo. A k tomu slouží záložka Run.  Ta obsahuje dvě tlačítka:

  • Quick Run – spustí diagram s velmi krátkým časovým intervalem
  • Multiple Runs – spustí (bez animace) velké množství zrychlených testů a zaznamená jejich výsledky do grafu. Položkou runs lze specifikovat množství těchto testů a položkou visible runs lze měnit počet čar, které v grafu transparují z předchozích testů.

Dejte si pozor na ukončování diagramu. Velké množství nekonečných smyček způsobí pád aplikace. Bohužel grafy neumějí generovat průměrné hodnoty a proto musíte využít jejich funkce na export dat a zjistit si je sami např. pomocí Excelu.

Export modelu

Struktura a informace o modelu jsou uloženy ve formátu XML. Ten můžete získat v záložce File tlačítkem Save, nebo pomocí Export Selection pro pouze vybrané prvky. Nezapomeňte si ale dopsat koncovku .xml na konec názvu souboru .Machinations Tool to za vás neudělá.

Stejné to je i s exportem do formátu SVG tlačítkem Save as SVG. Tlačítkem Open můžete nahrát diagram a tlačítkem Import vložíte diagram do aktuálního modelu.

Group a TextLabel

Tyto prvky uvádím pouze pro úplnost. Umožní vám vizuálně odlišit a pojmenovat části grafu.

Gratuluji, došli jste až na konec. Už není nic, co bychom z aktuální verze Machinations neprozkoumali. Přesto ale náš seriál nekončí! V příštím díle se podíváme na rekurentní patterny, vycházející z Machinations modelů a budeme pokračovat i posléze. Machinations má mnoho zajímavého co nabídnout a tohle byl jen začátek.

Nashledanou příště 🙂

Zanechej komentář

K zanechání komentáře ke článku musíte být přihlášen. Přihlásit »