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_
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.
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.

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 P um problema para o qual existe um programa de computador que o resolve em tempo finito quando P tem solução. Então diz-se que P é um problema semi-decidível. Se, além do referido, também existir um programa de computador que o resolve em tempo finito quando P 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 P 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”:
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:
- Tipo do pokémon adversário;
- Fraquezas do tipo calculado no passo anterior;
- Verifica se algum ataque do nosso pokémon que cause dano tem os tipos calculados como fraqueza no passo anterior;
- Se algum desses ataques tem esse tipo, usar esse ataque;
- 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:
- Tipo do pokémon adversário: Calculado com o nosso programa para determinar tipos: devolve BUG
- Fraquezas do tipo calculado no passo anterior; Calculado com o nosso programa para determinar fraquezas de tipos. Recebe: BUG; devolve POISON, FIRE, PSYCHIC.
- Verifica se algum ataque do nosso pokémon que cause dano tem os tipos calculados como fraqueza no passo anterior;
- Se algum desses ataques tem esse tipo, usar esse ataque; Guarda verdadeira pois EMBER é do tipo FIRE: devolve EMBER
- 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.
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.