Quero criar um analisador de regras genérico para sistemas RPG com estilo de caneta e papel. Uma regra pode envolver normalmente 1 a N entidades 1 a N funções de um dado e calcular valores com base em vários atributos de uma entidade.
Por exemplo:
O jogador tem STR 18, sua arma atualmente equipada lhe dá um bônus de +1 STR, mas um malus de DEX -1. Ele ataca uma entidade monstro e a lógica do jogo agora é necessária para executar um conjunto de regras ou ações:
O jogador lança os dados, se receber, por exemplo, 8 ou mais (o valor de ataque base que ele precisa passar é um dos seus atributos básicos!), Seu ataque é bem-sucedido. O monstro então lança os dados para calcular se o ataque passa por sua armadura. Se sim, o dano é recebido, se não o ataque foi bloqueado.
Além das simples regras matemáticas, também pode haver restrições, como aplicar apenas a uma determinada classe de usuário (guerreiro vs assistente, por exemplo) ou qualquer outro atributo. Portanto, isso não se limita apenas às operações matemáticas.
Se você estiver familiarizado com sistemas de RPG como Dungeon e Dragons, saberá o que estou fazendo.
Meu problema agora é que não tenho idéia de como criar exatamente isso da melhor maneira possível. Quero que as pessoas sejam capazes de estabelecer qualquer tipo de regra e, mais tarde, simplesmente executar uma ação como selecionar um jogador e um monstro e executar uma ação (conjunto de regras como um ataque).
Estou pedindo menos ajuda com o lado do banco de dados, mas mais sobre como criar uma estrutura e um analisador para manter minhas regras flexíveis. A linguagem de escolha para isso é php por sinal.
Editar I:
Deixe-me refinar meu objetivo: quero criar uma interface amigável (que não exija que alguém aprenda uma linguagem de programação) para criar regras de jogo mais ou menos complexas. O motivo simples: uso pessoal para não precisar lembrar de todas as regras o tempo todo, simplesmente não jogamos com tanta frequência e é uma parada para procurá-las sempre. Além disso: Parece uma tarefa divertida de fazer e aprender alguma coisa. :)
O que eu tentei até agora: apenas pensando em um conceito, em vez de perder tempo construindo uma arquitetura errada. Até agora, tenho a ideia de permitir que um usuário crie quantos atributos quiser e, em seguida, atribua quantos atributos quiser a qualquer tipo de entidade. Uma entidade pode ser um jogador, um monstro, um item, qualquer coisa. Agora, ao calcular algo, os dados são disponibilizados ao analisador de regras, para que ele possa fazer coisas como se Player.base_attack + dice (1x6)> Monster.armor_check e Monster.health - 1; A questão aqui é sobre como criar esse analisador.
Edição II:
Aqui está um exemplo de valor bastante básico, mas para calculá-lo corretamente, existem muitas coisas e variáveis diferentes a serem consideradas:
Bônus de Ataque Base (Termo) Seu bônus de ataque base (normalmente chamado de BAB pela comunidade d20) é um bônus de rolagem de ataque derivado da classe e nível do personagem. Os bônus de ataque base aumentam em taxas diferentes para diferentes classes de personagens. Um personagem ganha um segundo ataque por rodada quando seu bônus de ataque básico atingir +6, um terceiro com bônus de ataque básico de +11 ou superior e um quarto com bônus de ataque básico de +16 ou superior. Bônus de ataque base ganhos em diferentes classes, como para um personagem multiclasse, pilha. O bônus de ataque básico de um personagem não concede mais ataques após atingir +16, não pode ser inferior a +0 e não aumenta devido aos níveis de classe após o nível de personagem atingir 20. Um bônus mínimo de ataque básico é necessário para certos feitos.
Você pode lê-lo aqui http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term), incluindo os links para classes e talentos que têm novamente suas próprias regras para calcular os valores necessários para o ataque base.
Comecei a pensar que mantê-lo o mais genérico possível também tornará muito difícil a realização de um bom analisador de regras.
Func
s que inicializa o estado do programa com base nos argumentos como chaves do dicionário. Surpreso por nunca ter encontrado o post de Yegge antes, muito legal, obrigado por apontá-lo.