SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Inteligência Artificial:
       Relatório Final do Trabalho Prático




            Patrício Ferreira: [ ee06038@fe.up.pt]



     Faculdade de Engenharia da Universidade do Porto
Departamento de Engenharia Electrotécnica e de Computadores
      Rua Roberto Frias, s/n, 4200-465 Porto, Portugal
                      6 Junho 2010
Resumo
Trabalho realizado no âmbito de cadeira de inteligência artificial, visa implementação de um
jogo de tabuleiro Hexxagon, em Prolog, com interface gráfica em java. Vai permitir três
formas de jogo:
      Humano vs Humano
      Humano vs Computador
      Computador vs Computador




Objectivos

O trabalho tem como objectivo, dotar-nos de capacidade de programação em lógica e de
resoluções de problemas lógicos, e da aplicação da inteligência para fazer dotar o computador
de capacidades parecidas com as dos homens - o que faz o homem parecer inteligente.
Neste trabalho, foi implementado um jogo onde considerou-se três modos, sempre com dois
jogadores cada partida, que podem ser: humano contra humano, humano contra computador
ou computador contra computador.
O jogo em si é simples, tendo poucas limitações e regras, contudo a sua implementação
apresentou algum grau de dificuldade.
Primeiramente faram desenvolvidos as funções mais básicas como, as regras do movimento
das peças, as de visualização do tabuleiro, depois foi desenvolvida e aperfeiçoada os
principais módulos de inteligência.
O algoritmo minimax foi o principal módulo de inteligência para o jogo.




Hexxagon                                                                            Página 2
Descrição do Problema
Este jogo de estratégia criado pela companhia Argo Games e publicado em 1993, é jogado
num tabuleiro hexagonal com 61 hexágonos onde 58 dessas são onde os jogadores podem
mover-se. Inicialmente cada jogador começa com 3 peças.
 Sendo assim, para desenvolver este jogo em Prolog, é considerado um tabuleiro do jogo
como sendo um tabuleiro com 81 casas (nove casas por nove casas) onde 58 dessas casas
pode-se mover as peças. Onde as restantes só são utilizadas para facilitar a representação
matricial do tabuleiro.
Serão representados da seguinte forma:

Y X      0     1     2     3     4      5    6     7     8

    0

    1

    2

    3

    4

    5

    6

    7

    8


A tabela acima mostra como estará disposto o tabuleiro, onde as células amarelas são onde
pode-se mover as peças, as células brancas não fazem parte do espaço de movimento das
peças, e as células vermelhas e azuis são as posições iniciais das peças dos dois jogadores.
O jogo é para dois jogadores, sendo esses jogadores representados por utilizadores humanos,
ou pelo próprio computador.
O jogo pode começar desde que as peças estejam dispostas da seguinte forma mostrada na
figura abaixo.



Hexxagon                                                                           Página 3
Fig. 1 Estado inicial do jogo.




Regras do jogo

O jogo desenrola-se em jogadas intercaladas pelos jogadores. Cada jogador na sua vez salta
uma peça que lhe pertença (da sua cor) para qualquer célula que esteja no máximo a distância
de duas células da origem com o intuito de se aproximar das peças do adversário, ficando a
distância de uma célula, quando isso acontecer a peça do adversário será sua e
consequentemente a cor da peça para a cor da sua peça.
O objectivo é terminar o jogo (quando ficar todo preenchido) com o maior número de peças.
O jogador não pode saltar para uma célula ocupada se não for possível fazer vizinhança com
as peças do adversário o jogador pode ainda saltar uma só casa e assim a peça duplica ficando
um na célula de origem e outra na célula de destino.




Hexxagon                                                                            Página 4
Inicio do jogo
      O tabuleiro é inicializado com 6 peças, sendo 3 peças para cada jogador. As peças são
       distinguidas por cores.
      O jogador que começa a jogada numa partida é escolhido aleatoriamente.


Objectivo do jogo
      O objectivo final do jogo é ter no final, mais peças que o adversário.


Movimento das peças
      No jogo pode-se saltar para qualquer célula, desde que esta esteja a menos de duas
       casas e esteja vazia.

      Sempre que salta para uma célula e na vizinhança contenha peças do adversário estas
       transformam em peças do jogador.


      O jogador pode mover as peças em todas as direcções, no tabuleiro.

      Pode ainda fazer duplicar uma peça se esta saltar uma só casa.




Vencedor da partida
      Ganha a partida o jogador que tiver mais peças no tabuleiro.




Hexxagon                                                                            Página 5
Implementação do Jogo
A implementação do jogo pode ser entendida em quatro etapas descritas em baixo. Desde a
construção do tabuleiro e a sua inicialização, à manipulação do mesmo, construção das
jogadas estratégias adoptadas para a implementação da parte de inteligência artificial.

      Inicialização do Tabuleiro
       Foi construída um tabuleiro de 9x9 com 58 campos onde as células adicionais, são
       auxiliares. Em que cada jogador é-lhe atribuído 6 peças. Existe dois tipos de tabuleiro.
       No inicio de cada partida o tipo de tabuleiro tal como o jogador que joga primeiro e
       escolhida de forma aleatória pelo programa.
       Em baixo segue-se a descrição dos principais predicados e exemplos de inicialização
       do tabuleiro:
       Predicados:
           o table(T,N) – permite seleccionar uma dos tipos de tabuleiros existentes.
           o Print_table(T) – imprime estado do tabuleiro T, em forma hexagonal.




Fig 1: Visualização do tabuleiro

Hexxagon                                                                              Página 6
   Manipulação do Tabuleiro
      Foram criados predicados para manipular as peças na tabela. Tabela que é
      representado por uma lista de listas, em Prolog.
      Na base de factos contem as possíveis direcções de movimento das peças, que facilita
      o movimento no tabuleiro. Para facilitar o movimento, a contagem dos pontos e
      jogadas válidas, foram criadas predicados que contabiliza o número de vizinhos,e os
      vizinhos dos vizinhos.
      Predicados:
      dir((X,Y),D):- devolve a direção unitária contida em D ex: dir((0,-1),n), na
      direção norte(n), anda zero para direita e 1 para cima.
      neighbours(P,X,Y,Table,Neig) – Dado um determinado jogador (P) as
      coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada em Neig um
      vizinho(à uma célula de distancia).
             neighbours_list(P,X,Y,Table,Neigs)- Dado um determinado
      jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada em
      Neigs todos os vizinhos(à uma célula de distancia).



   Construção de Jogadas
      Foram criadas um conjunto de predicados capazes de ler as coordenadas das peças no
      tabuleiro, avaliar jogadas possíveis e efectuar jogadas com as melhores peças.
      Predicados:
           o valid_mov(Xi,Yi,Xf,Yf,T,P):- Verifica se um direcção é válida,
             isto é, se é possivel fazer a jogada de dadas coordenadas sem violar as regras
             de movimento.
           o possible_jumps(X,Y,Table,Jumps) - Dado um determinado
             jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é
             retornada o conjunto de coordenadas (Jumps) onde é possivel mover.
           o play(X,Y,T,P,Xf,Yf,TF):- verifica se uma jogada é valida, sendo
             valida realiza a jogada, onde T é o estado corrente, e TF é o estado do tabuleiro
             depois da jogada.
           o change(Table,X,Y,P,TF):- modifica os vizinhos com coordenadas
             X,Y como peças do jogador P.


Hexxagon                                                                             Página 7
 Módulo de Inteligência
     Para os tipos de jogo Computador Vs Computador e Humano Vs Computador foram
     criados predicados com o objectivo de fazer jogadas mais inteligentes. Decisões que
     são tomadas de acordo com o numero de pontos que são feitas pelo jogador e pelo
     adversário.


           o Minimax
     Para resolver o problema das decisões criou-se predicados que usam o algoritmo
     Minimax. Onde as possíveis decisões do jogador e do adversário são organizadas e
     dispostas numa arvore por ordem de profundidade, onde tentará maximizar os pontos
     das jogadas do jogador (computador) e minimizar os pontos da jogada do adversário.
     A figura abaixo mostra como serão dispostas na árvore, onde os valores numéricos são
     os pontos das respectivas jogadas.




     Fig 2: Disposição das possíveis jogadas do Jogador e do adversário.

     Os pontos são contabilizados de acordo com a quantidade de peças de cada jogador.
     Predicados:
                o minimax(EST,Jog,Prof,Valor,Jogada):-                Predicado
                  principal do jogo, que dado um estado actual e precisão da
                  decisão(profundidade), ela escolhe a melhor jogada.
                o max_value(ESTS,Jog,Prof,VT,JT,Valor,Jogada):-
                  predicado usado pelo minimax, que dado um conjunto de estados ela
                  escolhe a melhor, ou seja a jogada com maior valor.




Hexxagon                                                                        Página 8
o min_value([E|L],Jog,Prof,VT,JT,Valor,Jogada):-
                   similar ao max_value, mas escolhe o menor valor.
                 o choose_max(V1,J1,V2,J2,VB,JB):- dado duas jogadas ela
                   retorna a melhor(com maior valor) em JB.
                 o choose_min(V1,J1,V2,J2,VB,JB):- dado duas jogadas ela
                   retorna a melhor(com menor valor) em JB.
                 o evaluate(EST,P,V):- é a função de avaliação da arvore
                   minimax, quando esta atinge a profundidade desejada.
                 o one_move(T,P,X,Y):- dado o estado do tabuleiro ela retorna um
                   movimento possível da peça P.


O módulo de inteligência foi testado de duas formas, primeiro colocando modo Computador
Vs Computador com o mesmo nível de inteligência, e depois um com nível de inteligência
mais baixo ou que joga aleatoriamente.




Hexxagon                                                                      Página 9
Análise de Resultados
O jogo foi testado e todos os requisitos foram satisfeitos, excepto a interface gráfica.
Para cada modo de jogo fizeram-se os seguintes testes.
              Humano Vs Humano
               Para testar o este modo, põe-se dois adversários quaisquer a jogar.
               Em baixo mostra-se figuras da execução do modo Humano Vs Humano




                       Fig 3:Inicio Jogo Humano Vs Humano




Hexxagon                                                                               Página 10
Fig 4: Fim do jogo Humano Vs Humano.



              Humano Vs Computador
               Para testar este modo primeiro testou-se o algoritmo minimax escolhendo
               coordenadas aleatórias, e tabelas aleatórias, só depois foi testado no jogo.
               É notável que em diferentes níveis de dificuldade (profundidade), a dificuldade
               das jogadas é diferente.
               Em baixo é mostrado imagens do modo.




Hexxagon                                                                           Página 11
Fig 5: Inicio de jogo Humano Vs Computador




Hexxagon                                                Página 12
Fig 6: Fim de jogo Humano Vs Computador



              Computador Vs Computador
               O modo computador Vs Computador foi testado de duas formas:
               Primeiro os dois jogadores têm o mesmo nível de inteligência, onde as vezes
               ganha umas as vezes ganha outro, dado tem o mesmo conhecimento.
               A segunda os dois jogadores tem inteligência diferente, onde um joga
               aleatoriamente (sem inteligência) e o outro joga prevendo as melhores jogadas,
               Como consequência, o segundo sempre ganha o jogo.
               Em baixo são mostrados imagens deste modo.




Hexxagon                                                                          Página 13
Fig 7: Fim de Jogo Computador Vs Computador



              Ambiente de desenvolvimento
               O jogo foi feito totalmente em linguagem Prolog, onde foi utilizadas as
               ferramentas de edição de texto do Swi-Prolog . Os compiladores utilizados
               foram os da Sicstus Prolog e da Swi-Prolog. O programa também corre em
               ambiente da Swi-Prolog e da Sicstus. O Jogo pode correr tanto em Microsoft
               Windows SO como em Linux SO.




Hexxagon                                                                         Página 14
Conclusões
No trabalho feito, foram implementadas os seguintes requisitos:
Jogo Humano Vs Humano
Jogo Humano Vs Computador
Jogo Computador Vs Computador com diferentes níveis de conhecimento.
No módulo de inteligência utilizou-se o algoritmo Minimax para prever as melhores jogadas,
algoritmo que apresenta algumas desvantagens:
Utiliza muitos estados para prever as melhores jogadas, o que o torna pouco eficiente.
Existem estados que poderiam ser descartados mas são avaliados. Uma alternativa a isso é a
utilização do Minimax cortes alfa-beta, que descarta essas possibilidades, tornando o minimax
mais eficiente.
Uma vantagem do minimax em relação a outros algoritmos de pesquisa, é a facilidade na
programação do mesmo.
A realização da interface gráfica e melhoramento do algoritmo Minimax são perspectivas,
caso tivesse mais tempo.




Referências Bibliográficas

http://kidrocket.org/game_hexxagon.php
http://paginas.fe.up.pt/~eol/IA/0910/TRABALHOS/pesqadv_hexxagon.html
http://www.mobygames.com/game/dos/hexxagon
http://www.springfrog.com/games/hexxagon/
http://www.mellekoning.nl/files/hexxagon/hexxagon.php
Software:
Sicstus Prolog
Swi-Prolog Editor


Hexxagon                                                                            Página 15
Anexos

Manual do Utilizador
O programa corre nas consolas Prolog da Sicstus e da Swi-Prolog.
Em seguida são mostrados os passos desde a compilação até a execução do jogo.
              Compilação
               Para compilar basta numa das consolas consultar o ficheiro do jogo
               Hexxagon.pl da seguinte forma.




               Fig 8: Compilar o ficheiro



               Ou na consola escrever “consult („Caminho para o ficheiro‟).




               Fig 9: Compilar o ficheiro


Hexxagon                                                                        Página 16
   Correr o Jogo
               Para correr basta na consola escrever “hexxagon.” ou “begin.”
               Aparecerá o menu na imagem abaixo onde poderá escolher uma das 5 opções.
                  1. Computador Vs Computador
                  2. Computador mais Inteligente Vs Computador menos inteligente
                  3. Humano Vs Humano
                  4. Humano Vs Computador
                  5. Sair
                      As escolhas são feitas com os números do teclado de 1 à 5




     Fig 10: Inicio do Jogo escolha do modo

               Caso escolhe a opção 1 ou seja Computador Vs Computador os estados são
               alternados pressionando na tecla ENTER. Na consola é pré-visualizada o
               tabuleiro as coordenadas das jogadas dos dois jogadores, e a respectiva
               pontuação.
               Em baixo é apresentado a ilustração do descrito acima.




Hexxagon                                                                          Página 17
Fig 11: Representação da Jogada

           Para o modo Computador inteligente Vs Computador menos Inteligente é
           similar ao descrito acima.
           Já no caso do Humano Vs Humano (opção 3) é um pouco diferente, pois pede
           as coordenadas de origem e de destino das jogadas.
           Sendo a apresentação do tabuleiro e das pontuações são feitas da mesma forma
           em todos os modos.
           No modo Humano Vs Computador, quando joga o computador, a jogada é feita
           automática, a na vez do humano é pedido as coordenadas.




Hexxagon                                                                     Página 18
Fig 12: Inserção das coordenadas no Modo Humano Vs Computador



           O jogo termina quando todos os campos tiverem preenchidos ou quando já não
           houver mais peças de um dos jogadores, e é mostrado o vencedor.




           Fig 13: Fim de jogada.




Hexxagon                                                                   Página 19
Exemplo de Execução
            Computador Vs Computador
             Inicio do jogo.




  Fig 14: Inicio do Jogo, Escolha de opção de jogo.




Hexxagon                                              Página 20
Fig 15: Primeira Jogada




Hexxagon                       Página 21
Fig 16: Segunda Jogada




Hexxagon                 Página 22
Fig 17: Jogada de 0-8 para 1-7




Hexxagon                              Página 23
Fig 18: Computador 1 17 pontos, Computador 2 18 pontos




Hexxagon                                                      Página 24
Fig 19: Joga Computador 1




Hexxagon                         Página 25
Fig 20: Penultima Jogada




Hexxagon                        Página 26
Fig 21: Ultima Jogada, Ganha o computador 2




Hexxagon                                           Página 27

Mais conteúdo relacionado

Mais procurados

Ubiquitous Language - Portugues
Ubiquitous Language - PortuguesUbiquitous Language - Portugues
Ubiquitous Language - PortuguesAlline Oliveira
 
Workshop kodu
Workshop kodu Workshop kodu
Workshop kodu ejml
 
Atari breakout o jogo de steve jobs que fez história
Atari breakout o jogo de steve jobs que fez históriaAtari breakout o jogo de steve jobs que fez história
Atari breakout o jogo de steve jobs que fez históriaSeuGame
 

Mais procurados (6)

Ubiquitous Language - Portugues
Ubiquitous Language - PortuguesUbiquitous Language - Portugues
Ubiquitous Language - Portugues
 
Workshop kodu
Workshop kodu Workshop kodu
Workshop kodu
 
Inteligência Artificial em Jogos
Inteligência Artificial em JogosInteligência Artificial em Jogos
Inteligência Artificial em Jogos
 
Python
PythonPython
Python
 
Atari breakout o jogo de steve jobs que fez história
Atari breakout o jogo de steve jobs que fez históriaAtari breakout o jogo de steve jobs que fez história
Atari breakout o jogo de steve jobs que fez história
 
Game programming
Game programmingGame programming
Game programming
 

Destaque

Ativ1 4 patricia
Ativ1 4 patriciaAtiv1 4 patricia
Ativ1 4 patriciapaticaic
 
frog decora catalogo
frog decora catalogofrog decora catalogo
frog decora catalogofrogdecora
 
Encuesta Feebbo - Obesidad (México 2013)
Encuesta Feebbo - Obesidad (México 2013)Encuesta Feebbo - Obesidad (México 2013)
Encuesta Feebbo - Obesidad (México 2013)Feebbo México
 
Are Capital Controls Effective in Preventing Financial CrisesA
Are Capital Controls Effective in Preventing Financial CrisesAAre Capital Controls Effective in Preventing Financial CrisesA
Are Capital Controls Effective in Preventing Financial CrisesALing Huang
 
2012 Portfolio Pg 10 Jeddah
2012 Portfolio Pg 10 Jeddah2012 Portfolio Pg 10 Jeddah
2012 Portfolio Pg 10 Jeddahnatecmartin
 
Felices fiestas julio 2013
Felices fiestas julio 2013Felices fiestas julio 2013
Felices fiestas julio 2013Maki Rimaq
 
Seminario de investigación i aída villalobos
Seminario de investigación i aída villalobosSeminario de investigación i aída villalobos
Seminario de investigación i aída villalobosPrograma De Economia
 

Destaque (10)

Ativ1 4 patricia
Ativ1 4 patriciaAtiv1 4 patricia
Ativ1 4 patricia
 
frog decora catalogo
frog decora catalogofrog decora catalogo
frog decora catalogo
 
Encuesta Feebbo - Obesidad (México 2013)
Encuesta Feebbo - Obesidad (México 2013)Encuesta Feebbo - Obesidad (México 2013)
Encuesta Feebbo - Obesidad (México 2013)
 
Radiante dae app
Radiante dae appRadiante dae app
Radiante dae app
 
Are Capital Controls Effective in Preventing Financial CrisesA
Are Capital Controls Effective in Preventing Financial CrisesAAre Capital Controls Effective in Preventing Financial CrisesA
Are Capital Controls Effective in Preventing Financial CrisesA
 
2003links
2003links2003links
2003links
 
2012 Portfolio Pg 10 Jeddah
2012 Portfolio Pg 10 Jeddah2012 Portfolio Pg 10 Jeddah
2012 Portfolio Pg 10 Jeddah
 
Felices fiestas julio 2013
Felices fiestas julio 2013Felices fiestas julio 2013
Felices fiestas julio 2013
 
Revoluções inglesas
Revoluções inglesasRevoluções inglesas
Revoluções inglesas
 
Seminario de investigación i aída villalobos
Seminario de investigación i aída villalobosSeminario de investigación i aída villalobos
Seminario de investigación i aída villalobos
 

Semelhante a Hexxagon Game (17)

Projeto jogo da-velha
Projeto jogo da-velhaProjeto jogo da-velha
Projeto jogo da-velha
 
Relatorio othello
Relatorio othelloRelatorio othello
Relatorio othello
 
Perfil das Equações do 2º Grau
Perfil das Equações do 2º GrauPerfil das Equações do 2º Grau
Perfil das Equações do 2º Grau
 
Poker Master5
Poker Master5Poker Master5
Poker Master5
 
Curso De Jogos EF.pdf
Curso De Jogos EF.pdfCurso De Jogos EF.pdf
Curso De Jogos EF.pdf
 
Lab3 completo
Lab3 completoLab3 completo
Lab3 completo
 
Jogo da tabela instruções pdf
Jogo da tabela instruções pdfJogo da tabela instruções pdf
Jogo da tabela instruções pdf
 
PJ20222 500 050 Descrevendo Jogos.pdf
PJ20222 500 050 Descrevendo Jogos.pdfPJ20222 500 050 Descrevendo Jogos.pdf
PJ20222 500 050 Descrevendo Jogos.pdf
 
Tutorial edilim
Tutorial edilimTutorial edilim
Tutorial edilim
 
Apresentação Hex
Apresentação HexApresentação Hex
Apresentação Hex
 
JOGO DO NIM
JOGO DO NIMJOGO DO NIM
JOGO DO NIM
 
Representação dos Números Inteiros
Representação dos Números InteirosRepresentação dos Números Inteiros
Representação dos Números Inteiros
 
Xadrez
XadrezXadrez
Xadrez
 
PNAIC - Jogo cubra a diferença
PNAIC - Jogo cubra a diferençaPNAIC - Jogo cubra a diferença
PNAIC - Jogo cubra a diferença
 
91249327 regras-domino-belga
91249327 regras-domino-belga91249327 regras-domino-belga
91249327 regras-domino-belga
 
Aem
AemAem
Aem
 
Desenvolvendo Jogos com pygame.
Desenvolvendo Jogos com pygame.Desenvolvendo Jogos com pygame.
Desenvolvendo Jogos com pygame.
 

Hexxagon Game

  • 1. Inteligência Artificial: Relatório Final do Trabalho Prático Patrício Ferreira: [ ee06038@fe.up.pt] Faculdade de Engenharia da Universidade do Porto Departamento de Engenharia Electrotécnica e de Computadores Rua Roberto Frias, s/n, 4200-465 Porto, Portugal 6 Junho 2010
  • 2. Resumo Trabalho realizado no âmbito de cadeira de inteligência artificial, visa implementação de um jogo de tabuleiro Hexxagon, em Prolog, com interface gráfica em java. Vai permitir três formas de jogo:  Humano vs Humano  Humano vs Computador  Computador vs Computador Objectivos O trabalho tem como objectivo, dotar-nos de capacidade de programação em lógica e de resoluções de problemas lógicos, e da aplicação da inteligência para fazer dotar o computador de capacidades parecidas com as dos homens - o que faz o homem parecer inteligente. Neste trabalho, foi implementado um jogo onde considerou-se três modos, sempre com dois jogadores cada partida, que podem ser: humano contra humano, humano contra computador ou computador contra computador. O jogo em si é simples, tendo poucas limitações e regras, contudo a sua implementação apresentou algum grau de dificuldade. Primeiramente faram desenvolvidos as funções mais básicas como, as regras do movimento das peças, as de visualização do tabuleiro, depois foi desenvolvida e aperfeiçoada os principais módulos de inteligência. O algoritmo minimax foi o principal módulo de inteligência para o jogo. Hexxagon Página 2
  • 3. Descrição do Problema Este jogo de estratégia criado pela companhia Argo Games e publicado em 1993, é jogado num tabuleiro hexagonal com 61 hexágonos onde 58 dessas são onde os jogadores podem mover-se. Inicialmente cada jogador começa com 3 peças. Sendo assim, para desenvolver este jogo em Prolog, é considerado um tabuleiro do jogo como sendo um tabuleiro com 81 casas (nove casas por nove casas) onde 58 dessas casas pode-se mover as peças. Onde as restantes só são utilizadas para facilitar a representação matricial do tabuleiro. Serão representados da seguinte forma: Y X 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 A tabela acima mostra como estará disposto o tabuleiro, onde as células amarelas são onde pode-se mover as peças, as células brancas não fazem parte do espaço de movimento das peças, e as células vermelhas e azuis são as posições iniciais das peças dos dois jogadores. O jogo é para dois jogadores, sendo esses jogadores representados por utilizadores humanos, ou pelo próprio computador. O jogo pode começar desde que as peças estejam dispostas da seguinte forma mostrada na figura abaixo. Hexxagon Página 3
  • 4. Fig. 1 Estado inicial do jogo. Regras do jogo O jogo desenrola-se em jogadas intercaladas pelos jogadores. Cada jogador na sua vez salta uma peça que lhe pertença (da sua cor) para qualquer célula que esteja no máximo a distância de duas células da origem com o intuito de se aproximar das peças do adversário, ficando a distância de uma célula, quando isso acontecer a peça do adversário será sua e consequentemente a cor da peça para a cor da sua peça. O objectivo é terminar o jogo (quando ficar todo preenchido) com o maior número de peças. O jogador não pode saltar para uma célula ocupada se não for possível fazer vizinhança com as peças do adversário o jogador pode ainda saltar uma só casa e assim a peça duplica ficando um na célula de origem e outra na célula de destino. Hexxagon Página 4
  • 5. Inicio do jogo  O tabuleiro é inicializado com 6 peças, sendo 3 peças para cada jogador. As peças são distinguidas por cores.  O jogador que começa a jogada numa partida é escolhido aleatoriamente. Objectivo do jogo  O objectivo final do jogo é ter no final, mais peças que o adversário. Movimento das peças  No jogo pode-se saltar para qualquer célula, desde que esta esteja a menos de duas casas e esteja vazia.  Sempre que salta para uma célula e na vizinhança contenha peças do adversário estas transformam em peças do jogador.  O jogador pode mover as peças em todas as direcções, no tabuleiro.  Pode ainda fazer duplicar uma peça se esta saltar uma só casa. Vencedor da partida  Ganha a partida o jogador que tiver mais peças no tabuleiro. Hexxagon Página 5
  • 6. Implementação do Jogo A implementação do jogo pode ser entendida em quatro etapas descritas em baixo. Desde a construção do tabuleiro e a sua inicialização, à manipulação do mesmo, construção das jogadas estratégias adoptadas para a implementação da parte de inteligência artificial.  Inicialização do Tabuleiro Foi construída um tabuleiro de 9x9 com 58 campos onde as células adicionais, são auxiliares. Em que cada jogador é-lhe atribuído 6 peças. Existe dois tipos de tabuleiro. No inicio de cada partida o tipo de tabuleiro tal como o jogador que joga primeiro e escolhida de forma aleatória pelo programa. Em baixo segue-se a descrição dos principais predicados e exemplos de inicialização do tabuleiro: Predicados: o table(T,N) – permite seleccionar uma dos tipos de tabuleiros existentes. o Print_table(T) – imprime estado do tabuleiro T, em forma hexagonal. Fig 1: Visualização do tabuleiro Hexxagon Página 6
  • 7. Manipulação do Tabuleiro Foram criados predicados para manipular as peças na tabela. Tabela que é representado por uma lista de listas, em Prolog. Na base de factos contem as possíveis direcções de movimento das peças, que facilita o movimento no tabuleiro. Para facilitar o movimento, a contagem dos pontos e jogadas válidas, foram criadas predicados que contabiliza o número de vizinhos,e os vizinhos dos vizinhos. Predicados: dir((X,Y),D):- devolve a direção unitária contida em D ex: dir((0,-1),n), na direção norte(n), anda zero para direita e 1 para cima. neighbours(P,X,Y,Table,Neig) – Dado um determinado jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada em Neig um vizinho(à uma célula de distancia). neighbours_list(P,X,Y,Table,Neigs)- Dado um determinado jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada em Neigs todos os vizinhos(à uma célula de distancia).  Construção de Jogadas Foram criadas um conjunto de predicados capazes de ler as coordenadas das peças no tabuleiro, avaliar jogadas possíveis e efectuar jogadas com as melhores peças. Predicados: o valid_mov(Xi,Yi,Xf,Yf,T,P):- Verifica se um direcção é válida, isto é, se é possivel fazer a jogada de dadas coordenadas sem violar as regras de movimento. o possible_jumps(X,Y,Table,Jumps) - Dado um determinado jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada o conjunto de coordenadas (Jumps) onde é possivel mover. o play(X,Y,T,P,Xf,Yf,TF):- verifica se uma jogada é valida, sendo valida realiza a jogada, onde T é o estado corrente, e TF é o estado do tabuleiro depois da jogada. o change(Table,X,Y,P,TF):- modifica os vizinhos com coordenadas X,Y como peças do jogador P. Hexxagon Página 7
  • 8.  Módulo de Inteligência Para os tipos de jogo Computador Vs Computador e Humano Vs Computador foram criados predicados com o objectivo de fazer jogadas mais inteligentes. Decisões que são tomadas de acordo com o numero de pontos que são feitas pelo jogador e pelo adversário. o Minimax Para resolver o problema das decisões criou-se predicados que usam o algoritmo Minimax. Onde as possíveis decisões do jogador e do adversário são organizadas e dispostas numa arvore por ordem de profundidade, onde tentará maximizar os pontos das jogadas do jogador (computador) e minimizar os pontos da jogada do adversário. A figura abaixo mostra como serão dispostas na árvore, onde os valores numéricos são os pontos das respectivas jogadas. Fig 2: Disposição das possíveis jogadas do Jogador e do adversário. Os pontos são contabilizados de acordo com a quantidade de peças de cada jogador. Predicados: o minimax(EST,Jog,Prof,Valor,Jogada):- Predicado principal do jogo, que dado um estado actual e precisão da decisão(profundidade), ela escolhe a melhor jogada. o max_value(ESTS,Jog,Prof,VT,JT,Valor,Jogada):- predicado usado pelo minimax, que dado um conjunto de estados ela escolhe a melhor, ou seja a jogada com maior valor. Hexxagon Página 8
  • 9. o min_value([E|L],Jog,Prof,VT,JT,Valor,Jogada):- similar ao max_value, mas escolhe o menor valor. o choose_max(V1,J1,V2,J2,VB,JB):- dado duas jogadas ela retorna a melhor(com maior valor) em JB. o choose_min(V1,J1,V2,J2,VB,JB):- dado duas jogadas ela retorna a melhor(com menor valor) em JB. o evaluate(EST,P,V):- é a função de avaliação da arvore minimax, quando esta atinge a profundidade desejada. o one_move(T,P,X,Y):- dado o estado do tabuleiro ela retorna um movimento possível da peça P. O módulo de inteligência foi testado de duas formas, primeiro colocando modo Computador Vs Computador com o mesmo nível de inteligência, e depois um com nível de inteligência mais baixo ou que joga aleatoriamente. Hexxagon Página 9
  • 10. Análise de Resultados O jogo foi testado e todos os requisitos foram satisfeitos, excepto a interface gráfica. Para cada modo de jogo fizeram-se os seguintes testes.  Humano Vs Humano Para testar o este modo, põe-se dois adversários quaisquer a jogar. Em baixo mostra-se figuras da execução do modo Humano Vs Humano Fig 3:Inicio Jogo Humano Vs Humano Hexxagon Página 10
  • 11. Fig 4: Fim do jogo Humano Vs Humano.  Humano Vs Computador Para testar este modo primeiro testou-se o algoritmo minimax escolhendo coordenadas aleatórias, e tabelas aleatórias, só depois foi testado no jogo. É notável que em diferentes níveis de dificuldade (profundidade), a dificuldade das jogadas é diferente. Em baixo é mostrado imagens do modo. Hexxagon Página 11
  • 12. Fig 5: Inicio de jogo Humano Vs Computador Hexxagon Página 12
  • 13. Fig 6: Fim de jogo Humano Vs Computador  Computador Vs Computador O modo computador Vs Computador foi testado de duas formas: Primeiro os dois jogadores têm o mesmo nível de inteligência, onde as vezes ganha umas as vezes ganha outro, dado tem o mesmo conhecimento. A segunda os dois jogadores tem inteligência diferente, onde um joga aleatoriamente (sem inteligência) e o outro joga prevendo as melhores jogadas, Como consequência, o segundo sempre ganha o jogo. Em baixo são mostrados imagens deste modo. Hexxagon Página 13
  • 14. Fig 7: Fim de Jogo Computador Vs Computador  Ambiente de desenvolvimento O jogo foi feito totalmente em linguagem Prolog, onde foi utilizadas as ferramentas de edição de texto do Swi-Prolog . Os compiladores utilizados foram os da Sicstus Prolog e da Swi-Prolog. O programa também corre em ambiente da Swi-Prolog e da Sicstus. O Jogo pode correr tanto em Microsoft Windows SO como em Linux SO. Hexxagon Página 14
  • 15. Conclusões No trabalho feito, foram implementadas os seguintes requisitos: Jogo Humano Vs Humano Jogo Humano Vs Computador Jogo Computador Vs Computador com diferentes níveis de conhecimento. No módulo de inteligência utilizou-se o algoritmo Minimax para prever as melhores jogadas, algoritmo que apresenta algumas desvantagens: Utiliza muitos estados para prever as melhores jogadas, o que o torna pouco eficiente. Existem estados que poderiam ser descartados mas são avaliados. Uma alternativa a isso é a utilização do Minimax cortes alfa-beta, que descarta essas possibilidades, tornando o minimax mais eficiente. Uma vantagem do minimax em relação a outros algoritmos de pesquisa, é a facilidade na programação do mesmo. A realização da interface gráfica e melhoramento do algoritmo Minimax são perspectivas, caso tivesse mais tempo. Referências Bibliográficas http://kidrocket.org/game_hexxagon.php http://paginas.fe.up.pt/~eol/IA/0910/TRABALHOS/pesqadv_hexxagon.html http://www.mobygames.com/game/dos/hexxagon http://www.springfrog.com/games/hexxagon/ http://www.mellekoning.nl/files/hexxagon/hexxagon.php Software: Sicstus Prolog Swi-Prolog Editor Hexxagon Página 15
  • 16. Anexos Manual do Utilizador O programa corre nas consolas Prolog da Sicstus e da Swi-Prolog. Em seguida são mostrados os passos desde a compilação até a execução do jogo.  Compilação Para compilar basta numa das consolas consultar o ficheiro do jogo Hexxagon.pl da seguinte forma. Fig 8: Compilar o ficheiro Ou na consola escrever “consult („Caminho para o ficheiro‟). Fig 9: Compilar o ficheiro Hexxagon Página 16
  • 17. Correr o Jogo Para correr basta na consola escrever “hexxagon.” ou “begin.” Aparecerá o menu na imagem abaixo onde poderá escolher uma das 5 opções. 1. Computador Vs Computador 2. Computador mais Inteligente Vs Computador menos inteligente 3. Humano Vs Humano 4. Humano Vs Computador 5. Sair As escolhas são feitas com os números do teclado de 1 à 5 Fig 10: Inicio do Jogo escolha do modo Caso escolhe a opção 1 ou seja Computador Vs Computador os estados são alternados pressionando na tecla ENTER. Na consola é pré-visualizada o tabuleiro as coordenadas das jogadas dos dois jogadores, e a respectiva pontuação. Em baixo é apresentado a ilustração do descrito acima. Hexxagon Página 17
  • 18. Fig 11: Representação da Jogada Para o modo Computador inteligente Vs Computador menos Inteligente é similar ao descrito acima. Já no caso do Humano Vs Humano (opção 3) é um pouco diferente, pois pede as coordenadas de origem e de destino das jogadas. Sendo a apresentação do tabuleiro e das pontuações são feitas da mesma forma em todos os modos. No modo Humano Vs Computador, quando joga o computador, a jogada é feita automática, a na vez do humano é pedido as coordenadas. Hexxagon Página 18
  • 19. Fig 12: Inserção das coordenadas no Modo Humano Vs Computador O jogo termina quando todos os campos tiverem preenchidos ou quando já não houver mais peças de um dos jogadores, e é mostrado o vencedor. Fig 13: Fim de jogada. Hexxagon Página 19
  • 20. Exemplo de Execução  Computador Vs Computador Inicio do jogo. Fig 14: Inicio do Jogo, Escolha de opção de jogo. Hexxagon Página 20
  • 21. Fig 15: Primeira Jogada Hexxagon Página 21
  • 22. Fig 16: Segunda Jogada Hexxagon Página 22
  • 23. Fig 17: Jogada de 0-8 para 1-7 Hexxagon Página 23
  • 24. Fig 18: Computador 1 17 pontos, Computador 2 18 pontos Hexxagon Página 24
  • 25. Fig 19: Joga Computador 1 Hexxagon Página 25
  • 26. Fig 20: Penultima Jogada Hexxagon Página 26
  • 27. Fig 21: Ultima Jogada, Ganha o computador 2 Hexxagon Página 27