Este documento descreve o desenvolvimento de um jogo da velha usando inteligência artificial e a linguagem de programação Processing. O projeto explica as regras e estratégias do jogo da velha, sua implementação usando o algoritmo Minimax, e mostra screenshots do jogo funcionando com um agente artificial capaz de reconhecer situações e tomar decisões estratégicas.
Criação de Jogos 2D com Técnicas 3D Utilizando Python e C
IA Jogo da Velha Processing
1. Instituto Superior Politécnico de Tecnologias e Ciências
ISPTEC
Desenvolvimento do jogo da velha em Inteligência Artificial usando
processing.
Por: Nunes Fernando.
Luanda, 2017
2. 2
Instituto Superior Politécnico de Tecnologias e Ciências
ISPTEC
Desenvolvimento do jogo da velha em Inteligência Artificial usando
processing.
Apresentação do projecto de desenvolvimento
do jogo da velha em inteligência artificial usando
processing como condição para aprovar na
cadeira de inteligência artificial do quarto ano do
curso de Engenharia Informática.
Por: Nunes Fernando.
Luanda,2017
3. 3
Sumário
Índice
Objectivos .................................................................................................. 4
Específicos............................................................................................... 5
Introdução.................................................................................................. 6
Desenvolvimento ....................................................................................... 7
Aspectos Científicos e técnicos do jogo da velha..................................... 7
Aspectos técnicos do jogo da velha....................................................... 13
Resultados................................................................................................ 15
Conclusão................................................................................................. 18
Bibliografia............................................................................................... 19
4. 4
Objectivos
Gerais
Desenvolver um jogo em inteligência artificial usando uma
linguagem de programação e que seja capaz de simular um
“comportamento” que seja considerado inteligente usando uma
linguagem de programação de qualquer paradigma que seja.
5. 5
Específicos
Desenvolver o jogo da velha usando processing.
Desenvolver o jogo da velha que seja capaz de simular inteligência
artificial.
Aplicar inteligência artificial no desenvolvimento do jogo da velha,
simulando um agente capaz de reconhecer perceções com base em
inputs do jogo e seja capaz de agir em função destes.
6. 6
Introdução
O presente trabalho de Inteligência Artificial tem como tema
Desenvolvimento do jogo da velha usando processing.
Ao longo deste projecto vai se desenvolver o conceito geral e histórico da
essência do próprio jogo e partindo da origem do jogo, passando até as
regras de atuação do jogo. Também apresentar-se-á as estratégias do
próprio jogo da velha.
Depois deste trajecto se passará para a implementação destas regras para
a codificação de modo a desenvolver o jogo velha em processing
carregando toda moldagem do processo real para a virtualização do
mesmo.
E por fim culminará o desenvolvimento do projecto com a conclusão
sintetizando tudo o quanto foi feito ao longo do desenvolvimento do
projecto.
7. 7
Desenvolvimento
O jogo da velha (português brasileiro) ou jogo do galo (português de
Portugal) ou Tic Tac Toe como é chamado em países de língua
oficial inglesa é um jogo de raciocínio lógico de regras extremamente
simples, que não possui grandes dificuldades para os seus executantes ou
jogadores e de fácil aprendizagem. Ao longo deste trabalho vai se mostrar
a veracidade do referido acima.
Fig.01: exemplo de facilidade do jogo da velha.
Origem
A origem do jogo da velha é até certo ponto ainda questionável, contudo
muitos estudiosos acreditam fortemente que o jogo teve origem no
Egipto, afirmação esta que é sustentada pelo facto de se encontrar tábuas
ou tabuleiros esculpidos na rocha, que teriam mais de 3.500 anos. Já
outros estudiosos acreditam que o jogo teve origem na europa pelo facto
de se encontrar o desenho do tabuleiro em Warscheueck na Áustria e em
uma caverna Fontainebleu na França. Contudo apoiam a ideia de que o
jogo teve origem no Egipto.
Aspectos Científicos e técnicos do jogo da velha
O jogo da velha embora seja bastante simples de se aprender, apresenta
muitas possibilidades em termos matemáticos, vendo a coisa do ponto de
vista de possibilidades. Por exemplo o jogo da velha é um jogo de 3x3, o
que significa que apresenta 362.880 possibilidades, isto deve-se pelo de
ter 3x3 o que dá 9 e fazendo 9! Dá exactamente o número acima referido.
O que sistematicamente quer dizer que existem 255.168 combinações
8. 8
vencedoras no jogo se assumirmos que “X” é o vencedor. Tecnicamente
tem as seguintes relações:
131.184 Jogos finalizados são ganhos por 'X'
1.440 São ganhos por 'X' após 5 movimentos
47.952 São ganhos por 'X' após 7 movimentos
81.792 São ganhos por 'X' após 9 movimentos
77.904 Jogos finalizados são ganhos por 'O'
5.328 São ganhos por 'O' após 6 movimentos
72.576 São ganhos por 'O' após 8 movimentos
46.080 Jogos finalizados resultam em empate
Se ignorarmos as jogadas assimétricas teremos:
91 Resultados únicos são ganhos por 'X'
21 São ganhos por 'X' após 5 movimentos
58 São ganhos por 'X' após 7 movimentos
12 São ganhos por 'X' após 9 movimentos
44 Resultados únicos são ganhos por 'O'
21 São ganhos por 'O' após 6 movimentos
23 São ganhos por 'O' após 8 movimentos
Regras de jogabilidades
O jogo da velha é jogado em turnos alternados entre dois jogadores, o
jogador humano e o jogador artificial (o computador). O jogo passa-se
num tabuleiro de 3x3 posições nas quais os jogadores fazem suas marcas
em uma das posições durante as rodadas, O jogador que inicia a partida
utiliza o símbolo “X”, enquanto o segundo jogador utiliza o símbolo “O
Cada jogador é livre para colocar uma marca em qualquer posição no seu
turno, desde que a posição esteja vazia (sem marcas). Ao colocar uma
marca no tabuleiro, a jogada passa para o próximo jogador, aonde o
processo é repetido até que um dos jogadores vença, ou até o tabuleiro
ser completamente preenchido, situação na qual ocorre empate.
A vitória ocorre quando um jogador consegue colocar três símbolos em
sequência, seja em linha, coluna ou na diagonal principal do tabuleiro. O
9. 9
objetivo dos jogadores, então, é colocar três marcas numa das
configurações válidas, enquanto evitam que o seu oponente consiga fazer
as três marcas antes dele.
Fig02: Exemplo de Victória no jogo da velha
Assim, os critérios de avaliação final de uma partida para o jogador
humano são as seguintes:
• Vitória: o jogador humano consegue colocar as três marcas numa das
configurações válidas do jogo.
• Empate: o tabuleiro é completamente preenchido e nem o jogador
humano, nem o oponente artificial, conseguem colocar as três marcas
numa das configurações válidas.
• Derrota: o oponente artificial consegue colocar as três marcas numa das
configurações válidas.
Estratégias
O jogo da velha é de raciocínio lógico, matemático e estratégico. Serve
para trabalhar a coordenação motora, Senso de lógica, Senso direcional,
Planejamento, etc.
A partida será disputada entre o jogador humano contra programas ou
agente inteligentes desenvolvidos por outro jogador ou fornecidos pela
10. 10
própria empresa desenvolvedora do game. Mas o que seria agentes
inteligentes.
O jogo da velha pode ser dividido e tratado em agente e ambiente. O
agente seria o jogador, que percebe o seu ambiente por meio de sensores
(os parâmetros) e age sobre o ambiente por intermédio de atuadores, isto
é, o valor retornado com as coordenadas da jogada.
Ambiente do jogo da velha
Completamente observável
Os agentes têm acesso ao estado completo do ambiente. Os
sensores detectam todos os Aspectos que são relevantes para a
escolha da ação. A cada jogada o jogador recebe a matriz do
tabuleiro atualizada.
Estratégico
O próximo estado do ambiente é completamente determinado pelo
estado atual e pela ação executada pelos agentes.
Sequencial
A decisão afeta todas as ações futuras. Ações em curto prazo
podem ter consequências em longo prazo. O jogador faz uma
jogada, o próximo jogador pode dar continuidade a sua jogada
anterior como também se defender ou iniciar uma nova jogada.
Estático
O ambiente não se altera enquanto o agente está decidindo sobre a
realização de uma ação, nem precisa se preocupar com a passagem
do tempo.
11. 11
Discreto
O ambiente tem um número finito de estados distintos, também
tem um número discreto de perceções e ações.
Multiagente
O agente está em um ambiente de dois agentes, o jogo precisa de
dois jogadores pra disputar a partida.
Existem 2 tipos de agentes inteligentes para o jogo da velha: o agente que
faz a melhor jogada analisando a situação atual, o que significa que para
sua próxima jogada o seu movimento atual vai ser realmente útil; e o
agente que planeja as suas jogadas, este que age com estratégia. O agente
que faz a melhor jogada olha para o tabuleiro e se pergunta: "O que pode
me fazer ganhar ou perder?”. Já o agente estratégico pode fazer jogadas
que aparentemente não tem sentido, mas que futuramente vão decidir a
partida.
Implementação
A implementação do jogo da velha mostra claramente, como as técnicas
de inteligência artificial são úteis. Essa implementação pode ser feita
diversas formas com níveis de abstração diferentes.
Cada melhora no desempenho do jogo, implica primeiramente na escolha
das estruturas mais adequadas para representar o problema e na
consequente utilização de técnicas de IA.
A cada melhora no algoritmo, percebe-se que este cresce em
complexidade, uso de generalizações, clareza de conhecimento e
extensibilidade da abordagem.
A utilização de outras técnicas de IA, mais potentes, resulta em jogos com
melhor desempenho tais como jogos de estratégia, onde a máquina
12. 12
praticamente melhora suas estratégias conforme vai "aprendendo" com o
desafiante.
Minimax lida com jogos como jogo da velha, no qual cada jogador pode
ganhar, perder ou empatar. No nosso exemplo específico que é o jogo da
Velha, você pode considerar que após a sua jogada, o adversário vai
escolher a melhor jogada possível e então você a partir dessa melhor
jogada já pensa na melhor que você pode fazer e assim sucessivamente.
Por exemplo, vamos chamar um jogador de MIN e outro de MAX (daí veio
nome: MINIMAX). O jogador MAX sempre considera que MIN vai escolher
a jogada que o deixa na pior situação (pior caso para MAX) e que ele (o
MAX) vai escolher a melhor jogada para si. O algoritmo minimax ajuda a
encontrar a melhor jogada ao caminhar pelas opções válidas a partir do
fim do jogo. A cada passo assume-se que o jogador MAX está tentando
maximizar as chances de MAX ganhar, enquanto na próxima rodada o
jogador MIN está tentando minimizar as chances de isso acontecer (ao
maximizar as chances de que ele próprio ganhe).
Resumindo, o jogador usando o algoritmo miniMax constrói uma árvore
de jogadas achando que ambos (ele mesmo e o adversário) sempre
escolherão soluções ótimas para si mesmos. Veja um exemplo de uma
possível parte de uma árvore de jogo da velha. Atente apenas para o
detalhe que nessa árvore temos a impressão que começou no MIN,
quando na verdade começa no MAX. Eu escolhi essa parte do meio da
árvore.
13. 13
Árvore de busca de uma partida de Jogo da velha
Os números que você vê ao fundo representam o VALOR MINIMAX(n).
Esse valor é apenas um “indicativo” de utilidade para o jogador MAX, ou
seja, quanto MAIOR O VALOR da jogada do jogador MIN, melhor para o
MAX e quanto MENOR O VALOR da jogada do jogador MAX, melhor para o
MIN. No caso acima os números indicam as chances de se ganhar com a
jogada correspondente. Caso você faça a jogada no centro do tabuleiro, o
computador irá, com certeza, fazer a jogada no canto superior esquerdo.
Repare que o MIN escolhe o mínimo valor e o MAX escolhe o máximo
valor.
É a sua vez de jogar, o que você escolheria? Fazer um movimento de
defesa impedindo que oponente vença na próxima jogada, iniciar um nova
estratégia, continuar com a sua estratégia de jogadas anteriores ou fazer o
movimento para a vitória? Separe os tipos de jogadas e estabeleça
prioridades. É preferível vencer que impedir que o adversário vença na
próxima jogada.
Aspectos técnicos do jogo da velha
Como já foi dito deste o princípio da apresentação do projecto, o presente
projecto foi desenvolvido usando a língua processing, contudo existem
Aspectos técnicos que foram levados em conta.
O ogo foi desenvolvido usando processing versão 3.3.4, sendo uma
linguagem orientada a objectos apresenta a seguir alguns estratos do
código.
15. 15
Resultados
Aspecto visual
O jogo da velha foi desenvolvido na versão desktop, e tem a
seguinte aparência:
Fig03: tela inicial do jogo.
Fig04: exemplo de execução do jogo.
18. 18
Conclusão
O projecto apresentado, mostra as etapas seguidas para o
desenvolvimento do jogo da velha ou pelo menos mostra a lógica usada
para o desenvolvimento do mesmo. O desenvolvimento deste jogo atingiu
quase todos os resultados esperados, embora não se consiga cobrir todos
os detalhes exigidos no desenvolvimento do jogo de modo que falta por
implementar a componente interatividade, homem-máquina. Contudo a
implementação do projecto seguiu a rigor os demais componentes
requeridos para o caso. Espera-se que evolui nas próximas versões e se
complemente os Aspectos que não foram implementadas nesta versão.
19. 19
Bibliografia
1. Zaslavsky, Cláudia (1982). Tic Tac Toe: And Other Three-In-A Row
Games from Ancient Egypt to the Modern Computer.
2. Kevin Crowley, Robert S. Siegler (1993). «Flexible Strategy Use in
Young Children's Tic-Tat-Toe». Cognitive Science.
3. Portal do professor: http://portaldoprofessor.mec.gov.br
4. KNAUT, Michelle Souza Julio. Ludicidade e prática pedagógica.
Curitiba: Editora Opet, 2012.
5. PIAGET, J. A formação do símbolo na criança: imitação, jogo e
sonho, imagem e representação. 4. Ed. Rio de Janeiro: LTC, 2010.
6. Cortella, Mario Sergio. A escola e o conhecimento: fundamentos
epistemológicos e políticos. 4. Ed. São Paulo: Cortez: Instituto Paulo
Freire, 2001.
7. Falkembach, Gilse. A.Morgental. O Lúdico e os Jogos Educacionais.
In: CINTED - Centro Interdisciplinar de Novas Tecnologias na
Educação, UFRGS. Disponível em: Acesso 14 de junho, 2015.
8. Oliveira, Núcia Alexandra Silva. “Novas” e “Diferentes” Linguagens e
o Ensino de História: construindo significados para a formação de
professores. In: Revista EntreVer, Florianópolis, Jan./Jun. 2012.
9. Secretaria de Educação Fundamental. Parâmetros curriculares
nacionais: história. Brasília: MEC/SEF, 1998.
10. Processing em Https://processing.org/download