Uma maneira tradicional de atingir esse objetivo no desenvolvimento de jogos é usar uma arquitetura orientada a dados para os sistemas de jogos.
Em essência, isso significa que o código não implementa um tipo específico de arma (uma arma) com valores explicitamente definidos para seu alcance / dano / penetração, mas preenche os conceitos genéricos de uma arma de longo alcance (alcance / dano / penetração ...) de uma fonte de dados externa (para o código). Essa fonte externa pode variar de arquivos analisáveis (talvez XML) lidos no disco, a arquivos binários ou elementos de banco de dados gerados por ferramentas internas ou externas ao próprio mecanismo de jogo.
Definindo algo como um inimigo, o sistema de IA pode ser projetado para suportar um número de comportamentos genéricos (agressivo, defensivo, suporte, covarde) que são aprimorados por elementos controlados por dados.
My New Enemy, começa com o agressivo comportamento básico da IA com valores controlados por dados para: -ignore jogadores> meu nível + X-persegue jogadores até X unidades além do ponto de spawn -fuja quando a saúde <X -grandiu habilidades prioritárias -melee skills (para quando os jogadores se aproximam demais)
Um esquema orientado a dados mais complicado pode permitir a definição de pontos de dados específicos (eventos) nos quais um estado da AI faz a transição (máquina de estados finitos) para outro estado (ou até a chance de fazer a transição para um dos N outros estados), permitindo que os usuários definam um hierarquia complicada de comportamentos.
Tudo isso é obviamente mais trabalho do que apenas codificar explicitamente um comportamento, mas é um desafio divertido para permitir que os usuários produzam conteúdo sem modificação da fonte.
Existem pontos de bônus a serem alcançados:
- se você pode atualizar dados dinamicamente e ter as alterações refletidas no mecanismo do jogo sem reiniciar o aplicativo
- se você criar interfaces de usuário amigáveis sobre os dados, permitindo que os usuários usem uma interface para interagir com os dados, em vez de editar diretamente arquivos de texto (xml ou qualquer outro)
Para um jogo tutorial direcionado para uma multidão mais técnica, a maior parte do trabalho é feita em classes / objetos projetados que expõem interfaces limpas para os usuários estenderem que, por sua vez, também podem ser orientadas por dados.