Implementei uma IA de jogo da velha com UmmLang.
UmmLang é uma linguagem de programação esotérica que oferece apenas variáveis, entrada e saída, condicionais e saltos de linha, mais ou menos,
[ eoeoeom-eoeoeo,,,,,,,, sigeoeoeo keu Dongtan-eo?jun. ] com essa aparência.
Ela quase não tem estruturas de controle comuns, como loops ou funções. Como até inteiros precisam ser representados apenas com pontos (.), vírgulas (,) e espaços, é um ambiente bastante inconveniente para implementar algoritmos comuns.
Primeiro implementei um jogo da velha 2×1 para validar a representação do tabuleiro e a forma de implementar a IA.
Associei cada casa a uma variável, representei casa vazia, X e O como 0, 1 e 2, respectivamente, e listei todos os estados possíveis com instruções Dongtan (IF) para que a IA decidisse onde jogar.
Nesse processo, também criei a interface de saída do tabuleiro e a estrutura de tratamento da entrada do usuário.
Depois expandi isso para um jogo da velha 3×3.
O problema foi que havia cerca de 4.520 estados de jogo legais, tornando praticamente impossível escrever todos os casos manualmente.
Por isso escrevi um gerador de código separado em Python.
O gerador considera todos os estados do jogo, excluindo aqueles em que a quantidade de O é maior que a de X ou em que a partida já terminou, e então calcula a jogada ideal da IA de jogo da velha (baseada em minimax) para cada estado.
Os resultados calculados são convertidos automaticamente para a forma de condicionais Dongtan da UmmLang, gerando o arquivo case.umm.
Por fim, inseri no código-fonte principal os milhares de desvios Dongtan gerados e completei a lógica da IA.
Quando as coordenadas informadas pelo jogador são refletidas nas variáveis do tabuleiro, as condicionais geradas encontram o caso que corresponde ao estado atual do jogo e executam a jogada da IA.
Em seguida, o tabuleiro é exibido novamente, e a sintaxe jun salta de volta para a parte de entrada do usuário, compondo o loop do jogo.
Ou seja, em tempo de execução não há busca nem cálculo: apenas são executadas as condicionais geradas previamente. Assim, embora não seja otimizado, foi possível implementar uma IA de jogo da velha.
Também deixei no GitHub instruções de como jogar diretamente no site Ryugot.
Ainda não há comentários.