Your SlideShare is downloading. ×
Hexxagon Game
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Hexxagon Game

260
views

Published on


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
260
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Inteligência Artificial: Relatório Final do Trabalho Prático Patrício Ferreira: [ ee06038@fe.up.pt] Faculdade de Engenharia da Universidade do PortoDepartamento de Engenharia Electrotécnica e de Computadores Rua Roberto Frias, s/n, 4200-465 Porto, Portugal 6 Junho 2010
  • 2. ResumoTrabalho realizado no âmbito de cadeira de inteligência artificial, visa implementação de umjogo de tabuleiro Hexxagon, em Prolog, com interface gráfica em java. Vai permitir trêsformas de jogo:  Humano vs Humano  Humano vs Computador  Computador vs ComputadorObjectivosO trabalho tem como objectivo, dotar-nos de capacidade de programação em lógica e deresoluções de problemas lógicos, e da aplicação da inteligência para fazer dotar o computadorde 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 doisjogadores cada partida, que podem ser: humano contra humano, humano contra computadorou computador contra computador.O jogo em si é simples, tendo poucas limitações e regras, contudo a sua implementaçãoapresentou algum grau de dificuldade.Primeiramente faram desenvolvidos as funções mais básicas como, as regras do movimentodas peças, as de visualização do tabuleiro, depois foi desenvolvida e aperfeiçoada osprincipais 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 ProblemaEste jogo de estratégia criado pela companhia Argo Games e publicado em 1993, é jogadonum tabuleiro hexagonal com 61 hexágonos onde 58 dessas são onde os jogadores podemmover-se. Inicialmente cada jogador começa com 3 peças. Sendo assim, para desenvolver este jogo em Prolog, é considerado um tabuleiro do jogocomo sendo um tabuleiro com 81 casas (nove casas por nove casas) onde 58 dessas casaspode-se mover as peças. Onde as restantes só são utilizadas para facilitar a representaçãomatricial 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 8A tabela acima mostra como estará disposto o tabuleiro, onde as células amarelas são ondepode-se mover as peças, as células brancas não fazem parte do espaço de movimento daspeç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 nafigura abaixo.Hexxagon Página 3
  • 4. Fig. 1 Estado inicial do jogo.Regras do jogoO jogo desenrola-se em jogadas intercaladas pelos jogadores. Cada jogador na sua vez saltauma peça que lhe pertença (da sua cor) para qualquer célula que esteja no máximo a distânciade duas células da origem com o intuito de se aproximar das peças do adversário, ficando adistância de uma célula, quando isso acontecer a peça do adversário será sua econsequentemente 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 comas peças do adversário o jogador pode ainda saltar uma só casa e assim a peça duplica ficandoum 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 JogoA implementação do jogo pode ser entendida em quatro etapas descritas em baixo. Desde aconstrução do tabuleiro e a sua inicialização, à manipulação do mesmo, construção dasjogadas 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 tabuleiroHexxagon 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 ComputadorVs Computador com o mesmo nível de inteligência, e depois um com nível de inteligênciamais baixo ou que joga aleatoriamente.Hexxagon Página 9
  • 10. Análise de ResultadosO 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 HumanoHexxagon 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 ComputadorHexxagon 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õesNo trabalho feito, foram implementadas os seguintes requisitos:Jogo Humano Vs HumanoJogo Humano Vs ComputadorJogo 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 é autilização do Minimax cortes alfa-beta, que descarta essas possibilidades, tornando o minimaxmais eficiente.Uma vantagem do minimax em relação a outros algoritmos de pesquisa, é a facilidade naprogramaçã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áficashttp://kidrocket.org/game_hexxagon.phphttp://paginas.fe.up.pt/~eol/IA/0910/TRABALHOS/pesqadv_hexxagon.htmlhttp://www.mobygames.com/game/dos/hexxagonhttp://www.springfrog.com/games/hexxagon/http://www.mellekoning.nl/files/hexxagon/hexxagon.phpSoftware:Sicstus PrologSwi-Prolog EditorHexxagon Página 15
  • 16. AnexosManual do UtilizadorO 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 ficheiroHexxagon 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 JogadaHexxagon Página 21
  • 22. Fig 16: Segunda JogadaHexxagon Página 22
  • 23. Fig 17: Jogada de 0-8 para 1-7Hexxagon Página 23
  • 24. Fig 18: Computador 1 17 pontos, Computador 2 18 pontosHexxagon Página 24
  • 25. Fig 19: Joga Computador 1Hexxagon Página 25
  • 26. Fig 20: Penultima JogadaHexxagon Página 26
  • 27. Fig 21: Ultima Jogada, Ganha o computador 2Hexxagon Página 27