Jak asi víte, psaní Wherigo her je realizováno pomocí programovacího jazyku LUA. V krátké sérii článků bych Vám chtěl přiblížit aspekty a výhody LUA jazyka, odpovědět na otázku, proč je pro Wherigo tak vhodný a také se naučit jeho specifika. Ačkoli je to značně nekomfortní, cartridge se dá napsat i rovnou ve zdrojovém kódu a dnes si asi tu nejjednodušší cartridge napíšeme.
LUA je vysokoúrovňový skriptovací jazyk, podobně jako třeba Javascript. V aktuální verzi 5.1 je vydán pod licencí GPL a proto ho můžete využívat i ke komerčním účelům zadarmo. Jeho největší výhodou je, že velice snadno spolupracuje s Céčkem a proto je velice vhodný jako nadstavba na již existující aplikaci pro uživatelské scriptování (a to i třeba pro Oregon, či Colorado, jejichž software je psaný také v céčku). Ač se možná zdá, že je to jazyk primitivní, opak je pravdou. LUA je moderní jazyk, na ukázku jmenuji pár buzzwords: garbage collector, dynamické typování, objekty (i když trochu jinak než je možná znáte), paralelní programování (!)… Krom Wheriga se s ním můžeme setkat ještě v mnoha počítačových hrách (Word of Warcraft, S.T.A.L.K.E.R., Crysis, Half-Life 2…) či programech (pluginy pro Apache server, editor SciTe, VLC media player a Adobe Photoshop Lightroom).
Pokud jste již na jazyk správně nalazeni, můžeme se pustit do krátkého úvodu. Budu předpokládat, že už jste někdy nějaký prográmek naprogramovali, a tudíž tušíte, co je to for cyklus, proměná atd. Základní aspekty LUA:
1 2 3 4 5 6 7 | local x; --vytvoření lokální proměnné, není přiřazena hodnota takže ani typ local y; x = 10; --hodnotě 10 je přiřazen automaticky typ number y = "ahoj"; -- do proměnné y je přiřazena hodnota typu string print(x, y); -- vypíše obě proměnné print(x .. y); -- pomocí .. se spojují dva řetězce, v x je uložena hodnota typu number a proto se automaticky převede na string a pak se spojí print(x + y); --pokus o sečtení hodnoty number a string, skončí chybou |
1 2 3 4 5 6 7 8 9 | x=10 -- vytvoreni globalni promenne x print("globalni x=", x) -- vytisknu obsah proměnné x do -- zacatek bloku local x=20 -- vytvoreni lokalni promenne x, bude platná jen v bloku, kde je definovaná print("lokalni x=", x) -- vytisknu obsah proměnné x end -- konec bloku print("globalni x=", x) -- vytisknu obsah proměnné x, x už zase ukazuje na tu původní globální proměnou. |
Tak, to by myslím mohlo pro začátek stačit (více příště) a teď už si naprogramujeme nejjednuduší aplikaci Ahoj světe. Je to opravdu velice jednoduché:
print("Ahoj svete");
Uvedený kód zkopírujeme do webového interpreta na adrese http://www.lua.org/cgi-bin/demo a stiskneme tlačítko Run. Vidíte, že to snad ani nemůže být lehčí. Zkuste si tam ještě zkopírovat oba ukázkové kódy uvedené výše a spustit.
Uvedená jednořádková aplikace se nám ale nespustí ve wherigu, pro vytvoření jednoduché cartridge ahoj světe musíme napsat řádek trochu více. Otevřete si libovolný textový editor a vložte do něj následující kód:
1 2 3 4 5 6 7 8 | require "Wherigo" cart = Wherigo.ZCartridge() cart.Name="Ahoj Svete" cart.StartingLocation = Wherigo.INVALID_ZONEPOINT function cart.OnStart() Wherigo.MessageBox("Ahoj svete") end return cart |
Nyní si tento kód řádek po řádku popíšeme (pokud to přestanete chápat, klidně tento výčet bodů přeskočte):
Vidíte i že takto jednoduchý kód je ve skutečnosti docela složitý, v další dílech seriálu se pokusíme dopracovat k jeho skutečné podstatě.
Vraťmě se k tomu textovému editoru, kde máme vložen náš zdrojový kód. Uložte ho jako soubor s příponou .lua. Spusťte Wherigo Builder, ale nedávejte File -> Open (tenhle zdroják nepůjde totiž otevřít, je pro Builder moc jednoduchý).
Místo toho zvolte Tools -> Compile a cartridge …, vyberte náš soubor .lua a zvolte kam se má cartridge uložit a pro jaké zařízení zkompilovat.
Nyní cartridge vyzkoušejte buď v emulátoru (Tools -> Emulator…) nebo třeba ve vašem Oregonu:
To bylo pro dnešek vše, pokusil jsem se Vás na LUA trochu nalákat, ukázat, že je to jazyk docela komplexní a mocný. V dalších dílech seriálu se podíváme hlouběji hlavně na tu tvorbu objektů, protože je to ve Wherigo hodně využíváno (jak vidíte i v našem jednoduchém příkladu.
Pokud budete mít k tomuto článku jakékoli dotazy, neváhejte je napsat do diskuse. Rovněž připomínky a nápady na další pokračování jsou vítány.
Perfektní tutoriál. Doufám, že bude pokračovat dál a já se konečně naučím programovat Wherigo a snad konečně nějaké vytvořím . Jen tak dál
Ahoj, vím že existuje zvýrazňovač syntaxe wherigo cartridge pod PSPad. Bylo by možné dát sem i odkaz ke stžení?
Je nějaký nástroj na kontrolu chyb, který by označil chybu a ne se zhroutil, jako to dělá builder?
Bohužel ne, možná nějaký obecný kontrolor LUA syntaxe, ale 100% by neodhalil chyby se špatnou syntaxí Wherigo objektů, takže by to bylo polovičaté řešení.
Když Builder hlásí chybu, doporučuji mazat různé části kódu a dobrat se tak k tomu, kde ta chybka je…
A samozřejmě: zálohovat
Opravdu je jedinné povinné API, které musí cartridge poskytovat atribut ‘startingLocation’, a metoda ‘onStart’?
Je někde referenční příručka na funkce, které lze z modulu Whereigo používat? (tj ten MessageBox apod)
[...] nejde? Je třeba si uvědomit, co přesně příkaz require dělá. Pokud jste četli první díl seriálu o LUA, víte že LUA je scriptovací jazyk a jako takový se nijak nekompiluje. GWC soubor není [...]