SlideShare a Scribd company logo
1 of 83
A Linguagem Lua e suas Aplicações em Jogos Waldemar Celes Luiz Henrique de Figueiredo Roberto Ierusalimschy
Linguagens de script em jogos
Linguagens de script em Jogos ,[object Object],[object Object]
Pra qu ê? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Por quê? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Interpretada ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tipagem Dinâmica ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Gerência Automática de Memória ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estruturas Dinâmicas ,[object Object],[object Object],[object Object],[object Object],[object Object]
Manipulação de Strings ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Linguagens Seguras ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Programação com Componentes ,[object Object],[object Object],[object Object],[object Object]
Linguagens de script (extensão) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemplos de linguagens de scripts ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lua em jogos
Lua em Jogos ,[object Object],[object Object],[object Object]
De fato... ,[object Object],[object Object],[object Object]
Grim Fandango –  Lucasarts ,[object Object],[object Object]
Escape from Monkey Island –  Lucasarts ,[object Object],[object Object]
Psychonauts –  Double Fine ,[object Object],[object Object],[object Object],[object Object]
Baldur’s Gate –  Bioware ,[object Object],[object Object],[object Object],[object Object],[object Object]
Impossible Creatures –  Relic ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FarCry –  Crytek ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Por que Lua? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
História de Lua
Construção de Interfaces Gráficas ,[object Object],[object Object],d
DEL Linguagem para Especificação de Diálogos ,[object Object],[object Object],[object Object],:e gasket "gasket properties"  mat  s  # material  d   f  0  #  distance   y  f  0  # settlement stress  t  i  1  # facing type  d
Limitações de DEL ,[object Object],[object Object],[object Object],:e gasket &quot;gasket properties&quot;  mat  s  # material  d   f  0  #  distance   y  f  0  # settlement stress  t  i  1  # facing type  :p gasket.m>30  gasket.m<3000  gasket.y>335.8  gasket.y<2576.8  d
Programa Gráfico Mestre ,[object Object],[object Object],[object Object]
SOL Simple Object Language ,[object Object],[object Object],- defines a type `track', with numeric attributes `x' and `y', - plus an untyped attribute `z'. `y' and `z' have default values. type @track { x:number,y:number= 23, z :number =0} - defines a type `line', with attributes `t' (a track), - and `z', a list of numbers. - `t' has as default value a track with x=8, y=23, and z=0. type @line { t:@track=@track{x=8},z:number*} - creates an object 't1', of type `track' t1 = @track { y = 9, x = 10, z=&quot;hi!&quot;} - creates a line 'l', with t=@track{x=9, y=10}, - and z=[2,3,4] (a list) l = @line { t= @track{x=t1.y, y=t1.x}, z=[2,3,4] }
Limitações de SOL ,[object Object],[object Object]
1994: Nasce Lua ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
A linguagem Lua ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lua no Tecgraf ,[object Object]
A Linguagem Lua
Como é Lua? ,[object Object],[object Object],[object Object],[object Object],function fat (n) if n == 0 then return 1 else return n*fat(n-1) end end
Execução de um  chunk ,[object Object],[object Object],[object Object],[object Object]
Tipos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tipo  nil ,[object Object],[object Object],[object Object],[object Object],[object Object]
Tipo  boolean ,[object Object],[object Object]
Tipo  number ,[object Object],[object Object],local a = 3 local b = 3.5 local c = 4.5e-8
Tipo  string ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tipo  table ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estruturas de Dados  com tabelas ,[object Object],[object Object],[object Object],t = {} t.x = 10 t.y = 20 print(t.x, t.y) print(t[&quot;x&quot;], t[&quot;y&quot;])
Estruturas de Dados  com tabelas  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],for i=1,n do print(a[i]) end t = {} t[x] = 1  -- t = t    {x} if t[x] then... -- x    t?
Estruturas  de Dados com tabelas (3) ,[object Object],[object Object],list old list ... value - v next - list = {value=v, next=list}
Tipo  function ,[object Object],w = { redraw = function () ... end, pick = function (x,y) ... end, } if w.pick(x,y) then w.redraw() end ,[object Object],function inc (x) return x+1 end inc = function (x) return x+1 end   sugar
Tipo  function  (2) function f() return 1,2 end a, b = f() print(f()) ,[object Object],[object Object],[object Object],[object Object],function f(...) print(arg[1], arg[2]) end
Escopo léxico ,[object Object],[object Object],[object Object],function add (x) return function (y) return y+x end end add1 = add(1) print(add1(10)) --> 11 upvalue
Construtores ,[object Object],[object Object],article{ author= &quot; F.P.Brooks &quot; , title= &quot; The Mythical Man-Month &quot; , year=1975 } temp = {} temp[&quot;author&quot;] = &quot;F.P.Brooks&quot; temp[&quot;title&quot;] = &quot;The Mythical Man-Month&quot; temp[&quot;year&quot;] = 1975 article(temp)
Objetos ,[object Object],[object Object],[object Object],[object Object],[object Object],a.foo(a,x) a:foo(x) a.foo = function (self,x) ... end function a:foo (x) ... end sugar sugar
Tipo  userdata ,[object Object],[object Object],[object Object],[object Object],[object Object]
Extensão de Tipos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemplo: tipo  Point -- Metatable de Point local Point_metatable = { __add = function (p1,p2) return Point(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z} end } --  Construtor function Point (self) self.x = tonumber(self.x) or 0.0 self.y = tonumber(self.y) or 0.0 self.z = tonumber(self.z) or 0.0 setmetatable(self,Point_metatable) return self end ----------------------------------------------- local p = Point{x=3.0,y=1.3,z=3.2} local q = Point{x=4.2,y=1.0} local r = p+q  -- {7.2, 2.3, 3.2}
Herança Simples: mecanismo de delegação -- Métodos local Point_methods = { Print = function (self) print(self.x, self.y, self.z) end, ... } -- Metatable local Point_metatable = { __index = Point_methods, __add = function (p1,p2) return Point(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z} end } ------------------------------------------------ local p = Point{x=3.0,y=1.3,z=3.2} local q = Point{x=4.2,y=1.0} local r = p+q r:Print()
Bibliotecas padrão ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Basic ,[object Object],[object Object],[object Object],[object Object],[object Object]
String ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Table ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Math ,[object Object],[object Object],[object Object],[object Object],[object Object]
IO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
OS ,[object Object],[object Object],[object Object],[object Object]
Debug ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Co-rotinas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Co-rotinas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemplo: simulação de personagens local simulators = { coroutine.create(function () ... end), -- simulação 1 coroutine.create(function () ... end), -- simulação 2 coroutine.create(function () ... end), -- simulação 3 ... } function manager () while true do for i,v in pairs(simulators) do coroutine.resume(v) end coroutine.yield() -- repassa para controlador externo end end
Exemplos de Integração com C/C++
Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey... LEVEL = 13 HERO = &quot;Mickey&quot;
Lua como linguagem de configuração #include &quot;lua.h&quot; #include &quot;lauxlib.h&quot; static int level=0; const char* hero=&quot;Minnie&quot;; ... int main(void) { lua_State *L=lua_open(); luaL_loadfile(L,&quot;init.lua&quot;); lua_pcall(L,0,0,0); lua_getglobal(L,&quot;LEVEL&quot;); level=lua_tonumber(L,-1); lua_getglobal(L,&quot;HERO&quot;); hero=lua_tostring(L,-1); play(level,hero); lua_close(L); return 0; }
Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey... LEVEL = 13 HERO = &quot;Mickey&quot; GREET = &quot;Bom dia &quot; .. HERO .. &quot;! Como vai&quot; SCORE = 1.2 * LEVEL
Lua como linguagem de extensão weapons = { knife = { aggression = 0.3, attackrange = 0.5, accuracy = 1.0, }, sword = { aggression = 0.5, attackrange = 1.5, accuracy = 0.8, }, ... }
Lua como linguagem de extensão double accuracy; lua_getglobal(L,”weapons”);  lua_pushstring(L,”sword”);  lua_gettable(L,-2);  lua_pushstring(L,’accuracy’);  lua_gettable(L,-2);  accuracy = lua_tonumber(L,-1);  lua_pop(L,2);
Lua como linguagem de extensão function Weapon (self) if not self.aggression then self.aggression = 0.5 -- default value elseif self.aggression < 0.0 or  self.aggression > 1.0 then ReportError(&quot;Invalid aggression value&quot;) ... return self end weapons = { knife = Weapon { aggression = 0.3, attackrange = 0.5, accuracy = 1.0, }, ... }
Lua como linguagem de extensão weapons = { knife = Weapon{ aggression = 0.3, attackrange = 0.5, accuracy = 1.0, getit = function (person) if person:HasEnoughWeapon() then person:Speak(&quot;Não preciso dessa faca&quot;) return false else person:Speak(&quot;Essa faca será util&quot;) return true end end, }, ... }
Lua como linguagem de controle ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lua como linguagem de controle ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lua como linguagem de controle ... if Hero:GetEnergy() > 0.5 then Hero:Attack() else Hero:Run() end ...
Ferramenta de integração automática
toLua ,[object Object],Variáveis Funções Classes Métodos toLua .pkg Código C/C++  usando API de Lua .c/.cpp Aplicação tolua.lib
toLua: exemplo de C  #define FALSE 0 #define TRUE 1 enum {  POINT = 100,  LINE,  POLYGON } Object* createObejct (int type); void drawObject (Object* obj, double red, double green, double blue); int isSelected (Object* obj); ... myLine = createObject(LINE) ... if isSelected(myLine) == TRUE then drawObject(myLine, 1.0, 0.0, 0.0); else drawObject(myLine, 1.0, 1.0, 1.0); end ...
toLua: exemplo de C++  #define FALSE 0 #define TRUE 1 class Shape { void draw (void); void draw (double red, double green, double blue); int isSelected (void); }; class Line : public Shape { Line (double x1, double y1, double x2, double y2); ~Line (void); }; ... myLine = Line:new (0,0,1,1) ... if myLine:isSelected() == TRUE then myLine:draw(1.0,0.0,0.0) else myLine:draw() end ... myLine:delete() ...
Para saber mais... www.lua.org
www.lua.org ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

DAX - Principais Funções.pdf
DAX - Principais Funções.pdfDAX - Principais Funções.pdf
DAX - Principais Funções.pdfSandraFaria51
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasLeinylson Fontinele
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesMauricio Volkweis Astiazara
 
Formulário de Análise Matemática
Formulário de Análise MatemáticaFormulário de Análise Matemática
Formulário de Análise MatemáticaPedro Dias
 
Discrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكرو
Discrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكروDiscrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكرو
Discrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكروDr. Khaled Bakro
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em PrologNatã Melo
 
Normalização Banco de Dados
Normalização Banco de DadosNormalização Banco de Dados
Normalização Banco de DadosKablo Skater Rail
 
Teoria elementar dos conjuntos
Teoria elementar dos conjuntosTeoria elementar dos conjuntos
Teoria elementar dos conjuntosPaula Ferreira
 
Árvores Balanceadas AVL
Árvores Balanceadas AVLÁrvores Balanceadas AVL
Árvores Balanceadas AVLDaniel Maia
 
Resumo a lógica matemática para concursos
Resumo a lógica matemática para concursosResumo a lógica matemática para concursos
Resumo a lógica matemática para concursosLuiz Ladeira
 
Turbo C Graphics and Mouse Programming
Turbo C Graphics and Mouse ProgrammingTurbo C Graphics and Mouse Programming
Turbo C Graphics and Mouse ProgrammingHuzaifa Butt
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos GrafosBianca Dantas
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaLeinylson Fontinele
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos GrafosChromus Master
 
Lisp and prolog in artificial intelligence
Lisp and prolog in artificial intelligenceLisp and prolog in artificial intelligence
Lisp and prolog in artificial intelligenceArtiSolanki5
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Aula 10 minimizaçãode automato
Aula 10   minimizaçãode automatoAula 10   minimizaçãode automato
Aula 10 minimizaçãode automatowab030
 

What's hot (20)

DAX - Principais Funções.pdf
DAX - Principais Funções.pdfDAX - Principais Funções.pdf
DAX - Principais Funções.pdf
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
Formulário de Análise Matemática
Formulário de Análise MatemáticaFormulário de Análise Matemática
Formulário de Análise Matemática
 
Aula 07 derivadas - regras de derivação - parte 1
Aula 07   derivadas - regras de derivação - parte 1Aula 07   derivadas - regras de derivação - parte 1
Aula 07 derivadas - regras de derivação - parte 1
 
Discrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكرو
Discrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكروDiscrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكرو
Discrete mathematics Ch2 Propositional Logic_Dr.khaled.Bakro د. خالد بكرو
 
Função
FunçãoFunção
Função
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
 
Normalização Banco de Dados
Normalização Banco de DadosNormalização Banco de Dados
Normalização Banco de Dados
 
Teoria elementar dos conjuntos
Teoria elementar dos conjuntosTeoria elementar dos conjuntos
Teoria elementar dos conjuntos
 
Árvores Balanceadas AVL
Árvores Balanceadas AVLÁrvores Balanceadas AVL
Árvores Balanceadas AVL
 
Resumo a lógica matemática para concursos
Resumo a lógica matemática para concursosResumo a lógica matemática para concursos
Resumo a lógica matemática para concursos
 
Turbo C Graphics and Mouse Programming
Turbo C Graphics and Mouse ProgrammingTurbo C Graphics and Mouse Programming
Turbo C Graphics and Mouse Programming
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. Costa
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos Grafos
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Lisp and prolog in artificial intelligence
Lisp and prolog in artificial intelligenceLisp and prolog in artificial intelligence
Lisp and prolog in artificial intelligence
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Aula 10 minimizaçãode automato
Aula 10   minimizaçãode automatoAula 10   minimizaçãode automato
Aula 10 minimizaçãode automato
 

Viewers also liked

Criando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKCriando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKLeonardo Dalmina
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem luaRafael Sanches
 
O professor leitor do texto do aluno: SD, reflexão linguística, reescrita
O professor leitor do texto do aluno: SD, reflexão linguística, reescritaO professor leitor do texto do aluno: SD, reflexão linguística, reescrita
O professor leitor do texto do aluno: SD, reflexão linguística, reescritaTerezinha Barroso
 
Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Ismar Silveira
 
Paradigmas de Linguagens de Programacao - Aula #6
Paradigmas de Linguagens de Programacao - Aula #6Paradigmas de Linguagens de Programacao - Aula #6
Paradigmas de Linguagens de Programacao - Aula #6Ismar Silveira
 
Paradigmas de Linguagens de Programacao - Aula #7
Paradigmas de Linguagens de Programacao - Aula #7Paradigmas de Linguagens de Programacao - Aula #7
Paradigmas de Linguagens de Programacao - Aula #7Ismar Silveira
 
Lua para Jogos
Lua para JogosLua para Jogos
Lua para JogosDavid Ruiz
 
Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Ismar Silveira
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Ismar Silveira
 
Criação de Jogos 2D com Técnicas 3D Utilizando Python e C
Criação de Jogos 2D com Técnicas 3D Utilizando Python e CCriação de Jogos 2D com Técnicas 3D Utilizando Python e C
Criação de Jogos 2D com Técnicas 3D Utilizando Python e CLeinylson Fontinele
 
Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoFabio Spanhol
 
Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...
Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...
Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...Luana Lobão
 
Curso Corona SDK - Módulo 1
Curso Corona SDK - Módulo 1Curso Corona SDK - Módulo 1
Curso Corona SDK - Módulo 1Luiz Duarte
 
Paradigmas de Linguagens de Programacao- Aula #8
Paradigmas de Linguagens de Programacao- Aula #8Paradigmas de Linguagens de Programacao- Aula #8
Paradigmas de Linguagens de Programacao- Aula #8Ismar Silveira
 
Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9Ismar Silveira
 
Apostila sistema operacional cor capa ficha 2011 02 04
Apostila sistema operacional cor capa ficha 2011 02 04Apostila sistema operacional cor capa ficha 2011 02 04
Apostila sistema operacional cor capa ficha 2011 02 04MatheusRpz
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Ismar Silveira
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Ismar Silveira
 

Viewers also liked (20)

Criando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDKCriando Jogos 2D com Lua + Corona SDK
Criando Jogos 2D com Lua + Corona SDK
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
 
O professor leitor do texto do aluno: SD, reflexão linguística, reescrita
O professor leitor do texto do aluno: SD, reflexão linguística, reescritaO professor leitor do texto do aluno: SD, reflexão linguística, reescrita
O professor leitor do texto do aluno: SD, reflexão linguística, reescrita
 
Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5
 
Paradigmas de Linguagens de Programacao - Aula #6
Paradigmas de Linguagens de Programacao - Aula #6Paradigmas de Linguagens de Programacao - Aula #6
Paradigmas de Linguagens de Programacao - Aula #6
 
Paradigmas de Linguagens de Programacao - Aula #7
Paradigmas de Linguagens de Programacao - Aula #7Paradigmas de Linguagens de Programacao - Aula #7
Paradigmas de Linguagens de Programacao - Aula #7
 
Lua para Jogos
Lua para JogosLua para Jogos
Lua para Jogos
 
Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
Criação de Jogos 2D com Técnicas 3D Utilizando Python e C
Criação de Jogos 2D com Técnicas 3D Utilizando Python e CCriação de Jogos 2D com Técnicas 3D Utilizando Python e C
Criação de Jogos 2D com Técnicas 3D Utilizando Python e C
 
Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de Programação
 
Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...
Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...
Lições Aprendidas na Aplicação de Critérios de Testes Funcionais Tradicionais...
 
Curso Corona SDK - Módulo 1
Curso Corona SDK - Módulo 1Curso Corona SDK - Módulo 1
Curso Corona SDK - Módulo 1
 
E:\Plp 2009 2\Plp 9
E:\Plp 2009 2\Plp 9E:\Plp 2009 2\Plp 9
E:\Plp 2009 2\Plp 9
 
Paradigmas de Linguagens de Programacao- Aula #8
Paradigmas de Linguagens de Programacao- Aula #8Paradigmas de Linguagens de Programacao- Aula #8
Paradigmas de Linguagens de Programacao- Aula #8
 
Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9
 
Apostila sistema operacional cor capa ficha 2011 02 04
Apostila sistema operacional cor capa ficha 2011 02 04Apostila sistema operacional cor capa ficha 2011 02 04
Apostila sistema operacional cor capa ficha 2011 02 04
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10
 
A Internet das Coisas
A Internet das CoisasA Internet das Coisas
A Internet das Coisas
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
 

Similar to A Linguagem Lua e suas aplicações em jogos

Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialFlávio Schuindt
 
Algoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlgoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlex Camargo
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Mauricio Volkweis Astiazara
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Marcelo Barros de Almeida
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 

Similar to A Linguagem Lua e suas aplicações em jogos (20)

Python.pptx
Python.pptxPython.pptx
Python.pptx
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
C 1
C 1C 1
C 1
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Algoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlgoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de strings
 
Infos algoritmo
Infos algoritmoInfos algoritmo
Infos algoritmo
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Ed1
Ed1Ed1
Ed1
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 

More from elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

More from elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

A Linguagem Lua e suas aplicações em jogos

  • 1. A Linguagem Lua e suas Aplicações em Jogos Waldemar Celes Luiz Henrique de Figueiredo Roberto Ierusalimschy
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54. Exemplo: tipo Point -- Metatable de Point local Point_metatable = { __add = function (p1,p2) return Point(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z} end } -- Construtor function Point (self) self.x = tonumber(self.x) or 0.0 self.y = tonumber(self.y) or 0.0 self.z = tonumber(self.z) or 0.0 setmetatable(self,Point_metatable) return self end ----------------------------------------------- local p = Point{x=3.0,y=1.3,z=3.2} local q = Point{x=4.2,y=1.0} local r = p+q -- {7.2, 2.3, 3.2}
  • 55. Herança Simples: mecanismo de delegação -- Métodos local Point_methods = { Print = function (self) print(self.x, self.y, self.z) end, ... } -- Metatable local Point_metatable = { __index = Point_methods, __add = function (p1,p2) return Point(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z} end } ------------------------------------------------ local p = Point{x=3.0,y=1.3,z=3.2} local q = Point{x=4.2,y=1.0} local r = p+q r:Print()
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66. Exemplo: simulação de personagens local simulators = { coroutine.create(function () ... end), -- simulação 1 coroutine.create(function () ... end), -- simulação 2 coroutine.create(function () ... end), -- simulação 3 ... } function manager () while true do for i,v in pairs(simulators) do coroutine.resume(v) end coroutine.yield() -- repassa para controlador externo end end
  • 68. Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey... LEVEL = 13 HERO = &quot;Mickey&quot;
  • 69. Lua como linguagem de configuração #include &quot;lua.h&quot; #include &quot;lauxlib.h&quot; static int level=0; const char* hero=&quot;Minnie&quot;; ... int main(void) { lua_State *L=lua_open(); luaL_loadfile(L,&quot;init.lua&quot;); lua_pcall(L,0,0,0); lua_getglobal(L,&quot;LEVEL&quot;); level=lua_tonumber(L,-1); lua_getglobal(L,&quot;HERO&quot;); hero=lua_tostring(L,-1); play(level,hero); lua_close(L); return 0; }
  • 70. Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey... LEVEL = 13 HERO = &quot;Mickey&quot; GREET = &quot;Bom dia &quot; .. HERO .. &quot;! Como vai&quot; SCORE = 1.2 * LEVEL
  • 71. Lua como linguagem de extensão weapons = { knife = { aggression = 0.3, attackrange = 0.5, accuracy = 1.0, }, sword = { aggression = 0.5, attackrange = 1.5, accuracy = 0.8, }, ... }
  • 72. Lua como linguagem de extensão double accuracy; lua_getglobal(L,”weapons”); lua_pushstring(L,”sword”); lua_gettable(L,-2); lua_pushstring(L,’accuracy’); lua_gettable(L,-2); accuracy = lua_tonumber(L,-1); lua_pop(L,2);
  • 73. Lua como linguagem de extensão function Weapon (self) if not self.aggression then self.aggression = 0.5 -- default value elseif self.aggression < 0.0 or self.aggression > 1.0 then ReportError(&quot;Invalid aggression value&quot;) ... return self end weapons = { knife = Weapon { aggression = 0.3, attackrange = 0.5, accuracy = 1.0, }, ... }
  • 74. Lua como linguagem de extensão weapons = { knife = Weapon{ aggression = 0.3, attackrange = 0.5, accuracy = 1.0, getit = function (person) if person:HasEnoughWeapon() then person:Speak(&quot;Não preciso dessa faca&quot;) return false else person:Speak(&quot;Essa faca será util&quot;) return true end end, }, ... }
  • 75.
  • 76.
  • 77. Lua como linguagem de controle ... if Hero:GetEnergy() > 0.5 then Hero:Attack() else Hero:Run() end ...
  • 79.
  • 80. toLua: exemplo de C #define FALSE 0 #define TRUE 1 enum { POINT = 100, LINE, POLYGON } Object* createObejct (int type); void drawObject (Object* obj, double red, double green, double blue); int isSelected (Object* obj); ... myLine = createObject(LINE) ... if isSelected(myLine) == TRUE then drawObject(myLine, 1.0, 0.0, 0.0); else drawObject(myLine, 1.0, 1.0, 1.0); end ...
  • 81. toLua: exemplo de C++ #define FALSE 0 #define TRUE 1 class Shape { void draw (void); void draw (double red, double green, double blue); int isSelected (void); }; class Line : public Shape { Line (double x1, double y1, double x2, double y2); ~Line (void); }; ... myLine = Line:new (0,0,1,1) ... if myLine:isSelected() == TRUE then myLine:draw(1.0,0.0,0.0) else myLine:draw() end ... myLine:delete() ...
  • 82. Para saber mais... www.lua.org
  • 83.