Příkazové skripty Procedurální jazyky Lua a ostatní

Podobné dokumenty
Zápis programu v jazyce C#

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Algoritmizace a programování

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

ADT/ADS = abstraktní datové typy / struktury

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Programovací jazyk Pascal

Programování v C++ 2, 4. cvičení

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Algoritmizace a programování

Skriptovací jazyky. Obsah

Jazyk C# a platforma.net

Generické programování

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Prezentace a vysvětlení programového prostředí NXC

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

6. Příkazy a řídící struktury v Javě

Herní engine. Co je Engine Hotové enginy Jemný úvod do game designu

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Programování v C++ 1, 1. cvičení

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Struktura programu v době běhu

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Algoritmizace a programování

Úvod do programování - Java. Cvičení č.4

DTP Základy programování Úvod do předmětu

Více o konstruktorech a destruktorech

Program a životní cyklus programu

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Konstruktory a destruktory

Generování vnitřní reprezentace programu

Software602 Form Designer

Programování v C++, 2. cvičení

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Programování v jazyce JavaScript

Programovací jazyky Přehled a vývoj

Skripty základy VB, vestavěné objekty, příklady

Šablony, kontejnery a iterátory

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Elementární datové typy

Vstupní požadavky, doporučení a metodické pokyny

Programovací jazyk C++ Hodina 1

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Opakování programování

KTE / ZPE Informační technologie

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

NSWI096 - INTERNET JavaScript

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Konečný automat. Jan Kybic.

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

JavaScript 101. "Trocha života do statických stránek"

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

PB161 Programování v jazyce C++ Přednáška 4

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

IB111 Programování a algoritmizace. Programovací jazyky

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Procesy a vlákna (Processes and Threads)

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

PŘETĚŽOVÁNÍ OPERÁTORŮ

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Algoritmizace a programování

Lexikální analýza Teorie programovacích jazyků

ÚVOD DO OPERAČNÍCH SYSTÉMŮ. Vývoj SW aplikací. Unix, POSIX, WinAPI, programování komunikace s periferními zařízeními, ovladače zařízení

Profilová část maturitní zkoušky 2017/2018

Inovace bakalářského studijního oboru Aplikovaná chemie

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Základy programování (IZP)

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

PREPROCESOR POKRAČOVÁNÍ

NPRG031 Programování II --- 2/2 Z, Zk

Základy algoritmizace a programování

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Úvod do programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

První kapitola úvod do problematiky

Transkript:

Počítačové hry Skriptování Obsah přednášky Skriptování Příkazové skripty Procedurální jazyky Lua a ostatní

Literatura a odkazy http://www.lua.org/ http://www.python.org/ Dalmau. Core Techniques and Algorithms in Game Programming. 2003 Varanese. Game Scripting Mastery. 2003 Příkládek na začátek RPG Věc struct Item { string Name ; ItemTypeEnum Type ; int Price ; double Power ; Naplnění místnosti Item [] items = new Item [128];... items [0]. Name = " Heal Potion lvl 1"; items [0]. Type = ItemTypeEnum. Heal ; items [0]. Price = 10; items [0]. Power =.1;... Pokud nevyhovuje, musím přepsat a PŘELOŽIT

Externí soubor Možnost uložit data do externího souboru Heal Potion lvl 1 Heal 10.1 Co když chci složitější logiku? MR funguje jen pro kouzelnice s levelem 5 a výš enum ItemTypeEnum = {..., Magic_Wizardress_Above_Level_5,... Potřeba komplexnějšího formátu K čemu skriptování Úplné oddělení enginu a dat grafika audio... obsah Bezpečnost chyba ve skriptu by neměla být kritická pro zbytek

Způsoby skriptování Použitý jazyk příkazové skripty (jednoduchá syntax, velmi omezené možnosti) procedurální/objektové jazyky dynamické moduly (pozor na bezpečnost) Způsob spuštění interpretovaný jazyk kompilovaný jazyk Princip virtuálního stroje SW implementace procesoru vlastní sada instrukcí běží uvnitř hostitelské aplikace komunikace s nižší vrstvou na základě rozhraní VM loader Script VM Aplikace OS CPU HDD

Využití skriptů RPG vyprávění příběhu NPC zbraně a předměty nepřátelé FPS logika světa AI... Příkazové skripty Příkaz symbolické jméno označující funkci enginu nebo akci může obsahovat parametry Příkaz param1 param2... je závislý na konkrétní aplikaci Výhody snadná a rychlá implementace Nevýhody omezenost

Struktura VM Výčet (op. kódy) jednotlivých příkazů enum OpCodes { NPCTalk = 1, PlayerTalk = 2,... Struktura pro uložení příkazu struct Command { OpCodes opcode ; object [] params ; Metody pro načtení a spuštění skriptu Struktura VM Načtení foreach ( line in script ) { part = Split ( line ); command = new Command (); command. opcode = ConvertTextToOpCode ( part [0]); switch ( command. opcode ) { case OpCodes. NPCTalk : command. params [0] = part [1];... commandstack. Push ( command );

Struktura VM Spuštění foreach ( command in commandstack ) { switch ( command. opcode ) { case OpCodes. NPCTalk : CreateNPCTextBubble ( command. params [0]); AnimateNPCMouth ( command. params [0]); MakeFunnyNPCSounds ();... stack. Push ( command ); Ukázka RPG dialogu NPCTalk " Tak co mladej? Co to bude?" PlayerTalk "He?" NPCTalk " Plazmatickej anihilátor? Iontovej kvazifikátor?" PlayerTalk " Eee?" NPCTalk "(To je zas materiál...) Zatim si vem tohle!" NPCAnim GiveItem GetItem TinOpener NPCTalk "S tim si snad neublížíš... "

Přidání podmínek Lepší kontrola chování Příkaz ve tvaru: rule : condition => command command... Ukázka RPG dialogu rule : visit greater 0 => NPCTalk "To seš zase ty? Tak co to bude?" PlayerTalk "já... JÁ BYCH CHTĚL TEN KVAZIFIKÁTOR? ( myslim )" NPCTalk " Dobrá volba!" PlayAnim GiveBigItem GetItem Quasificator rule : visit equal 0 => NPCTalk " Tak co mladej? Co to bude?" PlayerTalk "He?" NPCTalk " Plazmatickej anihilátor? Iontovej kvazifikátor?" PlayerTalk " Eee?" NPCTalk "(To je zas materiál...) Zatim si vem tohle!" PlayAnim GiveSmallItem GetItem TinOpener NPCTalk "S tim si snad neublížíš... " Increase visit

Procedurální skripty Jazyky se složitou strukturou většinou založeny na C Nutnost porozumět jazyku a přeložit do jazyka VM VM spouští přeložený kód Překlad jazyka Předmět FJP :-) 1. Lexikální analýza 2. Parsování/Syntaktická analýza 3. Sémantická analýza 4. Vytvoření intermediate kódu 5. Optimalizace 6. Assembler

Front End a Back End Front End Analýza kódu a vytvoření i-kódu Back End Optimalizace a vytvoření low-level kódu Rozdělení umožňuje snadnou náhradu jedné či druhé části např. místo C stylu použít Pascalský jazyk Ukázka RPG dialogu run () { if( visit ==0) { NPCTalk (" Tak co mladej? Co to bude?");... visit =1; else { answer = NPCAsk ("To seš zase ty? Tak co to bude?", "er... "," kvazifikátor "); if( answer ==" kvazifikátor ") { PlayerTalk ("já... JÁ BYCH CHTĚL TEN KVAZIFIKÁTOR?"); NPCTalk (" Dobrá volba!"); PlayAnim ( GiveBigItem ); GetItem ( Quasificator ); hasweapon = true ; else { NPCTalk (" Napřed se nauč s tim co máš!");

Integrace scriptů do programu Nelze volat metody přímo kódy běží na jiném procesoru nesdílejí stejnou paměť Export funkcí do skriptu zaregistrování ukazatele na funkci VM.RegisterFunction("name",functionInfo) Import funkcí do jazyka zavolání VM funkce VM.Call(function) Jazyk Lua Jednoduchý jazyk a skriptovací systém syntaxe je mix mezi C, Pascalem... Knihovna Lua nabízí základní operace s VM inicializace, ukončení, nahrání a spuštění skriptu interface pro import a export metod součástí je i compiler navázání na.net LuaInterface

Konstrukce jazyka Lua Komentáře pouze jednořádkové -- toto je komentář Konstrukce jazyka Lua Proměnné netypované nemusí být nutně deklarované (lepší pokud jsou) identifikátory má stejný tvar jako v C x,y =5,3; t=" ahoj "; x,t=t,x;

nil neinicializovaná proměnná Konstrukce jazyka Lua Datové typy Čísla desetinná nebo celá - nerozlišuje se Řetězce Funkce ukazatel na funkci Tabulky komplexní struktura Uživatelská data speciální typy odpovídající ukazatelům Konstrukce jazyka Lua Tabulky asociativní pole standardně indexovaná od 1 mohou být heterogenní indexy mohou být řetězce přístup přes. Item = {; Item [" name "] = " Heal Potion lvl 1"; Item. type = " Heal "; Item. Price = 10; Item. Power = 1.;

Konstrukce jazyka Lua Operátory aritmetické +, -, =, *, /, ^,.. relační ==, ~=, <, >, <=, >= logické and, or, not Konstrukce jazyka Lua Podmínky if výraz then blok ; elseif výraz then blok ; else blok ; end

Konstrukce jazyka Lua Cykly while výraz do blok ; end for index = start, stop, step do blok ; end for klíč, hodnota in tabulka do blok ; end repeat blok ; until výraz Konstrukce jazyka Lua Funkce proměnné jsou globální, pokud se nepoužije local na funkce se lze odkazovat reference = Funkce; reference(); reference může být přiřazena i elementu tabulky náhrada OOP function Funkce ( parametr, parametr,...) return hodnota end

Konstrukce jazyka Lua Export funkcí nastavit k jakému skriptu se vztahuje spojit názvem dodat ukazatel na funkci v C se předávání parametrů zajišťuje přes zásobník Lua lua_register ( pluastate, název, ukazatel ) Konstrukce jazyka Lua Import funkcí umístit adresu funkce do zásobníku do zásobníku Lua umístit parametry zavolat funkci lua_getglobal ( pluastate, název ); lua_pushnumber ( pluastate, parametr ); lua_call ( pluastate, početvstupů, početvýstupů );

Konstrukce jazyka Lua Přístup ke globálním proměnným umístit proměnnou do zásobníku přečíst zásobník odebrat ze zásobníku lua_getglobal ( pluastate, název ); lua_tonumber ( pluastate, 1); lua_pop ( pluastate, 1); Lua a.net Pro.NET existuje LuaInterface obaluje inteligentně funkce Lua export funkcí pomocí RegisterFunction automaticky se stará o parametry na globální proměnné lze přistupovat přes indexer instance import funkcí pomocí delegátů delegate GetFunction(...) funkce se pak volá přímo Ukázka spojení Lua a.net http://www.gamedev.net/reference/articles/article2275.asp

Konec Konec