O teor deste artigo também é científico. Nenhuma destas definições foi estabelecida por mim: são correctas e estão de acordo com Teoria de Jogos e Ciência da Computação.

Secção 1 : Conway’s Game of Life_

conway

Um estado após uma jogada num jogo da vida de Conway

Definição 1.1: Um jogo chama-se um Jogo de Zero Jogadores se é jogado por zero jogadores sencientes.

Talvez o primeiro jogo que me apercebi que integra esta categoria foi o Conway’s Game of Life. Conhecido certamente por muitos e de relevância científica inquestionável, o jogo da vida foi inspiração (e motivação) para muitos desde a sua publicação em 1970 e teve aplicações em áreas como a matemática, física, biologia, bioquímica, economia e por aí em diante.

Definição 1.2 (informal): Seja A um tabuleiro de dimensão n por m. Para toda a casa do tabuleiro é atribuído um estado pertencente ao conjunto {alive, dead} representadas pelas cores {preto, branco} respectivamente. Define-se como vizinhança de uma casa, as 8 casas mais próximas desta. Dada uma configuração inicial, a jogada seguinte é unicamente determinada pelas seguintes regras:

  • Qualquer casa alive com menos de dois vizinhos alive irá tornar-se dead na próxima jogada;
  • Qualquer casa alive com mais de três vizinhos alive irá tornar-se dead na próxima jogada;
  • Qualquer casa dead com três vizinhos alive irá tornar-se alive na próxima jogada;
  • Todas as outras casas mantêm o seu estado na próxima jogada.
Rules_of_Conway's_game_of_life_-_Glider

Exemplo simples com aplicação de regras do jogo da vida de Conway

A abstracção e espaço para contextos dado este jogo é enorme. Qualquer pessoa estará no seu perfeito direito de justificar os acontecimentos dos primeiros três pontos com, respectivamente, sobpopulação, sobrepopulação e reprodução, porque não há qualquer contexto definido. Tudo vale, portanto.

turing conway

Excerto de reprodução funcional de uma máquina de Turing no Conway’s Game of Life. Sim, este jogo é Turing Completo.

Secção 2 : Introdução à Decidibilidade_

Definição 2.1: Seja um problema para o qual existe um programa de computador que o resolve em tempo finito quando tem solução. Então diz-se que é um problema semi-decidível. Se, além do referido, também existir um programa de computador que o resolve em tempo finito quando tem solução e devolve “não tem solução” quando P não tem solução então diz-se que P é um problema decidível.

Exemplo 2.1: Seja o problema definido por “Qual a melhor decisão para a seguinte imagem, onde o objectivo é tirar o maior dano possível na próxima jogada”:

poke

Cenário possível em Pokémon Crystal.

Assuma que os stats do GRWLTH de Attack e Sp.Attack são iguais. Tome nota que Bite, Ember e Swift são os únicos ataques que dão dano, sendo eles do tipo Dark, Fire e Normal respectivamente. Além disso, que a LEDYBA é do tipo Bug cujas fraquezas são Poison, Fire e Psychic.

Generalizando o problema anterior, conseguimos fazer uma função genérica para resolver todos os casos da melhor forma possível. Vamos assumir que EXISTE um programa que recebe um pokémon e devolve o seu tipo e outro programa que recebe os tipos e calcula as fraquezas. Estes programas existem porque o número de pokémon é finito e os seus tipos também (basta fazer um programa que tenha uma listagem de todos os tipos de todos os Pokémon e os devolva para um pokémon específico que o programa recebe como input – mais detalhes sobre computabilidade de funções finitas no próximo artigo), da mesma forma que existe um quadro para calcular que tipo de ataque é mais efectivo em determinado tipo (por esta tabela).

Programa que recebe:

Lista de ataques do nosso pokémon

Pokémon Adversário

Calcula:

  1. Tipo do pokémon adversário;
  2. Fraquezas do tipo calculado no passo anterior;
  3. Verifica se algum ataque do nosso pokémon que cause dano tem os tipos calculados como fraqueza no passo anterior;
    1. Se algum desses ataques tem esse tipo, usar esse ataque;
    2. Caso contrário, escolher um ao calhas e usar esse ataque.

O programa anterior dá sempre a melhor solução (não dá, mas se tivesse de escrever um que desse a melhor solução teria de ser mais técnico do que estou a ser agora, coisa que eu não quero) e logo, o problema de escolher qual o melhor ataque para dar dano num inimigo é um problema decidível. Aliás, muitos de vocês podem até seguir a mesma receita de forma inconsciente.

Portanto, correr o nosso programa na situação particular do exemplo levaria à seguinte conclusão:

Recebe:

Lista de ataques do nosso pokémon: BITE, ROAR, EMBER, SWIFT

Pokémon Adversário: LEDYBA

Calcula:

  1. Tipo do pokémon adversário: Calculado com o nosso programa para determinar tipos: devolve BUG
  2. Fraquezas do tipo calculado no passo anterior; Calculado com o nosso programa para determinar fraquezas de tipos. Recebe: BUG; devolve POISON, FIRE, PSYCHIC.
  3. Verifica se algum ataque do nosso pokémon que cause dano tem os tipos calculados como fraqueza no passo anterior;
    1. Se algum desses ataques tem esse tipo, usar esse ataque; Guarda verdadeira pois EMBER é do tipo FIRE: devolve EMBER
    2. Caso contrário, escolher um ao calhas e usar esse ataque. código não alcançável para esta situação pois 3.1 verifica-se.

Concluindo, este programa resolve o nosso exemplo.

Pokemon_X-&-Y_01

Pokémon também poderá ser um jogo de zero jogadores?

Secção 3: De volta ao Game of Life_

O que falei na última secção, apesar de ser uma fatia de espessura infinitesimal das loucuras que estudo, é facilmente transportável para o nosso Game of Life. Determinar qual o aspecto da jogada seguinte é, naturalmente, uma tarefa decidível, pois basta correr todas as condições para todas as casas do tabuleiro onde o jogo decorre. É exactamente isso que torna o Game of Life um jogo de zero jogadores. Poderá o mesmo ser aplicado a Pokémon Crystal (ou, na realidade, grande parte dos jogos que temos) pois existe um programa que faz o jogo correr, concluindo que este também se poderá tornar um jogo de zero jogadores. Agora, como calcular esse algoritmo, ou como encontrá-lo de forma eficiente sem interacção humana é uma tarefa não trivial e que terei gosto de entrar em detalhe num artigo futuro.