Qual linguagem de script devo escolher para o meu jogo? [fechadas]

53

Em que casos as linguagens de script são melhores que outras?

Todas as respostas são bem-vindas, forneça uma descrição e descreva em que casos o idioma se destaca.

(Lembre-se, um idioma por resposta)

Linus Sjögren
fonte

Respostas:

39

Lua é amplamente utilizada na indústria de jogos . De jogos independentes ( Aquaria ) a títulos AAA (Civilização).

O principal motivo? Eu diria porque é fácil aprender e incorporar em seus jogos. Mas o mesmo pode ser dito para Python, tenho certeza. Os scripts, em geral, não são difíceis. Eu acho que a verdadeira razão pela qual você deve usar Lua é porque está provado o que resulta em muito mais recursos para você aprender. Se você quiser experimentar algo fora da norma, eu começaria a mexer em outro idioma.

David McGraw
fonte
8
Lua é muito popular porque fornece recursos de "meta linguagem". Você pode implementar estruturas orientadas a objetos ou funções processuais puras, etc. Ele possui uma interface C muito simples e oferece ao desenvolvedor do mecanismo muita flexibilidade na própria linguagem.
22410 Karantza
3
Não estou convencido de que o python faria uma boa escolha. As ligações C para pitão são muito mais orientada no sentido de alargar pitão com C, em seguida, a incorporação do pitão em C.
SpoonMeiser
5
Pelo que ouvi, o Ĺua também tem um bom desempenho em tempo de execução quando comparado a outras linguagens de script como o Python. (e tem suporte completo para o fechamento - uma característica muito bacana se você me perguntar ..)
thbusch
2
Na verdade Civilization IV usa python ...
Emiliano
2
@happy_emi De fato, enquanto Civ V usa Lua
Tobias KIENZLER
23

Esquilo

O esquilo tem uma história interessante. Foi construído depois que um arquiteto de jogos teve problemas com a coleta de lixo imprevisível de Lua, e louco tudo é nulo, mesmo que não exista .

Esquilo é a linguagem usada no Left 4 Dead 2 . A API é muito parecida com a lua (o autor do esquilo adora o design da Lua ).

Então, Squirrel é uma linguagem incrível, já que é uma lua de segunda geração. Ele pegou as boas idéias e removeu as excentricidades irritantes.

O mesmo de Lua:

  • corotinas
  • tabelas e meta-tabelas
  • dinâmico digitado
  • muito mais

Novo no esquilo:

  • aulas
  • matrizes
  • regexs em vez da sintaxe de correspondência de Lua.
  • Linguagem no estilo C / C ++ / Java / C # em vez do estilo Pascal / Delphi.
  • muito mais

A principal desvantagem do esquilo é que não é Lua. Lua é muito mais amplamente usada. Mas se isso não é um problema, o esquilo é uma vitória fácil. No entanto, muitas vezes a popularidade do idioma é um recurso útil por si só, portanto a decisão não é tão clara.

deft_code
fonte
9

V8 Javascript do google.

PRO's:

Muito fácil de usar

Constantemente melhorando

Poderoso e flexível

Outros Como muitos mencionados, o javascript é uma ferramenta comum de programador. Adicioná-lo aos meus jogos abriu muito mais pessoas que se sentem capazes do que outros idiomas. Ele também suporta uma enorme quantidade de conversão e conversão para economizar trabalho para o programador, também facilita o uso e funciona bem com o STL.

Possíveis CONs:

A documentação pode ser confusa Não é realmente o melhor.

Exemplos Muitas vezes, uma teia de estranheza. Na falta de simplicidade sólida, ele se apresenta como um nível muito mais alto do que é.

Modelos Às vezes, esses são odiados ou evitados.

Tamanho da base de código do SDK O tamanho do código gerado pode ser considerado inchado.

FuzzYspo0N
fonte
Um golpe para mim foi o tamanho. Se você estiver criando um jogo simples / casual, o mecanismo da v8 é bastante grande e pode até ser muitas vezes maior que o jogo inteiro.
Zack The Human
É verdade, mas como um arquivo .lib independente é uma grande preocupação? Ele simplesmente se encaixa próximo ao seu SDL ou lua. Se você quis dizer tamanho do código gerado, bem, eu não testei quão grande é, mas isso não é um ponto ruim.
underscorediscovery
Eu quis dizer o tamanho do código gerado. Suponho que não seja tão grande, considerando o tamanho da maioria dos jogos hoje.
Zack The Human
11
Testado, shell.cc padrão com os relógios SVN mais recentes com 1,441 MB bit.ly/9DNn8J . Embora isso pareça bastante pesado, a maioria das bibliotecas necessárias para fazer qualquer outra coisa (rede, gráficos) adicionará a isso da mesma forma dramática. Um projeto paralelo meu com v8, phoenixGL, ENet, muitos pacotes de impulso e muito mais código dentro da solução (como compactação, criptografia, bibliotecas de GUI, awesomium) tem clock de 2,5 MB no visual studio 2008 - release "compilar pesos em 861 KB. Para mim, isso não é tão ruim assim. Em certas plataformas eu poderia vê-lo sendo problemático - não para a maioria embora :)
underscorediscovery
11
Eu usei o V8 algumas vezes antes em meus projetos. O Javascript da IMO é a linguagem mais ideal para scripts de jogos. A natureza baseada em eventos e os objetos baseados em protótipos facilitam tudo. :)
Stephen Belanger
7

Isso depende do jogo e sua plataforma de destino.

Um jogo que roda 100 personagens não-jogadores (jogos RTS) tem necessidades diferentes de um jogo que roda apenas 2 (Street Fighter). Um jogo que é executado em um PC tem necessidades diferentes de um jogo que é executado em um console.

Lua é popular

O GameMonkey é usado por várias equipes. É mais rápido que Lua e melhor em rosqueamento.

Python tem sido usado em vários jogos.

JavaScript é uma opção possível, pois você pode fazer o download de mecanismos JavaScript. Existem mais programadores JavaScript do que qualquer outro tipo de programador.

Existem também idiomas especializados.

O SCUMM foi usado em vários jogos de aventura e é particularmente adequado para esses jogos.

gman
fonte
Javascript é realmente uma boa ideia. Eu me pergunto por que não parece ter tração nesse espaço? Alguma ideia?
cflewis
JavaScript tem tração. A unidade usa isso. O mesmo vale para a Wolfire Games.
AA Grapsas
Dois motores realmente não fazem tração. Eu acho que a razão de ser apenas um desenvolvimento recente é que não houve muitos bons intérpretes de JavaScript antes do Mono e do V8. SpiderMonkey não é exatamente algo que você olha e diz "Sim, eu quero que meu jogo seja tão rápido, magro e estável!"
4

Por uma questão de integridade, outra opção é o mono-script , que permite usar a implementação da Novell da estrutura .NET para scripts. É o que o Unity usa. Aqui está outra página sobre a incorporação de mono no seu aplicativo.

A estrutura Mono é mais rápida do que a maioria (talvez todas?) Das linguagens de script disponíveis por não ser interpretada e por haver uma camada entre o compilador e o conjunto de instruções, permite programar em uma variedade de linguagens, incluindo C # e dialetos de Python, Lua e Javascript.

Não tenho certeza se é gratuito em todas as plataformas.

Sander van Rossen
fonte
4
Observe que, se você estiver desenvolvendo o console, o código JIT está aparentemente fora de questão, porque você não pode marcar as páginas de dados como executáveis. A IL deve ser pré-compilada na plataforma de destino.
21410 Jeff
3
O problema JIT também se aplica ao iOS. Também o Mono tem restrições de licença. Você precisa de uma licença comercial se quiser usá-la em um ambiente em que o usuário final não possa / possa atualizar o tempo de execução do Mono.
Sam
4

Pessoalmente, achei o AngelScript (veja o link abaixo) muito mais fácil de vincular ao C ++ do que o Lua quando eu estava escolhendo uma linguagem de script para o meu próprio projeto. (Na verdade, eu escrevi uma pequena biblioteca de invólucros para facilitar ainda mais o uso, ao custo de alguma flexibilidade.)

http://www.angelcode.com/angelscript/

Dito isto, suspeito que Lua tenha algumas vantagens que o tornam atraente para desenvolvedores de jogos comerciais:

(a) É mais maduro e difundido que o AngelScript

(b) Sua sintaxe é mais fácil para não programadores (AngelScript é muito parecido com C ++)

(c) Tem uma pegada menor que o AngelScript (pelo menos tanto quanto me lembro)

Se você está apenas escrevendo um projeto de hobby, eu diria que o AngelScript vale pelo menos uma olhada.

Stuart Golodetz
fonte
2

Você deve escolher uma linguagem de script que tenha ligações estáveis ​​e bem suportadas à linguagem de desenvolvimento principal do seu jogo. Se você está escrevendo seu jogo em C ou C ++, existem ligações bastante sólidas disponíveis para Python e Lua. Se você está escrevendo seu jogo para a plataforma .NET (usando C # ou outro idioma), é altamente recomendável usar o IronPython ou o IronRuby. Ambas são implementações completas de linguagem que aproveitam o Dynamic Language Runtime (DLR) da Microsoft, que oferece excelente desempenho e integração muito estreita com o .NET Framework. Atualmente, a interoperabilidade entre C # e IronPython / IronRuby é bastante suave, especialmente com a introdução da ligação dinâmica de site de chamada no C # 4.0.

Mike Strobel
fonte
2

Esquema

Bem, astúcia especificamente.

Com dolo, você pode ter seu próprio DSL (Domain Specific Language) apenas para o seu jogo. Depois de se acostumar com os parênteses e a notação de prefixo, o esquema é o paraíso para se trabalhar.

Se você usar o truque em um jogo sério, esperaria alguns meses até o lançamento do 2.0, que incluirá o IIRC, um intérprete Ecmascript e o esquema atual. Você também pode esperar ver grandes melhorias na velocidade.

Joe D
fonte
1

Isso depende do que você realmente precisa. Como David aponta, Lua é muito popular, embora um desenvolvedor de jogos tenha me observado que não tinha muita certeza do porquê. Eu acho que a leveza é um motivo comum, mas, nesse ponto, eu esperaria que muitas pessoas usassem Lua porque esse se tornou o padrão de fato. Parece melhor para modificações muito leves.

Para uma abordagem mais completa, eu diria que Python é a escolha certa. Civ IV usou-o com efeito decente.

cflewis
fonte
0

A escolha de uma linguagem de script em detrimento de outra depende de seus requisitos específicos.

Algumas das opções que você deve escolher podem ser:

Velocidade do intérprete - se o recurso de script for usado apenas, ou seja, pelos desenvolvedores para criar um script do comportamento estático, a velocidade e uma API extensível e completa podem ser o aspecto mais importante. Eu tive algumas boas experiências com LUA lá.

Fácil de aprender, acessibilidade - para um designer de conteúdo / nível, pode ser difícil aprender linguagens de script mais complexas (depende do plano de fundo) para gerar comportamento dinâmico. Nesse caso, o uso de idiomas fáceis de aprender (ou seja, comumente usados) e bem documentados pode ser mais apropriado aqui. JavaScript ou Python pode ser uma boa solução aqui.

Integração de fluxo de trabalho - se você tiver um pipeline de produção específico com ferramentas já existentes, pode ser uma má idéia usar uma linguagem que pareça funcionar melhor para um determinado caso, se as outras ferramentas estiverem trabalhando com uma completamente diferente. Isso é especialmente válido se você tiver vários programadores trabalhando nas diferentes ferramentas. Nesse caso, poderia ser mais eficiente usar a linguagem "não muito adequada".

Blackbone
fonte
0

Se você está trabalhando em um título para Windows e escrevendo código gerenciado executando sobre o Common Language Runtime (CLR) - digamos, por exemplo, em C # -, sugiro que você dê uma olhada na integração do (Iron) Python como linguagem de script.

Na minha experiência, o Python é muito fácil de ensinar para não programadores / designers. É ainda mais fácil escolher para os desenvolvedores, uma vez que se lê essencialmente como pseudocódigo. Ser digitado dinamicamente é apenas um dos aspectos que ajudam a colocar as pessoas com pouca ou nenhuma experiência anterior em codificação em funcionamento rapidamente com o idioma.

Além de o idioma ser fácil de aprender e poderoso, as equipes de CLR e de idiomas da Microsoft (Anders Hejlsberg, Eric Lippert, Mads Torgersen, Jim Hugunin et al.) Fizeram um excelente trabalho ao expor os recursos de compilador e tempo de execução por meio do novo Dynamic DLR (Language Runtime) no .NET 4, tornando a interoperabilidade entre código digitado estaticamente e código digitado dinamicamente muito mais simples. Pelo que vi e tentei até agora, o código padrão é reduzido ao mínimo. Isso manterá sua base de código limpa e sustentável.

Você pode utilizar isso para manter o atrito entre as partes com script do seu jogo e o mecanismo muito baixo. A execução de ambos na mesma VM também permitirá que o tempo de execução otimize mais seu código durante a execução.

codesurgeon
fonte
0

A resposta depende muito do seu ambiente. Atualmente, estou trabalhando com o Unity, então uso uma linguagem baseada em mono (no meu caso, C #, mas Javascript e Boo também são opções). A resposta depende inteiramente de suas circunstâncias específicas.

user266
fonte
-2

O ActionScript é uma linguagem híbrida de tipo dinâmico / estático usada para criar jogos em Flash, que pode ser amplamente distribuída na Web. É bastante bem suportado por bibliotecas como Flixel, FlashPunk e Box2d.

Iain
fonte
-2

Se você já possui uma equipe que usará a linguagem de script ou um designer líder (de nível) que usará o script, escolha o idioma de sua escolha. Eles vão gastar seu tempo com isso, então eles devem ser atendidos.

[grão de sal] Se você não tem ninguém ou planeja a longo prazo, faça o seu . Sim, escrever um compilador e / ou intérprete para uma linguagem de script pode levar uma semana ou duas, mas a longo prazo, a flexibilidade pagará muitas vezes. Só não se extravie e reinvente o cérebro. [/grão de sal]

Andreas
fonte
Eu escreveria um intérprete ou compilador jit em haskell para sth como lisp / schema ou bash ou python ou lua ou erlang (qualquer coisa sem suas bibliotecas padrão) em um ou dois dias. Eu não sugeriria escrever um intérprete em C ++ ou Java, desde que não seja para interpretar como sth lisp. Mas essa não era a questão, de qualquer maneira.
comonad 18/11/10
Eu acho que a questão foi mais voltada para os prós e contras das linguagens de script, não como decidir qual usar. Ainda útil, suponho.
Michael Coleman