SlideShare ist ein Scribd-Unternehmen logo
1 von 83
Downloaden Sie, um offline zu lesen
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]

Weitere ähnliche Inhalte

Was ist angesagt?

Aulas 10 e 11 - Álgebra de Boole
Aulas 10 e 11 - Álgebra de BooleAulas 10 e 11 - Álgebra de Boole
Aulas 10 e 11 - Álgebra de BooleJocelma Rios
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à ProgramaçãoMario Sergio
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosElaine Cecília Gatto
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Pythonantonio sérgio nogueira
 
Doenças Profissionais na Área de Computação
Doenças Profissionais na Área de ComputaçãoDoenças Profissionais na Área de Computação
Doenças Profissionais na Área de ComputaçãoEduardo Silva Lira
 
Aula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxAula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxALEXANDRELISBADASILV
 
Aula 1 - Qualidade de Software - Introdução e História.pptx
Aula 1 - Qualidade de Software - Introdução e História.pptxAula 1 - Qualidade de Software - Introdução e História.pptx
Aula 1 - Qualidade de Software - Introdução e História.pptxAlexandreLisboadaSil
 
Normas e Padrões para a Qualidade de Software
Normas e Padrões para a Qualidade de SoftwareNormas e Padrões para a Qualidade de Software
Normas e Padrões para a Qualidade de SoftwareDanilo Sousa
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente EncadeadasLeinylson Fontinele
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 

Was ist angesagt? (20)

Aulas 10 e 11 - Álgebra de Boole
Aulas 10 e 11 - Álgebra de BooleAulas 10 e 11 - Álgebra de Boole
Aulas 10 e 11 - Álgebra de Boole
 
Apresentação Lua
Apresentação LuaApresentação Lua
Apresentação Lua
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à Programação
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de Algoritmos
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Estudo de caso: introdução
Estudo de caso: introduçãoEstudo de caso: introdução
Estudo de caso: introdução
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
E-book - Indústria 4.0.pdf
E-book - Indústria 4.0.pdfE-book - Indústria 4.0.pdf
E-book - Indústria 4.0.pdf
 
Doenças Profissionais na Área de Computação
Doenças Profissionais na Área de ComputaçãoDoenças Profissionais na Área de Computação
Doenças Profissionais na Área de Computação
 
Aula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxAula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptx
 
Aula 1 - Qualidade de Software - Introdução e História.pptx
Aula 1 - Qualidade de Software - Introdução e História.pptxAula 1 - Qualidade de Software - Introdução e História.pptx
Aula 1 - Qualidade de Software - Introdução e História.pptx
 
Modelos de processos de software
Modelos de processos de softwareModelos de processos de software
Modelos de processos de software
 
Normas e Padrões para a Qualidade de Software
Normas e Padrões para a Qualidade de SoftwareNormas e Padrões para a Qualidade de Software
Normas e Padrões para a Qualidade de Software
 
casos de uso
casos de usocasos de uso
casos de uso
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
 
POO - Aula 1
POO - Aula 1POO - Aula 1
POO - Aula 1
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
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)
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 

Andere mochten auch

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
 
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
 
Introdução à Computação Aula 01 - Apresentação
Introdução à Computação  Aula 01 - ApresentaçãoIntrodução à Computação  Aula 01 - Apresentação
Introdução à Computação Aula 01 - ApresentaçãoLeinylson Fontinele
 

Andere mochten auch (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
 
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
 
Introdução à Computação Aula 01 - Apresentação
Introdução à Computação  Aula 01 - ApresentaçãoIntrodução à Computação  Aula 01 - Apresentação
Introdução à Computação Aula 01 - Apresentação
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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.