Como implemento um sistema de programação no meu jogo que é acessível, poderoso e rápido para codificar?

15

Atualmente, estou trabalhando em um jogo sandbox baseado em espaço, que contará com a capacidade de programar seus sistemas de maneira personalizada. Eu quero implementar isso de uma maneira que seja ao mesmo tempo

  1. acessível,
  2. poderoso (o mínimo necessário seria a perfeição)
  3. rápido para codificar.

As linguagens baseadas em texto geralmente atendem apenas aos dois últimos requisitos e, embora não seja difícil projetar uma linguagem visual que satisfaça os dois primeiros, as linguagens visuais são difíceis de programar devido à necessidade de uso extensivo do mouse. Embora existam algumas linguagens baseadas em texto muito acessíveis, quero que não programadores completos possam facilitar a programação.

Dimitriye98
fonte
Ficarei surpreso se alguém puder realmente dar um exemplo. Porque eu realmente acho que isso precisa de alguma pesquisa extensiva (por exemplo, como os seres humanos se aplicam a lógica eo que não, fatores psicológicos que quer e todos estes humana centradas coisas)
Sidar
2
Ninguém mencionou o Scratch?
31513 Russell
2
Não vou sugerir uma votação apertada, mas quero ressaltar que isso se enquadra muito bem na categoria "Se você pode imaginar um livro inteiro que responda sua pergunta, está perguntando demais" categoria de perguntas a não perguntar do FAQ; esse é um problema muito difícil e, embora as pessoas aqui possam oferecer conselhos, é provável que seja um problema além dos limites de um site SE.
Steven Stadnicki
Vale a pena notar que a integridade de Turing pode ser alcançada pelo jogo da vida de Conway , pelo Minecraft e outros sistemas não projetados para programação.
Will

Respostas:

10

Realmente, a única maneira de ter todos os recursos é implementar várias interfaces. Acessível e poderoso são frequentemente duas extremidades de um espectro. A maneira mais fácil de fazer isso é implementar um sistema poderoso, que possui uma interface adicional para permitir que iniciantes interajam com o sistema de maneira intuitiva.

Permitindo um sistema que permita que os iniciantes programem visualmente, talvez algo semelhante às ferramentas de programação Lego Mindstorms :

insira a descrição da imagem aqui

Onde existem componentes de arrastar / soltar. Os componentes têm entradas e saídas. Os componentes podem ser simples AND, como ORportões, ou mais complexos, como um teste para inimigos próximos.

Idealmente, a representação visual deve compilar um script de linguagem escrita em segundo plano.Isso oferece uma ferramenta poderosa para aprender o idioma também. Se um iniciante pode "escrever" visualmente seu programa, então leia o código que produz, é muito mais provável que o entenda e possa modificar o código produzido. Eventualmente, conseguir escrever código mais poderoso do que as ferramentas visuais por si só permitem. Isso cumpre o requisito de facilitar a programação dos usuários.

A espinha dorsal do sistema, é claro, é uma linguagem escrita. As ferramentas visuais são apenas para fornecer aos usuários uma rápida maneira de programar algo simples e permitir que iniciantes iniciem.

A linguagem escrita permite que usuários avançados façam coisas avançadas. E você pode até permitir que os usuários criem seus próprios componentes, criando scripts personalizados. Em seguida, eles podem reutilizar os componentes criados em uma interface rápida e fácil para uma programação rápida.

Boa sorte! Soa como um projeto divertido.

MichaelHouse
fonte
Obrigado pela explicação. Na verdade, eu estava pensando em fazer algo como o NXT-G, só que por experiência própria sei como é difícil criar programas complicados em uma linguagem como essa. Adoro a idéia de converter programas visuais em código, permitindo que os jogadores voltem e editem seus programas textualmente quando tiverem mais experiência, então provavelmente vou usá-lo.
Dimitriye98
11
Lembre-se de que é fácil gerar algum código de script a partir de representações gráficas, mas muito difícil gerar uma representação gráfica (significativa e legível) a partir de um script. Portanto, você provavelmente terá uma sintaxe de script própria muito restrita.
Imi
11
É improvável que você queira implementar script-> visual exatamente por esse motivo. Fique com visual-> script.
MichaelHouse
Blocos de macro (blocos que fornecem entradas / saídas e a capacidade de colocar blocos abitrários dentro) podem ser usados ​​para fornecer hierarquia, encapsulamento e reutilização para facilitar a criação de programas complexos. Apenas certifique-se de não poder colocar macros dentro de macros ou de detectar esses casos ... Conheço pelo menos um programa que falha ao detectar esses loops infinitos.
Exilyth
5

Você pode querer dar uma olhada no bloco do Google , eles combinam os elementos visuais com termos de programação reconhecíveis, mantendo um nível de acessibilidade bastante decente.

insira a descrição da imagem aqui

Você pode dar uma olhada na demonstração do Maze para se inspirar, muitos dos meus amigos não programadores foram capazes de percorrer a maior parte dos quebra-cabeças usando-a, satisfazendo pelo menos alguns dos seus critérios em vigor.

Quetzalcoatl
fonte
Linguagem interessante do ponto de vista da acessibilidade, porém a programação é muito lenta (eu apenas tentei) ...
Pasha
@ PashaS De fato, acho que isso faz parte do preço que você tem que pagar para tentar obter o melhor dos dois mundos.
Quetzalcoatl
4

Estou surpreso que isso não tenha sido mencionado antes, mas o Scratch do MIT usa uma interface de bloco que é rápida para codificar. Permite que os usuários criem suas próprias funções e podem se tornar surpreendentemente complexos para uma linguagem criada para ensinar às crianças como código.

Stencyl é outro exemplo de código de bloco que faz algo mais parecido com o que você deseja. Codificar com blocos como esses é muito mais eficiente e consome menos tempo do que as interfaces de programação visual como as usadas pelo Lego NXT. O Stencyl permite que os usuários codifiquem o Actionscript ou os blocos.

Peço desculpas pela falta de fotos, ainda não tenho reputação suficiente para postar imagens.

Barba de linho
fonte
2

A linguagem de programação BPEL possui representação visual e muitas ferramentas que trabalham com ela. É uma linguagem de fluxo de trabalho, não uma linguagem de programação, mas está completa. É detalhado, mas é fácil escrever para programadores e pessoas de negócios e é facilmente traduzível da forma visual para a textual. Eu não acho que seria uma boa linguagem de jogo, mas pode servir como fonte de inspiração. E, dada a quantidade de ferramentas e mecanismos BPEL, deve ser possível reutilizar algumas idéias e / ou código.

A linguagem do tipo BPEL não se parece com programação, mais como roteamento e conexão de sistemas. Assim, você pode ter um sistema de mira conectado a um sistema de armas com alguma lógica no meio.

MartinTeeVarga
fonte
+1: Embora eu não defendesse o próprio BPEL, sua abordagem é exatamente a resposta que eu daria. Linguagem altamente regular, fácil de representar em texto ou visualmente e que se concentra mais no roteamento / resposta de eventos do que em paradigmas de programação "normais".
Sean Middleditch
1

Considere esta abordagem:

  1. Verifique se a sua lógica de script é expressável em mecânicas simples baseadas em regras. Por exemplo, você tem "Trigger" que ocorre durante o jogo associado às "Condições" que devem ser preenchidas e, em seguida, "Ações" são executadas (roubadas descaradamente do Starcraft 2 Editor).
  2. Em seguida, forneça uma interface do usuário na qual você possa arrastar e soltar algumas ações / condições / disparadores predefinidos e construir 90% dos casos de uso que as pessoas geralmente desejam.
  3. Agora, integre algum mecanismo de script poderoso e popular como Lua, Python ou C #
  4. Por fim, escreva algumas dúzias dessas ações / condições / disparadores nesse idioma. Certifique-se de que o usuário de personalização possa copiar, colar, editar e integrar essas e novas ações com facilidade no editor drag'n'drop.
  5. Você provavelmente deseja parametrizar seus gatilhos, condições e ações e, portanto, precisa de mais primitivas que essas três, por exemplo, "GameObject", "Position", "Number" ou "String". Na interface do usuário, você precisará de algumas caixas de diálogo para atribuir esses parâmetros, mas isso ainda é muito menos trabalhoso do que se você pudesse construir scripts inteiros por meio de operações da interface do usuário.

Essa é a maneira mais rápida em que consigo pensar em obter todos os doces sem muita dor. Você recebe os noobs click'n'drag e os vim-geeks a bordo. E se você mantiver a mecânica simples (por exemplo, Trigger -> Condition -> Action), não precisará gastar o tempo de trabalho no desenvolvimento de uma interface do usuário para um editor de script gráfico poderoso e ainda fácil de usar.

Alguns exemplos para esclarecer o que quero dizer:

  • O gatilho pode ser: "Estrutura do jogo inicializada", "Jogo carregado", "Unidade criada", "Unidade destruída", "Jogador danificado" e assim por diante. Os gatilhos geralmente têm alguns parâmetros (por exemplo, a unidade criada obtém o GameObject que foi criado)
  • As condições são todas as condições aritmáticas básicas e booleanas padrão (e / ou / não / iguais / maiores ...), além de algumas condições típicas encontradas em seu jogo como "A unidade está com a saúde total" ou "Pelo menos dois jogadores estão conectados". As condições geralmente têm parâmetros que o usuário precisa preencher (usando a interface do usuário)
  • Ações são scripts que também podem ter algum parâmetro simples. como "Mova a câmera para XXX", "Mate a unidade Y", "Game over", "Execute Trigger" e "Chame ações X, Y, Z ... em uma sequência"
Imi
fonte
Observe que a programação é para computadores no jogo, não para plugins. Obrigado mesmo assim.
Dimitriye98
Entendo ... isso soa como uma abordagem interessante do jogo;). Você já olhou para jogos semelhantes como "Code Hero" ou "Garry's Mod", que tentam fornecer recursos de codificação sem quebrar a imersão no jogo? De qualquer forma, você ainda pode salvar meus conselhos básicos e dividir o problema em partes de scripts e de interface do usuário. Boa sorte com seu jogo. :)
Imi
Bem, a codificação será feita nos consoles de computador do jogo, o que não deve prejudicar muito a imersão. Embora os usuários que desejam possam codificar fora do jogo, importe o código para salvar ou para o servidor em que jogam.
Dimitriye98