SlideShare una empresa de Scribd logo
1 de 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]

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Preconceito Linguístico
Preconceito Linguístico Preconceito Linguístico
Preconceito Linguístico
 
O que é literatura
O que é literaturaO que é literatura
O que é literatura
 
O Cortiço.ppt
O Cortiço.pptO Cortiço.ppt
O Cortiço.ppt
 
Contos
ContosContos
Contos
 
Semiologia das Icterícias
Semiologia das IcteríciasSemiologia das Icterícias
Semiologia das Icterícias
 
Sagarana
SagaranaSagarana
Sagarana
 
Romantismo contexto histórico e características
Romantismo   contexto histórico e característicasRomantismo   contexto histórico e características
Romantismo contexto histórico e características
 
Tipos de linguagem (verbal e não verbal)
Tipos de  linguagem (verbal e não verbal)Tipos de  linguagem (verbal e não verbal)
Tipos de linguagem (verbal e não verbal)
 
Exercicios disciplina comunicacao_oficial
Exercicios disciplina comunicacao_oficialExercicios disciplina comunicacao_oficial
Exercicios disciplina comunicacao_oficial
 
Slides Seminário de Literatura Brasileira_ Memorias Póstumas de Brás Cubas
Slides Seminário de Literatura Brasileira_ Memorias Póstumas de Brás CubasSlides Seminário de Literatura Brasileira_ Memorias Póstumas de Brás Cubas
Slides Seminário de Literatura Brasileira_ Memorias Póstumas de Brás Cubas
 
Trovadorismo
TrovadorismoTrovadorismo
Trovadorismo
 
Literatura Brasileira Historico
Literatura Brasileira  HistoricoLiteratura Brasileira  Historico
Literatura Brasileira Historico
 
Análise de a chinela turca
Análise de a chinela turcaAnálise de a chinela turca
Análise de a chinela turca
 
Questões sobre sagarana
Questões sobre sagaranaQuestões sobre sagarana
Questões sobre sagarana
 
O primo basilio
O primo basilioO primo basilio
O primo basilio
 
Literatura de informação
Literatura de informaçãoLiteratura de informação
Literatura de informação
 
Arcadismo
ArcadismoArcadismo
Arcadismo
 
Gêneros , tipologia textual, descritores e distratores
Gêneros , tipologia textual, descritores e distratoresGêneros , tipologia textual, descritores e distratores
Gêneros , tipologia textual, descritores e distratores
 
Poesia
PoesiaPoesia
Poesia
 
Variação linguística
Variação linguísticaVariação linguística
Variação linguística
 

Destacado

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
 

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

Más de 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
 

Más 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.