SlideShare uma empresa Scribd logo
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]

Mais conteúdo relacionado

Mais procurados

Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1
Pacc UAB
 
Introducao Base Dados Ii
Introducao Base Dados IiIntroducao Base Dados Ii
Introducao Base Dados Ii
guest3118b2
 

Mais procurados (20)

Matemática Discreta - Fundamentos
Matemática Discreta - FundamentosMatemática Discreta - Fundamentos
Matemática Discreta - Fundamentos
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
6 estruturas de dados heterogêneas
6  estruturas de dados heterogêneas6  estruturas de dados heterogêneas
6 estruturas de dados heterogêneas
 
Aula 2 - Processos de Software
Aula 2 - Processos de SoftwareAula 2 - Processos de Software
Aula 2 - Processos de Software
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Engenharia de software
Engenharia de softwareEngenharia de software
Engenharia de software
 
Modelos de Processo de Software
Modelos de Processo de SoftwareModelos de Processo de Software
Modelos de Processo de Software
 
Orientação a Objetos - Introdução - Exercícios
Orientação a Objetos - Introdução - ExercíciosOrientação a Objetos - Introdução - Exercícios
Orientação a Objetos - Introdução - Exercícios
 
Diagrama de Classes
Diagrama de ClassesDiagrama de Classes
Diagrama de Classes
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Introducao Base Dados Ii
Introducao Base Dados IiIntroducao Base Dados Ii
Introducao Base Dados Ii
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
Diagrama de Casos de Uso
Diagrama de Casos de UsoDiagrama de Casos de Uso
Diagrama de Casos de Uso
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04
 

Destaque

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
Leonardo Dalmina
 
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
Terezinha Barroso
 

Destaque (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
 

Semelhante a 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 C
apolllorj
 
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
Cândido Sales Gomes
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
Rafael 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 Tutorial
Fabio Spanhol
 

Semelhante a 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
 

Mais de elliando 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 ClojureScript
elliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
elliando 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 Agility
elliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
elliando 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 Web
elliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
elliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
elliando 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 Design
elliando 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 Facebook
elliando 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 Study
elliando dias
 

Mais de 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.