Estou criando um jogo em que o sistema de batalha é semelhante ao Pokemon. Ou seja, uma batalha 1 contra 1 com apenas alguns movimentos (4-6) para escolher. À medida que o jogo está tomando forma, estou começando a pensar em algumas das áreas de codificação mais difíceis, como a IA do inimigo, e tenho algumas perguntas. Eu já pensei em algumas possibilidades para projetar a IA e também queria ouvir seus comentários.
Estou pensando em experimentar uma IA universal para o meu jogo, onde todos os monstros utilizarão a mesma lógica para determinar que movimento usarão. Ele será baseado em equações / valores atribuídos a cada movimento e determinar qual é o melhor a ser feito. Por exemplo, se o movimento dos monstros sofrer resistência (1/2 dano) pelo oponente, ele receberá um valor efetivo menor do que os outros e os movimentos que causarem dano extra devido à vulnerabilidade receberão um valor efetivo mais alto. Além disso, eu estava pensando em adicionar uma variável que reduz o valor se a movimentação tiver sido usada repetidamente para evitar que o computador sempre use a mesma movimentação. Eu sinto que isso está atualmente limitado apenas para fazer o computador usar o movimento de maior dano. Alguma sugestão?
SO para minhas perguntas.
Como o design da lógica da IA para cada monstro / Pokemon vs ter um conjunto geral de regras para todos afeta o tamanho do meu jogo em termos de código e eficácia da IA?
Existem recursos que discutem a criação de IA dessa maneira? Eu descobri muito pouco sobre a IA nos jogos Pokemon e não tenho certeza de que outros jogos possam ser similares em mecânica.
Obrigado pelo seu tempo!
fonte
Portanto, suas maiores preocupações são o código e a eficácia da IA. Como sua pergunta tem 44 visualizações e nenhuma sugestão, eu pensei que você não se importaria com as idéias de um jogador básico - especialmente aquele que jogou jogos de Pokemon. Eu não tenho um background de IA e apenas um pequeno background de programação, no entanto, penso:
Se você possui uma IA exclusiva por puxão (Pokemon), seu código pode ser enorme. Portanto, você precisa de classes de puxão e IA (um conjunto de estratégias) por classe. O problema é que, para as classes = n, você tem "A soma de i = n a i = 0 de i" conjuntos de estratégias (SS) a serem criados.
Se você cria suas aulas da maneira típica, há uma maneira de pedra-papel-tesoura para tudo. Como o fogo bate a água bate a terra carrega fogo (dá uma volta). Assim, cada puxão pode ter um identificador para a classe de puxão. Além disso, você diz um máximo de 5 jogadas.
Seu objeto Poke conteria o seguinte
classe # de listas ordenadas que priorizam qual mudança usar em relação a outras classes
Exemplo: Pikachu: Classe A. StrategySet A; 12345, B; 34512 C; 51234 Chrmndr: Classe B. StrategySet A; 21543, B; 12345 C; 34512 Squirtl: Classe C. StrategySet A; 43215, B; 21543 C; 12345
Quando eles lutam (digamos Pikachu x Charmander) se a CPU for Pikachu, o objeto Charmander passa a Classe B para Pikachu, e o CPU-Pikachu seleciona o conjunto de estratégias B; 34512, que é a maneira priorizada de combater um oponente da Classe B . Esses cinco movimentos se enquadram em categorias gerais (ataque, defesa, aceleração automática, velocidade do inimigo, ataque do inimigo) ou o que você tem e, portanto, o computador sabe o que usar primeiro. O uso de outros itens da lista pode estar dentro de parâmetros como a frequência de saúde do oponente ou até algo louco como o sim dos valores de prioridade que ultrapassam o máximo.
fonte
Eu fiz algum trabalho no código de batalha pixelmon, como já foi mencionado, funciona em opções ponderadas para os movimentos, mas também existem status para se preocupar, então o atributo speed é usado + buffs / debuffs / items para determinar o movimento ordem para esse turno e recalque o próximo turno.
Mas lembre-se de que existem movimentos e itens limitados para qualquer um usar em um jogo no estilo pokemon, pois todos são pré-determinados no início da batalha.
fonte