Eu comecei a fazer alguns jogos pequenos em Java e estou pensando em aprender C # para um projeto maior. Eu gostaria muito de fazer um jogo modável, mas alguém me disse que eu preciso ficar com o Java se eu quiser que o jogo seja modável, embora eu não entenda o porquê.
Então, quais características da linguagem de programação tornam uma linguagem mais adequada para jogos modificáveis?
Respostas:
Depende de como você deseja projetar seu sistema mod. Vou explorar dois deles.
SDK
Provavelmente, você precisará que seus modders usem o mesmo idioma que você e carregue mods por reflexão (ou similar, dependendo do idioma de sua escolha). Obviamente, isso limitará você a idiomas que podem fazer ligação tardia - e muitos podem fazer isso (mesmo C pode fazer ligação tardia com alguns
LoadLibrary
truques inteligentes ). Você pode até fazer uma meta-modificação, onde um mod pode hospedar outros mods (por exemplo, mods com script).O primeiro problema com essa abordagem é ocultar o estado interno. Tomando C #, por exemplo, um modder poderia simplesmente usar reflexão para acessar membros privados, C também pode fazer isso (embora seja necessário mais esforço).
O segundo problema está hospedando. As pessoas realmente não gostam de código estrangeiro em execução no sistema sem sandbox no lugar. Como pior cenário, você pode escrever um mod que configure um seedbox; se isso foi instalado em um ISP, poderia causar sérios danos à sua reputação.
Script
Os modders usariam uma linguagem como Lua para criar mods. Você exigiria uma linguagem que pudesse invocar o código nativo (para fazer interface com Lua); ou você teria que escrever sua própria linguagem de script no idioma de sua escolha.
O primeiro problema aqui é que a maioria das linguagens de script é interpretada, o que pode não ser aceitável para sistemas em tempo real (embora veja LuaJIT); como jogos.
Ironicamente, o segundo problema ainda existe aqui; Tomando Lua como exemplo, fiquei extremamente desapontado por ter funções de 'descasque' incluídas na biblioteca principal / padrão - tornando-o totalmente inútil como um ambiente de área restrita (sem uma grande quantidade de esforço, sorte e manutenção), é difícil retrate o quão bravo estou com isso, mas eu realmente espero que eles estejam bebendo alguns coquetéis fortes quando incluírem esses anti-recursos . Obviamente, você poderia evitar isso facilmente se rolasse sua própria linguagem (consulte: UnrealScript).
Finalmente, o custo de interagir com um mecanismo de script pode ser proibitivo - novamente, tomando Lua como exemplo, combinado com C #: C # possui uma sobrecarga substancial ao invocar funções nativas (via P / Invoke) e Lua é uma API bastante 'falante'. Isso pode causar problemas se a maneira como você cria o 'script SDK' exigir muito bate-papo entre o idioma principal e a linguagem de script (observe que C realmente não tem esse problema). Novamente, você pode evitar isso escrevendo sua própria linguagem de script (e no caso de C # compilando-a no MSIL) e executando-a da maneira mais rápida no seu ambiente [virtual].
Como o script está essencialmente rodando em um sistema completamente diferente do seu código primário, você pode controlar o acesso ao estado interno completamente (a menos que eles façam coisas sofisticadas com as funções de shell mencionadas anteriormente).
Conclusão
Eu fiz veer um tópico off-bit, no entanto, o que você pode basicamente Garner daquela parede de texto é que você deve ser capaz de fazer um jogo moddable em qualquer idioma (eu arriscaria dizer que você puder ) - mas em alguns idiomas pode levar a mais trabalho. Eu sou um pouco anal com segurança? Sim, você também deveria ser quando se trata de código de usuário.
fonte
Eu diria que a linguagem não é um fator decisivo aqui, é realmente o quão flexível e orientada por dados você faz seu jogo que a define.
Todo jogo roda em um conjunto de dados (por exemplo, tudo, desde níveis, malhas, configurações, itens). A diferença entre um jogo normal e um jogo modável é que, posteriormente, fornece ferramentas que permitem ao usuário modificar dados existentes (ou adicionar seus próprios dados). Qualquer que seja o idioma que você escolher, tente tornar o jogo o mais guiado por dados possível e evite codificar qualquer conteúdo do jogo. Praticamente qualquer idioma que você provavelmente escolherá poderá ler dados do disco, o que é mais do que você precisa.
Também está na metade do caminho, se você apenas criar as ferramentas para seu uso pessoal (por exemplo, seu próprio editor de níveis) e depois aperfeiçoá-las e compartilhá-las com seus usuários. O editor de nível Super Meat Boy era praticamente isso, uma versão melhorada da ferramenta usada durante o desenvolvimento do jogo.
E, dependendo do tipo de jogo, convém permitir que os usuários escrevam parte do comportamento do jogo. Nesse caso, você deve incorporar uma linguagem de script ao seu jogo desde o início (seja a sua ou uma já existente, como Lua ou Python, que são escolhas populares). Isso também se enquadra na categoria de design orientado a dados. Se você decidir usar uma linguagem de script existente, talvez valha a pena verificar se a linguagem de programação de sua escolha possui ligações para essa linguagem de script (geralmente na forma de bibliotecas de terceiros).
fonte
O idioma que você escolhe não determina realmente como um jogo é modável, a maneira como você usa o idioma é mais importante.
Se a maior parte do seu jogo for orientada por dados (ou seja, os dados do jogo são definidos em um arquivo que é lido a partir do seu código), o jogo pode ser muito modificável. Isso pode ser feito em praticamente qualquer idioma. O uso de uma linguagem de script também facilita a modificação de um jogo.
No entanto, isso não significa automaticamente que não usar essas coisas torna impossível modificar um jogo. O Minecraft, por exemplo, não é um jogo muito modificável, no entanto, existem bons decompiladores disponíveis para Java e uma comunidade muito grande para o Minecraft; portanto, muitas ferramentas foram feitas para tornar o Minecraft modificável (vários modloaders, Bukkit). Com essas ferramentas, é possível modificar o Minecraft (no entanto, elas são, provavelmente, tecnicamente ilegais em alguns países).
O melhor conselho que posso dar é usar as ferramentas que você deseja que os modders usem; Se você definir um NPC a partir de um arquivo, ele poderá ser modificado; se você especificar um código especial, provavelmente não poderá ser.
fonte
Java é perfeitamente adequado para escrever um jogo modável.
Dito isto, a melhor maneira de tornar um jogo modificável é geralmente adotar uma linguagem dinâmica que possa ser incorporada ao aplicativo mais amplo e usada para scripts. Você normalmente deseja uma linguagem dinâmica porque o objetivo é poder interagir com o código em tempo de execução, sem passar por todo um ciclo de compilação / construção / teste.
Algumas opções de idioma dinâmico a serem consideradas:
fonte
Existe uma maneira mais fácil de fazer isso em java, embora seja um pouco desleixado. Tudo o que você precisa fazer é pegar os arquivos java de ponto em uma pasta e, em seguida, colocar esse arquivo em lotes com a pasta, denomine Run:
javac /src/.java Java / src /
Nota: Você pode adicionar quantas classes desejar. Nota: Na última linha, certifique-se de NÃO colocar extensões conhecidas como .java, .exe, .bat, ect.
Isso basicamente recompilará o código toda vez que o jogo for executado, portanto, se a fonte do jogo for alterada, ele será compilado e, em seguida, será executado o jogo recém-compilado ... Infelizmente, você não pode adicionar mods de outras pessoas ao jogo.
fonte