A Linguagem Lua e suas Aplicaes em Jogos
![A Linguagem Lua e suas Aplicações em Jogos Waldemar Celes Luiz Henrique de Figueiredo A Linguagem Lua e suas Aplicações em Jogos Waldemar Celes Luiz Henrique de Figueiredo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-1.jpg)
![Linguagens de script em jogos Linguagens de script em jogos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-2.jpg)
![Linguagens de script em Jogos q Pesquisa ð 72% na gamedev. net (set/2003) dos Linguagens de script em Jogos q Pesquisa ð 72% na gamedev. net (set/2003) dos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-3.jpg)
![Pra quê? q q q Implementar o script do jogo Definir objetos e seus Pra quê? q q q Implementar o script do jogo Definir objetos e seus](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-4.jpg)
![Por quê? q Conjunto de características favoráveis ð Interpretada ð Tipagem dinâmica ð Gerência Por quê? q Conjunto de características favoráveis ð Interpretada ð Tipagem dinâmica ð Gerência](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-5.jpg)
![Linguagens de script (extensão) q Linguagens de configuração Selecionar preferências ð Tipicamente uma lista Linguagens de script (extensão) q Linguagens de configuração Selecionar preferências ð Tipicamente uma lista](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-6.jpg)
![Exemplos de linguagens de scripts q Lua q Python q Tcl q Perl q Exemplos de linguagens de scripts q Lua q Python q Tcl q Perl q](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-7.jpg)
![Lua em jogos Lua em jogos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-8.jpg)
![Lua em Jogos q Mesma pesquisa na gamedev. net (set/2003) ð 20% usam Lua Lua em Jogos q Mesma pesquisa na gamedev. net (set/2003) ð 20% usam Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-9.jpg)
![De fato. . . q Exemplos de jogos que usam Lua ð Levantamento ² De fato. . . q Exemplos de jogos que usam Lua ð Levantamento ²](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-10.jpg)
![Grim Fandango – Lucasarts q Adventure ð Utiliza uma versão modificada de Lua 3. Grim Fandango – Lucasarts q Adventure ð Utiliza uma versão modificada de Lua 3.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-11.jpg)
![Escape from Monkey Island – Lucasarts q Adventure ð Também utiliza uma versão modificada Escape from Monkey Island – Lucasarts q Adventure ð Também utiliza uma versão modificada](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-12.jpg)
![Psychonauts – Double Fine q Action ð ð Toda lógica do jogo implementada em Psychonauts – Double Fine q Action ð ð Toda lógica do jogo implementada em](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-13.jpg)
![Baldur’s Gate – Bioware q RPG ð ð Baldur's Gate utiliza scripts Lua em Baldur’s Gate – Bioware q RPG ð ð Baldur's Gate utiliza scripts Lua em](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-14.jpg)
![Impossible Creatures – Relic q Estratégia ð Lua usada em ² ² ² Controle Impossible Creatures – Relic q Estratégia ð Lua usada em ² ² ² Controle](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-15.jpg)
![Far. Cry – Crytek q First Person Shooter (FPS) ð Lua usada em ² Far. Cry – Crytek q First Person Shooter (FPS) ð Lua usada em ²](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-16.jpg)
![Por que Lua? q Pequena q Portátil q Eficiente q Fácil integração com C/C++ Por que Lua? q Pequena q Portátil q Eficiente q Fácil integração com C/C++](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-17.jpg)
![História de Lua História de Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-18.jpg)
![Construção de Interfaces Gráficas q 1992: Projeto com a PETROBRAS/CENPES ð Construção de interfaces Construção de Interfaces Gráficas q 1992: Projeto com a PETROBRAS/CENPES ð Construção de interfaces](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-19.jpg)
![DEL Linguagem para Especificação de Diálogos q Definição de formulário ð Lista de parâmetros DEL Linguagem para Especificação de Diálogos q Definição de formulário ð Lista de parâmetros](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-20.jpg)
![Limitações de DEL q Tomada de decisão ð Inclusão de predicados ð Necessidade de Limitações de DEL q Tomada de decisão ð Inclusão de predicados ð Necessidade de](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-21.jpg)
![Programa Gráfico Mestre q 1993: Projeto com a PETROBRAS Programa para visualização de perfis Programa Gráfico Mestre q 1993: Projeto com a PETROBRAS Programa para visualização de perfis](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-22.jpg)
![SOL Simple Object Language q Linguagem para descrição de objetos q Sintaxe inspirada no SOL Simple Object Language q Linguagem para descrição de objetos q Sintaxe inspirada no](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-23.jpg)
![Limitações de SOL q Recursos para construção de diálogos q Mecanismos de programação procedural Limitações de SOL q Recursos para construção de diálogos q Mecanismos de programação procedural](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-24.jpg)
![1994: Nasce Lua q Convergência das duas linguagens Suporte a programação procedimental ð Mecanismos 1994: Nasce Lua q Convergência das duas linguagens Suporte a programação procedimental ð Mecanismos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-25.jpg)
![A linguagem Lua q Objetivos iniciais ð Simples e flexível ² ² ð Facilmente A linguagem Lua q Objetivos iniciais ð Simples e flexível ² ² ð Facilmente](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-26.jpg)
![Lua no Tecgraf q Praticamente todos os projetos usam Lua Lua no Tecgraf q Praticamente todos os projetos usam Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-27.jpg)
![A Linguagem Lua A Linguagem Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-28.jpg)
![Como é Lua? q Sintaxe convencional function fat (n) if n == 0 then Como é Lua? q Sintaxe convencional function fat (n) if n == 0 then](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-29.jpg)
![Execução de um chunk q Pré-compilado ð Pode-se q Máquina em bytecodes carregar arquivo Execução de um chunk q Pré-compilado ð Pode-se q Máquina em bytecodes carregar arquivo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-30.jpg)
![Tipos q Tipos associados a valores ð Variáveis armazenam qualquer tipo ² q Polimorfismo Tipos q Tipos associados a valores ð Variáveis armazenam qualquer tipo ² q Polimorfismo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-31.jpg)
![Tipo nil q Propósito q Tipo maior: ser diferente dos demais do valor default Tipo nil q Propósito q Tipo maior: ser diferente dos demais do valor default](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-32.jpg)
![Tipo boolean q Valor booleano ð Falso (false) ou verdadeiro (true) Tipo boolean q Valor booleano ð Falso (false) ou verdadeiro (true)](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-33.jpg)
![Tipo number q Único tipo nativo para valores numéricos ð double (por default) local Tipo number q Único tipo nativo para valores numéricos ð double (por default) local](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-34.jpg)
![Tipo string q Valores imutáveis q Sem limite de tamanho ðÉ comum ler arquivo Tipo string q Valores imutáveis q Sem limite de tamanho ðÉ comum ler arquivo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-35.jpg)
![Tipo table q q Resultado da expressão {} Arrays associativos ð Qualquer valor como Tipo table q q Resultado da expressão {} Arrays associativos ð Qualquer valor como](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-36.jpg)
![Estruturas de Dados com tabelas q Implementação simples e eficiente q Records ð Açucar Estruturas de Dados com tabelas q Implementação simples e eficiente q Records ð Açucar](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-37.jpg)
![Estruturas de Dados com tabelas (2) q Arrays ð Inteiros como índices for i=1, Estruturas de Dados com tabelas (2) q Arrays ð Inteiros como índices for i=1,](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-38.jpg)
![Tipo function q Valores de primeira classe function inc (x) return x+1 end q Tipo function q Valores de primeira classe function inc (x) return x+1 end q](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-39.jpg)
![Tipo function (2) q Passagem ð Suporte por valor e retorno múltiplo a atribuições Tipo function (2) q Passagem ð Suporte por valor e retorno múltiplo a atribuições](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-40.jpg)
![Escopo léxico q Acesso a variáveis em escopos externos q Expressão cujo valor é Escopo léxico q Acesso a variáveis em escopos externos q Expressão cujo valor é](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-41.jpg)
![Construtores q Origem da linguagem q Descrição de dados + semântica imperativa article{ author="F. Construtores q Origem da linguagem q Descrição de dados + semântica imperativa article{ author="F.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-42.jpg)
![Objetos q Funções 1 a classe + tabelas = quase OO ð q Tabelas Objetos q Funções 1 a classe + tabelas = quase OO ð q Tabelas](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-43.jpg)
![Tipo userdata q Armazena q Tipo um ponteiro void* de C opaco para a Tipo userdata q Armazena q Tipo um ponteiro void* de C opaco para a](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-44.jpg)
![Extensão de Tipos q Lua permite a criação de novos “tipos” ð Sobre os Extensão de Tipos q Lua permite a criação de novos “tipos” ð Sobre os](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-45.jpg)
![Exemplo: tipo Point -- Metatable de Point local Point_metatable = { __add = function Exemplo: tipo Point -- Metatable de Point local Point_metatable = { __add = function](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-46.jpg)
![Herança Simples: mecanismo de delegação -- Métodos local Point_methods = { Print = function Herança Simples: mecanismo de delegação -- Métodos local Point_methods = { Print = function](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-47.jpg)
![Bibliotecas padrão q Basic q String q Table q Math q IO q OS Bibliotecas padrão q Basic q String q Table q Math q IO q OS](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-48.jpg)
![Basic q Oferecem funções básicas ð print ð type ð setmetatable ð pairs Basic q Oferecem funções básicas ð print ð type ð setmetatable ð pairs](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-49.jpg)
![String q Funções para manipulação de strings ð Casamento de padrões (pattern matching) ² String q Funções para manipulação de strings ð Casamento de padrões (pattern matching) ²](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-50.jpg)
![Table q Funções para manipulação de tabelas ð table. insert ² Inserir um novo Table q Funções para manipulação de tabelas ð table. insert ² Inserir um novo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-51.jpg)
![Math q Funções matemáticas ð Semelhantes ² math. sqrt ² math. sin ² math. Math q Funções matemáticas ð Semelhantes ² math. sqrt ² math. sin ² math.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-52.jpg)
![IO q Funções de entrada e saída ð io. open ² Abertura de arquivo IO q Funções de entrada e saída ð io. open ² Abertura de arquivo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-53.jpg)
![OS q Funções associadas ao sistema operacional ð os. clock ð os. date ð OS q Funções associadas ao sistema operacional ð os. clock ð os. date ð](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-54.jpg)
![Debug q Facilidades de debug ð Acesso a pilha de execução ð Acesso a Debug q Facilidades de debug ð Acesso a pilha de execução ð Acesso a](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-55.jpg)
![Co-rotinas q Poderoso mecanismo de programação para jogos q Co-rotina x thread ð Ambos Co-rotinas q Poderoso mecanismo de programação para jogos q Co-rotina x thread ð Ambos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-56.jpg)
![Co-rotinas q Criação local c = coroutine. create(function (). . . end) print(type(c)) --> Co-rotinas q Criação local c = coroutine. create(function (). . . end) print(type(c)) -->](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-57.jpg)
![Exemplo: simulação de personagens local simulators = { coroutine. create(function (). . . end), Exemplo: simulação de personagens local simulators = { coroutine. create(function (). . . end),](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-58.jpg)
![Exemplos de Integração com C/C++ Exemplos de Integração com C/C++](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-59.jpg)
![Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. . Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. .](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-60.jpg)
![Lua como linguagem de configuração #include "lua. h" #include "lauxlib. h" static int level=0; Lua como linguagem de configuração #include "lua. h" #include "lauxlib. h" static int level=0;](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-61.jpg)
![Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. . Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. .](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-62.jpg)
![Lua como linguagem de extensão weapons = { knife = { aggression = 0. Lua como linguagem de extensão weapons = { knife = { aggression = 0.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-63.jpg)
![Lua como linguagem de extensão double accuracy; lua_getglobal(L, ”weapons”); lua_pushstring(L, ”sword”); lua_gettable(L, -2); lua_pushstring(L, Lua como linguagem de extensão double accuracy; lua_getglobal(L, ”weapons”); lua_pushstring(L, ”sword”); lua_gettable(L, -2); lua_pushstring(L,](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-64.jpg)
![Lua como linguagem de extensão weapons = { knife = Weapon { aggression = Lua como linguagem de extensão weapons = { knife = Weapon { aggression =](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-65.jpg)
![Lua como linguagem de extensão weapons = { knife = Weapon{ aggression = 0. Lua como linguagem de extensão weapons = { knife = Weapon{ aggression = 0.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-66.jpg)
![Lua como linguagem de controle class CPerson {. . . public: CPerson (char* model_file); Lua como linguagem de controle class CPerson {. . . public: CPerson (char* model_file);](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-67.jpg)
![Lua como linguagem de controle Hero = Person { name = "Tarzan", model = Lua como linguagem de controle Hero = Person { name = "Tarzan", model =](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-68.jpg)
![Lua como linguagem de controle . . . if Hero: Get. Energy() > 0. Lua como linguagem de controle . . . if Hero: Get. Energy() > 0.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-69.jpg)
![Ferramenta de integração automática Ferramenta de integração automática](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-70.jpg)
![to. Lua q Ferramenta Variáveis Funções Classes Métodos para mapear C/C++ para Lua to. to. Lua q Ferramenta Variáveis Funções Classes Métodos para mapear C/C++ para Lua to.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-71.jpg)
![to. Lua: exemplo de C #define FALSE 0 #define TRUE 1 enum { POINT to. Lua: exemplo de C #define FALSE 0 #define TRUE 1 enum { POINT](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-72.jpg)
![to. Lua: exemplo de C++ #define FALSE 0 #define TRUE 1 class Shape { to. Lua: exemplo de C++ #define FALSE 0 #define TRUE 1 class Shape {](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-73.jpg)
![Para saber mais. . . www. lua. org Para saber mais. . . www. lua. org](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-74.jpg)
![www. lua. org q q q R. Ierusalimschy, Programming in Lua. org, December 2003. www. lua. org q q q R. Ierusalimschy, Programming in Lua. org, December 2003.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-75.jpg)
- Slides: 75
![A Linguagem Lua e suas Aplicações em Jogos Waldemar Celes Luiz Henrique de Figueiredo A Linguagem Lua e suas Aplicações em Jogos Waldemar Celes Luiz Henrique de Figueiredo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-1.jpg)
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](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-2.jpg)
Linguagens de script em jogos
![Linguagens de script em Jogos q Pesquisa ð 72 na gamedev net set2003 dos Linguagens de script em Jogos q Pesquisa ð 72% na gamedev. net (set/2003) dos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-3.jpg)
Linguagens de script em Jogos q Pesquisa ð 72% na gamedev. net (set/2003) dos jogos usam linguagens de script
![Pra quê q q q Implementar o script do jogo Definir objetos e seus Pra quê? q q q Implementar o script do jogo Definir objetos e seus](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-4.jpg)
Pra quê? q q q Implementar o script do jogo Definir objetos e seus comportamentos Gerenciar os algoritmos de inteligência artificial Controlar os personagens Tratar os eventos de entrada Descrever a interface com o usuário Criar protótipos Testar Depurar Analisar adequação Prover acesso programável para roteiristas e artistas ð Experimentar novas idéias e variações
![Por quê q Conjunto de características favoráveis ð Interpretada ð Tipagem dinâmica ð Gerência Por quê? q Conjunto de características favoráveis ð Interpretada ð Tipagem dinâmica ð Gerência](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-5.jpg)
Por quê? q Conjunto de características favoráveis ð Interpretada ð Tipagem dinâmica ð Gerência automática de memória ð Facilidade para estruturação de dados ð Facilidade para manipulação de strings ð Segura ð Facilidade para comunicação entre componentes
![Linguagens de script extensão q Linguagens de configuração Selecionar preferências ð Tipicamente uma lista Linguagens de script (extensão) q Linguagens de configuração Selecionar preferências ð Tipicamente uma lista](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-6.jpg)
Linguagens de script (extensão) q Linguagens de configuração Selecionar preferências ð Tipicamente uma lista de variáveis-valores ð Exemplo típico: arquivos. ini do Windows. ð q Linguagens de macros Automatizar tarefas ð Tipicamente uma lista de ações primitivas ð ² ð q Muito pouco ou nenhum controle de fluxo Exemplo típico: arquivos de automação de conexões via modem Linguagens embutidas ð Permitir acesso programável aos serviços da aplicação Controle de fluxo ² Definição de funções ² Estruturação de dados ²
![Exemplos de linguagens de scripts q Lua q Python q Tcl q Perl q Exemplos de linguagens de scripts q Lua q Python q Tcl q Perl q](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-7.jpg)
Exemplos de linguagens de scripts q Lua q Python q Tcl q Perl q VBasic q. . .
![Lua em jogos Lua em jogos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-8.jpg)
Lua em jogos
![Lua em Jogos q Mesma pesquisa na gamedev net set2003 ð 20 usam Lua Lua em Jogos q Mesma pesquisa na gamedev. net (set/2003) ð 20% usam Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-9.jpg)
Lua em Jogos q Mesma pesquisa na gamedev. net (set/2003) ð 20% usam Lua ð 7% usam Phyton
![De fato q Exemplos de jogos que usam Lua ð Levantamento ² De fato. . . q Exemplos de jogos que usam Lua ð Levantamento ²](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-10.jpg)
De fato. . . q Exemplos de jogos que usam Lua ð Levantamento ² Disciplina feito por Marcio Pereira de Araujo “Linguagem Lua”, DI / PUC-Rio
![Grim Fandango Lucasarts q Adventure ð Utiliza uma versão modificada de Lua 3 Grim Fandango – Lucasarts q Adventure ð Utiliza uma versão modificada de Lua 3.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-11.jpg)
Grim Fandango – Lucasarts q Adventure ð Utiliza uma versão modificada de Lua 3. 1 como linguagem de script
![Escape from Monkey Island Lucasarts q Adventure ð Também utiliza uma versão modificada Escape from Monkey Island – Lucasarts q Adventure ð Também utiliza uma versão modificada](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-12.jpg)
Escape from Monkey Island – Lucasarts q Adventure ð Também utiliza uma versão modificada de Lua 3. 1 como linguagem de script
![Psychonauts Double Fine q Action ð ð Toda lógica do jogo implementada em Psychonauts – Double Fine q Action ð ð Toda lógica do jogo implementada em](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-13.jpg)
Psychonauts – Double Fine q Action ð ð Toda lógica do jogo implementada em Lua Jogo controlado por entidades com scripts Lua ² Basicamente a engine começa o jogo, carregando um mundo estático, e os scripts Lua tomam o controle, tornando o mundo interativo e vivo.
![Baldurs Gate Bioware q RPG ð ð Baldurs Gate utiliza scripts Lua em Baldur’s Gate – Bioware q RPG ð ð Baldur's Gate utiliza scripts Lua em](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-14.jpg)
Baldur’s Gate – Bioware q RPG ð ð Baldur's Gate utiliza scripts Lua em todo o jogo Em especial, para debug ² ² Comandos de debug mapeados para Lua Prompt Lua adicionado para debug em tempo real
![Impossible Creatures Relic q Estratégia ð Lua usada em ² ² ² Controle Impossible Creatures – Relic q Estratégia ð Lua usada em ² ² ² Controle](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-15.jpg)
Impossible Creatures – Relic q Estratégia ð Lua usada em ² ² ² Controle de IA Aparência de efeitos e de outros elementos gráficos Determinação das regras do jogo Edição dos atributos dos personagens Debug em tempo real
![Far Cry Crytek q First Person Shooter FPS ð Lua usada em ² Far. Cry – Crytek q First Person Shooter (FPS) ð Lua usada em ²](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-16.jpg)
Far. Cry – Crytek q First Person Shooter (FPS) ð Lua usada em ² ² Controle de IA Interfaces Edição de cenas e atributos em tempo real Criação de “Mod’s” – Criando e modificando arquivos Lua.
![Por que Lua q Pequena q Portátil q Eficiente q Fácil integração com CC Por que Lua? q Pequena q Portátil q Eficiente q Fácil integração com C/C++](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-17.jpg)
Por que Lua? q Pequena q Portátil q Eficiente q Fácil integração com C/C++ q Simples e flexível ð Sintaxe simples ð Facilidades para descrição de dados ð Mecanismos de extensão ð “Simple things simple, complex things possible”
![História de Lua História de Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-18.jpg)
História de Lua
![Construção de Interfaces Gráficas q 1992 Projeto com a PETROBRASCENPES ð Construção de interfaces Construção de Interfaces Gráficas q 1992: Projeto com a PETROBRAS/CENPES ð Construção de interfaces](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-19.jpg)
Construção de Interfaces Gráficas q 1992: Projeto com a PETROBRAS/CENPES ð Construção de interfaces gráficas para diversos programas de simulação d
![DEL Linguagem para Especificação de Diálogos q Definição de formulário ð Lista de parâmetros DEL Linguagem para Especificação de Diálogos q Definição de formulário ð Lista de parâmetros](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-20.jpg)
DEL Linguagem para Especificação de Diálogos q Definição de formulário ð Lista de parâmetros ð Tipos e valores default d : e gasket "gasket properties" mat s # material d f 0 # distance y f 0 # settlement stress t i 1 # facing type
![Limitações de DEL q Tomada de decisão ð Inclusão de predicados ð Necessidade de Limitações de DEL q Tomada de decisão ð Inclusão de predicados ð Necessidade de](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-21.jpg)
Limitações de DEL q Tomada de decisão ð Inclusão de predicados ð Necessidade de maior poder de expressão d : e gasket "gasket properties" 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
![Programa Gráfico Mestre q 1993 Projeto com a PETROBRAS Programa para visualização de perfis Programa Gráfico Mestre q 1993: Projeto com a PETROBRAS Programa para visualização de perfis](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-22.jpg)
Programa Gráfico Mestre q 1993: Projeto com a PETROBRAS Programa para visualização de perfis geológicos ð Configurável ð
![SOL Simple Object Language q Linguagem para descrição de objetos q Sintaxe inspirada no SOL Simple Object Language q Linguagem para descrição de objetos q Sintaxe inspirada no](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-23.jpg)
SOL Simple Object Language q Linguagem para descrição de objetos q Sintaxe inspirada no Bib. Te. X - 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 't 1', of type `track' t 1 = @track { y = 9, x = 10, z="hi!"} - creates a line 'l', with t=@track{x=9, y=10}, - and z=[2, 3, 4] (a list) l = @line { t= @track{x=t 1. y, y=t 1. x}, z=[2, 3, 4] }
![Limitações de SOL q Recursos para construção de diálogos q Mecanismos de programação procedural Limitações de SOL q Recursos para construção de diálogos q Mecanismos de programação procedural](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-24.jpg)
Limitações de SOL q Recursos para construção de diálogos q Mecanismos de programação procedural
![1994 Nasce Lua q Convergência das duas linguagens Suporte a programação procedimental ð Mecanismos 1994: Nasce Lua q Convergência das duas linguagens Suporte a programação procedimental ð Mecanismos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-25.jpg)
1994: Nasce Lua q Convergência das duas linguagens Suporte a programação procedimental ð Mecanismos para descrição de objetos ð q Necessidade de recursos mais poderosos Expressões aritméticas complexas ð Seleção ð Repetições ð q Linguagem de extensão extensível Extensão de aplicações ð Especializada para diferentes domínios ð
![A linguagem Lua q Objetivos iniciais ð Simples e flexível ² ² ð Facilmente A linguagem Lua q Objetivos iniciais ð Simples e flexível ² ² ð Facilmente](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-26.jpg)
A linguagem Lua q Objetivos iniciais ð Simples e flexível ² ² ð Facilmente acoplável Projetada também para programadores não profissionais Pequena DOS ² Implementação completa < 120 K, núcleo < 80 K ² ð Portátil Exigências dos projetos ² MS-DOS, Windows, Unix, Next, OS/2, Mac, EPOC, Palm. OS, Play. Station II, etc. ²
![Lua no Tecgraf q Praticamente todos os projetos usam Lua Lua no Tecgraf q Praticamente todos os projetos usam Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-27.jpg)
Lua no Tecgraf q Praticamente todos os projetos usam Lua
![A Linguagem Lua A Linguagem Lua](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-28.jpg)
A Linguagem Lua
![Como é Lua q Sintaxe convencional function fat n if n 0 then Como é Lua? q Sintaxe convencional function fat (n) if n == 0 then](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-29.jpg)
Como é Lua? q Sintaxe convencional function fat (n) if n == 0 then return 1 else return n*fat(n-1) end q Unidade ð Chunk básica de execução: chunk = lista de comandos ð Arquivo ou string do programa hospedeiro
![Execução de um chunk q Précompilado ð Podese q Máquina em bytecodes carregar arquivo Execução de um chunk q Pré-compilado ð Pode-se q Máquina em bytecodes carregar arquivo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-30.jpg)
Execução de um chunk q Pré-compilado ð Pode-se q Máquina em bytecodes carregar arquivo compilado virtual executa seqüencialmente q Execução altera ambiente global
![Tipos q Tipos associados a valores ð Variáveis armazenam qualquer tipo ² q Polimorfismo Tipos q Tipos associados a valores ð Variáveis armazenam qualquer tipo ² q Polimorfismo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-31.jpg)
Tipos q Tipos associados a valores ð Variáveis armazenam qualquer tipo ² q Polimorfismo natural Tipos existentes nil ð boolean ð number ð string ð table ð function ð userdata ð thread ð
![Tipo nil q Propósito q Tipo maior ser diferente dos demais do valor default Tipo nil q Propósito q Tipo maior: ser diferente dos demais do valor default](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-32.jpg)
Tipo nil q Propósito q Tipo maior: ser diferente dos demais do valor default das variáveis q Também significa o falso booleano ð Qualquer ² Com valor de outro tipo significa verdadeiro exceção de false
![Tipo boolean q Valor booleano ð Falso false ou verdadeiro true Tipo boolean q Valor booleano ð Falso (false) ou verdadeiro (true)](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-33.jpg)
Tipo boolean q Valor booleano ð Falso (false) ou verdadeiro (true)
![Tipo number q Único tipo nativo para valores numéricos ð double por default local Tipo number q Único tipo nativo para valores numéricos ð double (por default) local](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-34.jpg)
Tipo number q Único tipo nativo para valores numéricos ð double (por default) local a = 3 local b = 3. 5 local c = 4. 5 e-8
![Tipo string q Valores imutáveis q Sem limite de tamanho ðÉ comum ler arquivo Tipo string q Valores imutáveis q Sem limite de tamanho ðÉ comum ler arquivo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-35.jpg)
Tipo string q Valores imutáveis q Sem limite de tamanho ðÉ comum ler arquivo completo em uma string q Strings não usam ‘ ’ para terminação ð Podem armazenar dados binários quaisquer q Pattern-matching ð Implementado poderoso via biblioteca padrão
![Tipo table q q Resultado da expressão Arrays associativos ð Qualquer valor como Tipo table q q Resultado da expressão {} Arrays associativos ð Qualquer valor como](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-36.jpg)
Tipo table q q Resultado da expressão {} Arrays associativos ð Qualquer valor como chave ² q Valor de referência ð q São objetos dinâmicos Único mecanismo de estruturação de dados ð q Com exceção de nil São para Lua o que listas são para Lisp Implementadas como misto de array e hash Evolução permanente ð Excelente desempenho ð
![Estruturas de Dados com tabelas q Implementação simples e eficiente q Records ð Açucar Estruturas de Dados com tabelas q Implementação simples e eficiente q Records ð Açucar](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-37.jpg)
Estruturas de Dados com tabelas q Implementação simples e eficiente q Records ð Açucar sintático t. x para t["x"]: t = {} t. x = 10 t. y = 20 print(t. x, t. y) print(t["x"], t["y"])
![Estruturas de Dados com tabelas 2 q Arrays ð Inteiros como índices for i1 Estruturas de Dados com tabelas (2) q Arrays ð Inteiros como índices for i=1,](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-38.jpg)
Estruturas de Dados com tabelas (2) q Arrays ð Inteiros como índices for i=1, n do print(a[i]) end q Conjuntos ð Elementos como índices t = {} t[x] = 1 -- t = t {x} if t[x] then. . . -- x t? q “Bags" ð Elementos como índices, contadores como valores
![Tipo function q Valores de primeira classe function inc x return x1 end q Tipo function q Valores de primeira classe function inc (x) return x+1 end q](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-39.jpg)
Tipo function q Valores de primeira classe function inc (x) return x+1 end q Funções sugar inc = function (x) return x+1 end atribuídas a campos de tabelas w = { redraw = function (). . . end, pick = function (x, y). . . end, } if w. pick(x, y) then w. redraw() end
![Tipo function 2 q Passagem ð Suporte por valor e retorno múltiplo a atribuições Tipo function (2) q Passagem ð Suporte por valor e retorno múltiplo a atribuições](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-40.jpg)
Tipo function (2) q Passagem ð Suporte por valor e retorno múltiplo a atribuições múltiplas (x, y = y, x) a, b = f() print(f()) q Suporte function f() return 1, 2 end a número variável de argumentos ð Argumentos "empacotados" em uma tabela function f(. . . ) print(arg[1], arg[2]) end
![Escopo léxico q Acesso a variáveis em escopos externos q Expressão cujo valor é Escopo léxico q Acesso a variáveis em escopos externos q Expressão cujo valor é](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-41.jpg)
Escopo léxico q Acesso a variáveis em escopos externos q Expressão cujo valor é calculado quando a função que a contém é criada ð Quando o fecho é feito function add (x) return function (y) return y+x end add 1 = add(1) print(add 1(10)) --> 11 upvalue
![Construtores q Origem da linguagem q Descrição de dados semântica imperativa article authorF Construtores q Origem da linguagem q Descrição de dados + semântica imperativa article{ author="F.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-42.jpg)
Construtores q Origem da linguagem q Descrição de dados + semântica imperativa article{ author="F. P. Brooks", title="The Mythical Man-Month", year=1975 } temp = {} temp["author"] = "F. P. Brooks" temp["title"] = "The Mythical Man-Month" temp["year"] = 1975 article(temp)
![Objetos q Funções 1 a classe tabelas quase OO ð q Tabelas Objetos q Funções 1 a classe + tabelas = quase OO ð q Tabelas](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-43.jpg)
Objetos q Funções 1 a classe + tabelas = quase OO ð q Tabelas podem ter funções como campos Sugar para definição e chamada de métodos Trata parâmetro implícito self ð Ainda falta herança. . . ð function a: foo (x). . . end sugar a. foo = function (self, x). . . end a: foo(x) sugar a. foo(a, x)
![Tipo userdata q Armazena q Tipo um ponteiro void de C opaco para a Tipo userdata q Armazena q Tipo um ponteiro void* de C opaco para a](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-44.jpg)
Tipo userdata q Armazena q Tipo um ponteiro void* de C opaco para a linguagem ð Somente atribuição e teste de igualdade q Linguagem extensível em C ð “Esqueleto” para construção de linguagens de domínio específico
![Extensão de Tipos q Lua permite a criação de novos tipos ð Sobre os Extensão de Tipos q Lua permite a criação de novos “tipos” ð Sobre os](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-45.jpg)
Extensão de Tipos q Lua permite a criação de novos “tipos” ð Sobre os tipos básicos table e userdata ð Associação de metatable q Operações básicas podem ser redefinidas ð Operações aritméticas ð Indexação (index, newindex) ð Operações de ordem (less-than)
![Exemplo tipo Point Metatable de Point local Pointmetatable add function Exemplo: tipo Point -- Metatable de Point local Point_metatable = { __add = function](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-46.jpg)
Exemplo: tipo Point -- Metatable de Point local Point_metatable = { __add = function (p 1, p 2) return Point(p 1. x+p 2. x, p 1. y+p 2. y, p 1. z+p 2. 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 Pointmethods Print function Herança Simples: mecanismo de delegação -- Métodos local Point_methods = { Print = function](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-47.jpg)
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 (p 1, p 2) return Point(p 1. x+p 2. x, p 1. y+p 2. y, p 1. z+p 2. 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 q Basic q String q Table q Math q IO q OS Bibliotecas padrão q Basic q String q Table q Math q IO q OS](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-48.jpg)
Bibliotecas padrão q Basic q String q Table q Math q IO q OS q Debug q Coroutine
![Basic q Oferecem funções básicas ð print ð type ð setmetatable ð pairs Basic q Oferecem funções básicas ð print ð type ð setmetatable ð pairs](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-49.jpg)
Basic q Oferecem funções básicas ð print ð type ð setmetatable ð pairs
![String q Funções para manipulação de strings ð Casamento de padrões pattern matching ² String q Funções para manipulação de strings ð Casamento de padrões (pattern matching) ²](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-50.jpg)
String q Funções para manipulação de strings ð Casamento de padrões (pattern matching) ² string. find – Permite buscar a ocorrência de um padrão numa string ² string. gsub – Permite substituir ocorrâncias de um padrão por uma sequência de caracteres dentro de uma string
![Table q Funções para manipulação de tabelas ð table insert ² Inserir um novo Table q Funções para manipulação de tabelas ð table. insert ² Inserir um novo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-51.jpg)
Table q Funções para manipulação de tabelas ð table. insert ² Inserir um novo elemento ð table. remove ² Remover um elemento ð table. sort ² Ordenar os elementos em índices numéricos
![Math q Funções matemáticas ð Semelhantes ² math sqrt ² math sin ² math Math q Funções matemáticas ð Semelhantes ² math. sqrt ² math. sin ² math.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-52.jpg)
Math q Funções matemáticas ð Semelhantes ² math. sqrt ² math. sin ² math. log às funções de C
![IO q Funções de entrada e saída ð io open ² Abertura de arquivo IO q Funções de entrada e saída ð io. open ² Abertura de arquivo](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-53.jpg)
IO q Funções de entrada e saída ð io. open ² Abertura de arquivo ð io. close ² Fechamento de arquivo ð io. read ² Leitura de arquivo ð io. write ² Escrita em arquivo
![OS q Funções associadas ao sistema operacional ð os clock ð os date ð OS q Funções associadas ao sistema operacional ð os. clock ð os. date ð](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-54.jpg)
OS q Funções associadas ao sistema operacional ð os. clock ð os. date ð os. execute
![Debug q Facilidades de debug ð Acesso a pilha de execução ð Acesso a Debug q Facilidades de debug ð Acesso a pilha de execução ð Acesso a](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-55.jpg)
Debug q Facilidades de debug ð Acesso a pilha de execução ð Acesso a variáveis locais ð Registro de hooks ² Line hook ² Call hook ² Count hook
![Corotinas q Poderoso mecanismo de programação para jogos q Corotina x thread ð Ambos Co-rotinas q Poderoso mecanismo de programação para jogos q Co-rotina x thread ð Ambos](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-56.jpg)
Co-rotinas q Poderoso mecanismo de programação para jogos q Co-rotina x thread ð Ambos têm linhas de execução com seu próprio ambiente local ² ð Compartilham ambiente global Conceitualmente ² Threads executam simultaneamente – Exige tratamento de seções críticas ² Co-rotinas executam uma por vez – Transferência de controle explícita ð Execução de co-rotinas pode ser suspensa ² E retomada posteriormente
![Corotinas q Criação local c coroutine createfunction end printtypec Co-rotinas q Criação local c = coroutine. create(function (). . . end) print(type(c)) -->](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-57.jpg)
Co-rotinas q Criação local c = coroutine. create(function (). . . end) print(type(c)) --> "thread" q Estados ð ð ð q Suspensa Executando Inativa Troca de estado coroutine. resume(…) coroutine. yield(. . . ) q Comunicação entre co-rotinas ð ð resume “retorna” após um yield “retorna” quando execução é retomada (resume) Argumentos de yield são valores de retorno de resume Argumentos de resume são valores de retorno de yield
![Exemplo simulação de personagens local simulators coroutine createfunction end Exemplo: simulação de personagens local simulators = { coroutine. create(function (). . . end),](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-58.jpg)
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
![Exemplos de Integração com CC Exemplos de Integração com C/C++](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-59.jpg)
Exemplos de Integração com C/C++
![Lua como linguagem de configuração começar no meio do jogo usando Mickey Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. .](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-60.jpg)
Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. . . LEVEL = 13 HERO = "Mickey"
![Lua como linguagem de configuração include lua h include lauxlib h static int level0 Lua como linguagem de configuração #include "lua. h" #include "lauxlib. h" static int level=0;](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-61.jpg)
Lua como linguagem de configuração #include "lua. h" #include "lauxlib. h" static int level=0; const char* hero="Minnie"; . . . int main(void) { lua_State *L=lua_open(); lua. L_loadfile(L, "init. lua"); lua_pcall(L, 0, 0, 0); lua_getglobal(L, "LEVEL"); level=lua_tonumber(L, -1); lua_getglobal(L, "HERO"); 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 Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. .](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-62.jpg)
Lua como linguagem de configuração -- começar no meio do jogo, usando Mickey. . . LEVEL = 13 HERO = "Mickey" GREET = "Bom dia ". . HERO. . "! Como vai" SCORE = 1. 2 * LEVEL
![Lua como linguagem de extensão weapons knife aggression 0 Lua como linguagem de extensão weapons = { knife = { aggression = 0.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-63.jpg)
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 luagetglobalL weapons luapushstringL sword luagettableL 2 luapushstringL Lua como linguagem de extensão double accuracy; lua_getglobal(L, ”weapons”); lua_pushstring(L, ”sword”); lua_gettable(L, -2); lua_pushstring(L,](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-64.jpg)
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 weapons knife Weapon aggression Lua como linguagem de extensão weapons = { knife = Weapon { aggression =](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-65.jpg)
Lua como linguagem de extensão weapons = { knife = Weapon { aggression = 0. 3, attackrange = 0. 5, accuracy = 1. 0, }, . . . } 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 Report. Error("Invalid aggression value"). . . return self end
![Lua como linguagem de extensão weapons knife Weapon aggression 0 Lua como linguagem de extensão weapons = { knife = Weapon{ aggression = 0.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-66.jpg)
Lua como linguagem de extensão weapons = { knife = Weapon{ aggression = 0. 3, attackrange = 0. 5, accuracy = 1. 0, getit = function (person) if person: Has. Enough. Weapon() then person: Speak("Não preciso dessa faca") return false else person: Speak("Essa faca será util") return true end, }, . . . }
![Lua como linguagem de controle class CPerson public CPerson char modelfile Lua como linguagem de controle class CPerson {. . . public: CPerson (char* model_file);](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-67.jpg)
Lua como linguagem de controle class CPerson {. . . public: CPerson (char* model_file); void Set. Name (char* name); void Set. Energy (double value); Add. Skill (Weapon* w); double Get. Energy (); Walk (); Run (); Jump (); Attack (); . . . };
![Lua como linguagem de controle Hero Person name Tarzan model Lua como linguagem de controle Hero = Person { name = "Tarzan", model =](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-68.jpg)
Lua como linguagem de controle Hero = Person { name = "Tarzan", model = "models/tarzan. mdl", energy = 1. 0, skills = {knife, axe} } function Person (self) local cobj = CPerson: new(self. model) cobj: Set. Name(self. name) cobj: Set. Energy(self. energy) for i, v = ipairs(self. skills) do cobj: Add. Skill(v) end return cobj end
![Lua como linguagem de controle if Hero Get Energy 0 Lua como linguagem de controle . . . if Hero: Get. Energy() > 0.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-69.jpg)
Lua como linguagem de controle . . . if Hero: Get. Energy() > 0. 5 then Hero: Attack() else Hero: Run() end. . .
![Ferramenta de integração automática Ferramenta de integração automática](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-70.jpg)
Ferramenta de integração automática
![to Lua q Ferramenta Variáveis Funções Classes Métodos para mapear CC para Lua to to. Lua q Ferramenta Variáveis Funções Classes Métodos para mapear C/C++ para Lua to.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-71.jpg)
to. Lua q Ferramenta Variáveis Funções Classes Métodos para mapear C/C++ para Lua to. Lua Código C/C++ usando API de Lua. c/. cpp . pkg Aplicação tolua. lib
![to Lua exemplo de C define FALSE 0 define TRUE 1 enum POINT to. Lua: exemplo de C #define FALSE 0 #define TRUE 1 enum { POINT](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-72.jpg)
to. Lua: exemplo de C #define FALSE 0 #define TRUE 1 enum { POINT = 100, LINE, POLYGON } Object* create. Obejct (int type); void draw. Object (Object* obj, double red, double green, double blue); int is. Selected (Object* obj); . . . my. Line = create. Object(LINE). . . if is. Selected(my. Line) == TRUE then draw. Object(my. Line, 1. 0, 0. 0); else draw. Object(my. Line, 1. 0, 1. 0); end. . .
![to Lua exemplo de C define FALSE 0 define TRUE 1 class Shape to. Lua: exemplo de C++ #define FALSE 0 #define TRUE 1 class Shape {](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-73.jpg)
to. Lua: exemplo de C++ #define FALSE 0 #define TRUE 1 class Shape { void draw (void); void draw (double red, double green, double blue); int is. Selected (void); }; class Line : public Shape { Line (double x 1, double y 1, double x 2, double y 2); ~Line (void); }; . . . my. Line = Line: new (0, 0, 1, 1). . . if my. Line: is. Selected() == TRUE then my. Line: draw(1. 0, 0. 0) else my. Line: draw() end. . . my. Line: delete(). . .
![Para saber mais www lua org Para saber mais. . . www. lua. org](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-74.jpg)
Para saber mais. . . www. lua. org
![www lua org q q q R Ierusalimschy Programming in Lua org December 2003 www. lua. org q q q R. Ierusalimschy, Programming in Lua. org, December 2003.](https://slidetodoc.com/presentation_image_h/a45a6cb3b2dd84f4e26042956bda8151/image-75.jpg)
www. lua. org q q q R. Ierusalimschy, Programming in Lua. org, December 2003. ISBN 85 -903798 -1 -7. R. Ierusalimschy, L. H. de Figueiredo, W. Celes. “Lua 5. 0 Reference Manual”. Technical Report MCC-14/03, PUC-Rio, 2003. R. Ierusalimschy, L. H. de Figueiredo, W. Celes. The evolution of an extension language: a history of Lua, Proceedings of V Brazilian Symposium on Programming Languages (2001) B-14–B -28. R. Ierusalimschy, L. H. de Figueiredo, W. Celes. Lua—an extensible extension language. Software: Practice & Experience 26 #6 (1996) 635– 652. L. H. de Figueiredo, R. Ierusalimschy, W. Celes. Lua: an extensible embedded language. Dr. Dobb’s Journal 21 #12 (Dec 1996) 26– 33. L. H. de Figueiredo, R. Ierusalimschy, W. Celes. The design and implementation of a language for extending applications. Proceedings of XXI Brazilian Seminar on Software and Hardware (1994) 273– 83.
Jogos feitos em lua
Os jogos eletrônicos substituirão os jogos populares
Aplicaes
Aplicaes
Jogos cooperativos sem perdedores
Jogos criativos para jovens
Instituto de supervisão de jogos
Jogos e brincadeiras
Qual são os jogos
Teoria dos jogos
O dilema do prisioneiro
O que são jogos cooperativos
O que e jogos pré desportivos
Jogos online
Jogos populares do brasil e do mundo
Pessoas do discurso
Jogos online
Quem foi ted lentz
Jogos online gratis
Jogo do berlinde regras
Oficina de jogos e brincadeiras
Solidariedade e cooperação nos jogos esportivos
Efuturo jogos educativos
Distancia da terra a lua em notação cientifica
Lobo uivando pra lua
Wireshark lua 사용법
Lua extend
Lua sol e terra
Lua coroutines
Sol3 lua
Wireshark add dissector
Tập thơ vầng trăng quầng lửa
Lua buglight
O lua branca de fulgores e de encantos
Lua quarto crescente
Qmb bern
Lua 2 cpap
Lua development tools
Lua gui designer
O segredo do sol e da lua
Khi nào hổ con có thể sống độc lập
A que sabe a lua
[hkol;o
Torch batch matrix multiplication
Ti nspire lua
Se eu fosse a lua
Lua ^ operator
Lua minguanye
Lua getting started
Lua string to boolean
Wireshark dissector lua
What is lua
Caronte lua de plutão
Lua ltn12
đồng đăng có phố kỳ lừa lớp 3
Lua rust
Queda vertical
Lua
Tường lửa
Corpo luminoso
Ngoài đồng lúa chín thơm con chim hót trong vườn
A lua é o satélite natural do planeta terra
Questão 2 o que motivou felipe a reduzir as suas mentiras
Jogue fora suas batatas
Cafir planta
Principais ácidos e suas aplicações
Não gaste suas energias tentando consertar os outros
Risco fisico
Aqueles que confiam no senhor voarão como águias
Confiou a mim
Suas anahuac norte
Suas moodle
Colocar as necessidades de alguém acima das suas
Principais características do romantismo
Produção alimentar
Volume da calota esferica