Sie sind auf Seite 1von 51

Trabalho de Concluso de Curso

Uma Aplicao de Algoritmo Gentico para o Jogo


de Damas para Auxiliar o Aprendizado do Jogador
Gabriella Alves Bulhes Barros
gabbbarros@gmail.com
Orientadores:
Roberta Vilhena Vieira Lopes
Leonardo Filipe Batista Silva de Carvalho
Macei, Janeiro de 2012
Gabriella Alves Bulhes Barros
Uma Aplicao de Algoritmo Gentico para o Jogo
de Damas para Auxiliar o Aprendizado do Jogador
Monograa apresentada como requisito parcial para
obteno do grau de Bacharel em Cincia da Com-
putao do Instituto de Computao da Universi-
dade Federal de Alagoas.
Orientadores:
Roberta Vilhena Vieira Lopes
Leonardo Filipe Batista Silva de Carvalho
Macei, Janeiro de 2012
Monograa apresentada como requisito parcial para obteno do grau de Bacharel em
Cincia da Computao do Instituto de Computao da Universidade Federal de Alagoas,
aprovada pela comisso examinadora que abaixo assina.
Roberta Vilhena Vieira Lopes - Orientador
Instituto de Computao, Campus A. C. Simes
Universidade Federal de Alagoas
Leonardo Filipe Batista Silva de Carvalho - Orientador
Instituto de Computao, Campus A. C. Simes
Universidade Federal de Alagoas
Fbio Paraguau Duarte da Costa - Examinador
Instituto de Computao
Universidade Federal de Alagoas
Leide Jane de S Arajo - Examinador
Instituto de Computao
Universidade Federal de Alagoas
Gabriella Alves Bulhes Barros - Autor
Macei, Janeiro de 2012
Resumo
Jogos se tornaramumimportante instrumentono estudo e desenvolvimento de tcnicas
de inteligncia articial, devido grande variedade de gneros emque podemaparecer e ao
alto nvel de interao com o usurio.
Em contrapartida, a inteligncia articial contribuiu enormemente para o ramo dos jo-
gos eletrnicos, permitindo o desenvolvimento de personagens e interaes mais realistas.
Este trabalho objetiva apresentar umjogo de tabuleiro que se utiliza de tcnicas de inte-
ligncia articial para auxiliar o desenvolvimento das habilidades do jogador.
Para a criao de um oponente capaz de convencer o usurio e fornecer um bom balan-
ceamento entre entretenimento e desao, foram utilizados Algoritmos Genticos.
O jogo escolhido para caso de teste foi o jogo conhecido como damas. Por sua natu-
reza discreta e completamente observvel, e pelo ndice de incerteza proporcionado pela
contnua interao com o usurio, o desenvolvimento deste jogo mostrou-se um excelente
cenrio para a avaliao do desempenho da tcnica proposta.
Palavras-chave: Inteligncia Articial, Algoritmos Genticos, Jogos, Jogo de Damas.
i
Abstract
A traduzir
ii
Agradecimentos
Agradeo inicialmente a minha me, por sempre tentar me oferecer as melhores oportu-
nidades e ser umgrande modelo na minha vida, e tambmaos demais familiares que sempre
me incentivaram.
Agradeo a minha orientadora, Prof. Dr. Roberta Vilhena Vieira Lopes, pelos conselhos,
conhecimentos e orientao, que foram decisivos no meu desenvolvimento prossional, e
por ter me apresentado Inteligncia Articial.
A meu namorado, Bruno Soares, por me estressar nos momentos difceis, e me estressar
mais ainda nos momentos alegres, mas sempre tentar me ajudar quando pedi.
Aos amigos: Hermes, Suzane, Karlyandra, Eduarda, Diogo, Vitor, Emanuella, Joo, Jssica
F. e Jssica M; por toda a ajuda e todas as timas horas no L4D.
Aos professores, em especial ao Prof. Aydano Machado e ao Prof. Patrick Brito, por toda
a ajuda e incentivo.
Por m, agradeo a todos aqueles com quem j trabalhei e que me ajudaram a adquirir
os conhecimentos que possuo e a me tornar a pessoa que sou hoje.
Gabriella Barros
iii
Sumrio
iv
Lista de Figuras
v
Lista de Tabelas
vi
Lista de Cdigos
vii
Captulo 1
Introduo
Jogos eletrnicos, partindo de um ponto de vista acadmico, so sistemas ideais para
testar e validar novas metodologias e tcnicas de Inteligncia Articial (IA). Isso se deve ao
fato de que eles so, em sua maioria, complexos e altamente interativos. Por outro lado, a IA
tambmprovoucontribuir para os jogos, servindo como abordagempara melhorar a relao
entre o jogador e o jogo, tambmchamada jogabilidade ?.
Jogabilidade denida principalmente em funo da diculdade, complexidade, intera-
tividade e realismo. Esses fatores, juntos, so capazes de denir o nvel de aceitao de um
jogo ?. A Inteligncia Articial aplicada a jogos focada em melhorar essas reas.
A IA aplicada a jogos difere da Inteligncia Articial tradicional por no buscar sempre a
melhor soluo para um problema ?, mas tentar sempre simular a inconstncia do desem-
penho humano ?, em busca de entretenimento ?. Ela pode se referir a qualquer mdulo de
software responsvel pela forma como os componentes do jogo se comportam, sejam estes
personagens no controlados pelo jogador, tambm chamados NPCs (Non-Player Charac-
ters - personagens no jogveis), problemas de controle de mais baixo nvel, ou caractersti-
cas de modelagemfsica e deteco de coliso. ?.
Um exemplo de aplicao da IA aos jogos ocorre na tentativa de melhorar a jogabilidade
do jogo, balanceando a diculdade de acordo como usurio. Obalanceamento o ajuste da
diculdade do jogo, de modo a obter certa estabilidade emrelao ao jogador ?. Se o mesmo
se depara com umjogo muito fcil, pode achar a jogabilidade enfadonha. Do mesmo modo,
ao encontrar um outro muito difcil, se sentir frustrado e no jogar novamente. Num ter-
ceiro caso, se a diculdade mantiver-se adequada quele usurio, ele permanecer jogando
e apreciar mais a experincia. Esse equilbrio importante, pois inuencia diretamente na
satisfao do usurio ? e na qualidade do produto ?.
O balanceamento comumente dividido em esttico e dinmico. No primeiro, existem
nveis de desao pr-denidos pelos Game Designers, onde permitida a seleo de um
destes nveis. Isso resulta numa separao xa de diculdades, o que pode gerar desaos
muito difceis ou muito fceis para um mesmo usurio. A segunda abordagemtrata de uma
1
1.1. MOTIVAO 2
adaptao da diculdade em funo do jogador.
1.1 Motivao
A tarefa de balancear a diculdade em um jogo um ponto importante para a jogabi-
lidade do mesmo, inuenciando diretamente na sua aceitao pelo usurio. Devido a isso,
diversas pesquisas tm sido feitas, procurando sempre uma melhor interao com o joga-
dor. Entretanto, um ponto que deveras ignorado a utilizao deste balanceamento para
auxiliar o processo de aprendizagemdo jogador.
Conforme o usuriointerage como jogo, ele tende a melhorar, seja lgica ou sicamente,
em relao ao mesmo. Acreditamos, portanto, ser possvel auxiliar o aprendizado do joga-
dor, focando o balanceamento no somente na habilidade que ele possui, mas nas suas fra-
quezas. Isso tambmresultaria num jogo capaz de sempre entreter o jogador, pois nunca se
tornaria montono ou muito difcil, adequando-se a cada usurio individualmente.
1.2 Objetivo
Neste trabalho propomos uma abordagemde Algoritmo Gentico (AG), aplicada ao caso
de estudo do jogo de Damas, para auxiliar o aprendizado do jogador. Com isso, simular-se-
ia o comportamento de um jogador humano capaz de perceber as fraquezas do adversrio
e obter diferentes conguraes, para um determinado tabuleiro, que se aproveitem de tais
diculdades para vencer o jogo.
1.3 Estrutura do documento
Esta monograa est dividida em quatro captulos, sendo este o primeiro. No captulo
??, apresentamos um breve estado da arte da IA em jogos, descrevendo as tcnicas da IA
aplicada a jogos, dando nfase aos Algoritmos Genticos. No captulo ?? deste trabalho ser
apresentada a proposta deste trabalho, e no captulo ?? encontram-se os resultados. Por
m, o captulo ?? se presta a apresentar a concluso.
Captulo 2
Fundamentao Terica
Neste captulo feita uma sntese das principais tcnicas de Inteligncia Articial apli-
cada a jogos. A tcnica foco desse trabalho, os Algoritmos Genticos, apresentada em se-
guida, na Seo ??.
2.1 Tcnicas de Inteligncia Articial Aplicadas a Jogos
2.1.1 Mquina de Estados Finitos
Uma Mquina de Estados Finitos, ou Finite State Machine (FSM), composta por um con-
junto de estados, os quais so associados a aes ou comportamentos. Estes estados so co-
nectados por transies, que dependem de condies especcas para cada uma. Quando
uma condio satisfeita, ocorre uma transao para outro estado. FSMs so muito utili-
zadas em jogos devido a sua fcil implementao e baixa complexidade, porm podem se
tornar previsveis ?. Um exemplo de uma FSM com trs estados mostrado na Figura ??.
Figura 2.1: Mquina de Estados Finitos com trs estados.
FSM podem seguir os modelos de Moore ou Mealy, cuja denio formal uma tupla
<

, , S, S
0
, , >, onde ?:


o alfabeto de entrada um conjunto de smbolos nitos no vazio;
3
2.1. TCNICAS DE INTELIGNCIA ARTIFICIAL APLICADAS A JOGOS 4
o alfabeto de sada um conjunto de smbolos nitos no vazio;
S umconjunto nito de estados no vazio;
S
0
o estado inicial, e um elemento de S;
a funo de transio de estados : S

S;
a funo de sada. No modelo de Mealy, a sada uma funo composta pelo
alfabeto de entrada e o estado atual( : S

). No modelo de Moore, a sada


depende somente do estado atual (: S ).
As Mquinas de Estados Finitos deram origem a algumas variantes, das quais se des-
tacam as Mquinas de Estados Hierrquicos (HSM) e as Mquinas de Estado Fuzzy
(FuSM).
As Mquinas de Estados Hierrquicos so teis emsituaes complexas, permitindoo
agrupamento de estados similares ?.
Por sua vez, as Mquinas de Estado Fuzzy incorporam traos da lgica fuzzy s FSM
tradicionais (?). Isso ocorre tradicionalmente na forma de transies ativadas por de-
terminaes fuzzy, mas tambm pode ser implementada com estados fuzzy, ou am-
bos.
2.1.2 Sistemas baseados emMensagens
Sistemas baseados em mensagens, tambm chamados sistemas de eventos ?, so conside-
rados a nica tcnica mais comum em jogos que as mquinas de estado ?. Trata-se de um
sistema onde uma entidade A envia informaes outra entidade B quando A sofre alguma
mudana. Isso gera uma economia na capacidade computacional e no tempo de programa-
o.
importante ressaltar que essa tcnica , emsua essncia, uma tcnica de comunicao,
no sendo classicado como um sistema de tomada de deciso. Entretanto, ela se mostra
til em casos onde as partes do jogo so majoritariamente reativas, tendendo a passar uma
quantidade considervel de tempo ociosas.
2.1.3 Sistemas de Scripts
Script uma tcnica que pode ser denida como a utilizao de uma linguagem de progra-
mao simplicada para construir elementos, lgicas ou comportamentos da IA ? ?. Essas
linguagens implementamregras e podemser muito simples. Entretando, o desenvolvimento
de uma linguagem de Script no uma tarefa trivial, e at mesmo a escolha de uma requer
uma anlise das necessidades do projeto a ser desenvolvido.
2.1. TCNICAS DE INTELIGNCIA ARTIFICIAL APLICADAS A JOGOS 5
Algumas vantagens dessa tcnica so a criao rpida de prottipos e a escalabilidade,
mas Scripts tendema diminuir o tempo de execuo e dicultar a tarefa de debugging. Ainda
assim, so extremamente teis por permitir a insero de um maior contedo no jogo, sem
a necessidade de programadores mais dedicados.
2.1.4 Lgica Fuzzy
A lgica fuzzy, ou lgica difusa, caracterizada por um conjunto de tcnicas matemticas,
criadas com o intuito de permitir uma tomada de deciso que seja denida em nveis alm
de verdadeiro oufalso, criando umespao de possibilidade entre os dois extremos, enquanto
fornece solues satisfatrias a um problema ?. O diferencial dessa tcnica a impreciso:
um fato pode ter uma porcentagem de ser verdadeiro ?. De forma sucinta, os principais
conceitos presentes na lgica fuzzy so os conjuntos fuzzy e as regras fuzzy.
Os conjuntos difusos so uma forma de denir graus emque uma descrio pode ser sa-
tisfeita. Esse conjunto permite interpretaes relativas sobre seus objetos, no tendo limites
precisos. Por exemplo, um personagem pode estar 0.24% machucado, enquanto na lgica
tradicional ele estaria simplesmente machucado ou sadio. Esse valor, que pode variar entre
0 e 1, chamado valor de pertinncia.
As regras fuzzy geramnovos valores de graude pertinncia combase empertinncias co-
nhecidas anteriormente. Umexemplo de equao usada para gerar valores difusos no(A),
que pode ser escrito como 1m
A
, onde m
a
o grau de pertinncia de A.
2.1.5 A* (A Estrela)
Costuma ser tratado como sinnimo para algoritmo de localizao em jogos. uma tcnica
muito eciente, de implementao simples e enormemente utilizada nesse ramo. uma
variao de busca pela melhor escolha, e funciona localizando caminhos de forma ponto a
ponto. Os ns so avaliados combinando o custo para alcanar cada n g(n) e o custo de ir
do n at o objetivo h(n) ?.
f (n) =g(n) +h(n) (2.1)
O primeiro n a ser observado ser o com menor valor na equao ??. No caso de h(n)
ser uma heurstica admissvel, ou seja, nunca superestimar o custo para alcanar o objetivo,
temos que a tcnica ser tima.
Um problema dessa abordagem que frequentemente o nmero de ns no grafo e ex-
ponencial em relao ao comprimento da soluo, o que gera sobrecarga no computador e
esgotamento de espao de armazenamento na memria.
2.1. TCNICAS DE INTELIGNCIA ARTIFICIAL APLICADAS A JOGOS 6
2.1.6 Aprendizagempor Reforo
Consiste em um agente aprender o conjunto de aes para os estados do problema capazes
de maximizar a satisfao de seus objetivos ?. Ela caracterizada por no existir superviso
para o treinamento do agente, resultando em uma aprendizagem por tentativa e erro, ou
seja, baseada na experincia do agente. De forma mais geral, umalgoritmo de aprendizagem
por reforo possui trs componentes principais ?: uma estratgia de explorao, usada para
tentar diferentes aes no jogo; uma funo de ganho, que associa um valor, denominado
recompensa ou ganho, a umambiente, denindo quo boa a ao ; e umconjunto de regras
de aprendizado que una os dois.
Dentre as muitas tcnicas para solucionar o problema, destacamos a Q-Learning. Esta
possui duas propriedades que a tornam interessante para os jogos: a garantia de convergir
para a melhor soluo, se todas as combinaes de estado-ao forem visitadas sucien-
temente, e a sua simplicidade quando comparada a outras tcnicas de aprendizagem por
reforo.
2.1.7 Redes Neurais
uma tcnica inspirada na biologia, representando, de forma algortmica, organizacional
e funcional, o padro de funcionamento do crebro ?. Ela consiste em um conjunto de
ns simples, que nada mais so seno representaes articiais de neurnios, que rodam
o mesmo algoritmo. Cada neurnio se comunica com outros ns, aos quais conectado
atravs de padres, conhecidos como topologias da rede, como mostrado na Figura ??.
Figura 2.2: Duas topologias de rede diferentes.
Uma caracterstica das redes neurais (RNs) seu fator de aprendizagem, que difere sig-
nicativamente entre diferentes RNs. Esse aprendizado tambmpode ser ter caractersticas
adaptativas, pois as RNs podemarmazenar informao, mas, devido natureza imprevisvel
e instvel desse aprendizado, essa abordagem pouco comum.
2.1. TCNICAS DE INTELIGNCIA ARTIFICIAL APLICADAS A JOGOS 7
2.1.8 Minimax e Poda Alfa-Beta
A tcnica minimax um algoritmo recursivo, que se utiliza dos valores minimax de cada
estado sucessor amde decidir o movimento seguinte emumjogo? ?. Valores so atribudos
s posies do jogo, de modo que este seja computado por meio de uma funo que indique
quo bom seria ocupar tal estado. A jogada realizada de modo a maximizar o valor da
jogada do usurio, e minimizar o valor da jogada do oponente ?.
Um problema dessa abordagem que o nmero de estados a analisar exponencial em
relao ao nmero de movimentos. Uma abordagem voltada a solucionar esse problema
a poda alfa-beta. Nela, introduzida a possibilidade de calcular a deciso correta sem exa-
minar todos os ns, retornando o mesmo valor de uma busca minimax. O princpio usado
que, dado um n n pertencente a rvore, se o jogador tiver uma escolha melhor num n
pai de n, n nunca ser alcanado, podendo ser podado. Para isso, utilizam-se os valores da
melhor escolha encontrada at o momento de um jogador, chamada alfa; e a pior escolha
tambmencontrada at o momento, chamada beta.
importante ressaltar que a relao entre a ecincia dessa tcnica e a ordem em que
os sucessores so avaliados. No ser possvel podar os ns se os piores sucessores forem
gerados primeiro. Por essa razo se costuma sugerir que primeiramente sejam examinados
os sucessores com maior probabilidade de serem os melhores.
2.1.9 rvore de Deciso
rvores de Deciso so muito modularizveis, implementadas de forma rpida e fcil, e
muito utilizadas no controle de personagens em jogos. Embora raras em jogos, elas podem
ser implementadas para aprender, e tal aprendizado tende a ser relativamente rpido. Uma
rvore de deciso constituda de pontos de deciso conectados entre si. Ela possui uma
deciso inicial, que funciona como raiz, e para cada deciso a partir desta raiz, uma den-
tre algumas opes escolhida. Esse processo continua at que no existam mais decises
possveis de serem tomadas. Em cada folha da rvore existe uma ao, que ser processada
quando aquela folha for atingida. A Figura ?? apresenta um exemplo de rvore de deciso.
2.1.10 Sistema de Informaes Baseados emLocalizao
Trata-se de um conjunto de tcnicas secundrias ao desenvolvimento do jogo, relacionadas
tomada de deciso, que provm informao adicional ao motor de inteligncia do jogo.
Trs tcnicas pertencentes a esse grupo so descritas a seguir.
A primeira, chamada Mapas de Inuncia (MIs), caracterizada pelo uso de um vetor
de dados, onde os elementos do mesmo representam dados sobre uma posio do mundo.
Emambientes 2D, so concebidos como uma malha 2D, enquanto em ambientes tridimen-
sionais aparecem como camadas de malhas. Em ambos, sua resoluo dependente do
2.1. TCNICAS DE INTELIGNCIA ARTIFICIAL APLICADAS A JOGOS 8
Figura 2.3: rvore de deciso.
tamanho de espao de jogo que precisa ser mapeado ?. Uma maneira de contornar esse
problema aplicar os MIs em escalas menores, apenas onde for necessrio. Essa tcnica
resulta na centralizao da busca por informaes de interao, em plataformas de armaze-
namento para informaes de tipos diferentes e na remoo de situaes onde acesso global
ao cdigo cedido a personagens individuais ?.
A segunda tcnica conhecida como Smart Terrain. Ela foi introduzida pela srie de jo-
gos The Sims, a partir do conceito de que personagens podemagir emdecorrncia de neces-
sidades que podem ser satisfeitas atravs de objetos dispostos ao seu redor. Caracteriza-se
por usar dados de lgica e comportamento no uso de caractersticas e objetos do mundo
do jogo, dentro dos prprios objetos ?. Assim, uma entidade caminha por um ambiente vir-
tual, onde existem objetos capazes de fornecer interaes que so necessrias ou no a esta
entidade. Animaes das interaes e sons tambmso levados em conta nesta tcnica.
Uma terceira tcnica a Anlise de Terreno (AT), que pode ser descrita como um con-
junto de padres de reconhecimento que utilizam tcnicas de MIs capazes de fornecer in-
formao sobre mapas ?. comumente utilizada junto a tcnicas como redes neurais ou
lgica fuzzy, de modo a diminuir o custo computacional das buscas.
2.1.11 Data - Driven
Trata-se de um tipo de pacote de edio que fornece funcionalidades complexas, onde cada
objeto possui um conjunto de dados associado a ele e responsvel por seu comportamento
?. Por somente agregar o conjunto extra de dados at seu respectivo objeto, ela permite a
fcil edio de dados referentes IA. Entretanto, possui limitaes relacionadas criao da
IA de personagens, que no caracterizada por denir um nmero de parmetros. Isso se
deve ao fato de que diferentes personagens utilizamlgicas de deciso especcas.
2.2. ALGORITMO GENTICO 9
2.2 Algoritmo Gentico
Algoritmo Gentico (AG) uma abordagem da computao evolucionria baseada na
Teoria da Evoluo de Darwin voltada para problemas de otimizao. Problemas de otimi-
zao podem ser denidos na seguinte forma ?:
Encontre um x
0
X tal que f mximo em x
0
, onde f : X R
uma funo de valor real arbitrrio, i.e. f (x
0
) =max
xX
f (x), (2.2)
Onde X o espao de busca do problema. Como na prtica muitas vezes quase im-
possvel obter uma soluo global para a Equao ??, comum ser suciente encontrar um
ponto prximo ou igual a um mximo local, ou seja, uma soluo boa o suciente, mas que
no a melhor de todas.
Proposto por John H. Holland na dcada de setenta, o AG centrado na idia de que
indivduos mais adaptados ao ambiente tm maiores chances de sobrevivncia, e portanto
sero mais aptos a perpetuar sua espcie. Essa tcnica categorizada, no contexto da IA,
como busca cega ?, por no possurem outras informaes sobre os estados alm das que a
denio do problema fornece ?. Os AGs utilizamuma srie de metforas entre os conceitos
da biologia e dos algoritmos de busca, os quais sero descritos a seguir.
Indivduo: representa uma soluo possvel para o problema.
Cromossomo: representao da estrutura de dados que constitui o indivduo. Russell
dene como "uma cadeia sobre umalfabeto nito pertinente ao problema"?. Pode ser
representada por vetores, matrizes ou tipos abstratos de dados ?.
Populao: um conjunto de indivduos / solues.
Adaptao do indivduo: dene o quo adaptado um indivduo em relao ao am-
biente. Analogamente, grau de satisfao do indivduo para um dado problema.
Operadores genticos: operadores que atuam no espao de estados do problema. Os
mais comuns so operadores de cruzamento, referentes reproduo sexual, e de mu-
tao.
Seleo: critrio para determinar quais indivduos sero reutilizados, na prxima ge-
rao da populao, na busca de uma soluo para o problema.
2.2.1 Algoritmo Gentico de Holland
O Algoritmo Gentico de Holland surgiu durante uma tentativa de desenvolver um mtodo
computacional para abordar fenmenos gerados por sistemas adaptativos complexos ?, cu-
2.2. ALGORITMO GENTICO 10
jos resultados dependemdas interaes no lineares entre vrios agentes adaptativos. Con-
forme seu trabalho prosseguia, Holland notou que existia uma relao entre os fenmenos
que estudava e o processo de evoluo das espcies. Isso se devia ao fato de que a determi-
nao do resultado de um fenmeno pela interao entre os agentes adaptativos era an-
loga a determinao da populao seguinte gerada pela interao entre fatores ambientais.
Com isso, Holland props o modelo de algoritmo gentico denominado R, como mostra o
Pseudo-cdigo apresentado no Algoritmo ??.
Algoritmo 1 Algoritmo Gentico de Holland : R
1: begin procedimento R
2: t 0
3: Gerar populao inicial P(t )
4: Calcular avaliao dos cromossomos de P(t )
5: while Critrio de parada no satisfeito do
6: t t +1
7: Selecionar P

(t ) a partir de P(t 1)
8: Aplicar operadores genticos de cruzamento, mutao e inverso a P

(t )
9: P(t ) P

(t )
10: Calcular avaliao dos cromossomos de P(t )
11: end while
12: end procedimento R
Os dados manipulados pelo Algoritmo ?? representam a populao e os indivduos,
sendo os ltimos correspondentes a vetores binrios de tamanho m, enquanto a populao
representada por uma matriz de nm onde cada linha da matriz representa umindivduo
?. Uma populao e seus indivduos podem ser denidos da seguinte maneira:
Denio 2.2.1 Indivduo - Umindivduo i de uma populao P uma cadeia b
1
, b
2
, . . . , b
m
,
tal que, j {1, 2, . . . , m} b
j
{0, 1}
Denio 2.2.2 Populao - Uma populao P uma matriz b
11
, . . . , b
1m
, . . . , b
n1
, . . . ,
b
nm
, onde cada linha j {1, 2, . . . , n} representa umindivduo da populao.
O Algoritmo ?? comea inicializando uma varivel t com o valor zero, e a populao P
gerada aleatoriamente. Umexemplo de populao P seria a da Figura ??, comcinco cadeias
de tamanho oito representando cinco indivduos.
Em seguida, o algoritmo calcula o valor da funo de adaptao (tness) de cada indiv-
duo dessa populao. A adaptao de um indivduo denida pela funo objetiva e pela
inteno do problema. A funo objetiva do problema denida por o : DR
+
. Ela recebe
um elemento do domnio do problema D e retorna a medida do grau de satisfao do ele-
mento ao problema em questo.
2.2. ALGORITMO GENTICO 11
Figura 2.4: Populacao P.
A inteno do problema dene se o resultado desejado o elemento com maior ou me-
nor grau de satisfao. Se a inteno do problema for encontrar o elemento com maior grau
de satisfao, ento a funo de adaptao f do algoritmo ser igual a o, do contrrio a fun-
o de adaptao f do algoritmo ser igual a o. Essa conveno necessria uma vez que
o algoritmo gentico est sempre em busca do indivduo mais adaptado.
Denio 2.2.3 Funo de Adaptao- a funo de adaptao f de umindivduo dada por
uma funo do tipo f : I IR de forma que,
f (i ) =
_
o(decod(i )) se a inteno for encontrar o indivduo mais adaptado.
o(decod(i )) se a inteno for encontrar o indivduo menos adaptado.
(2.3)
onde I o conjunto de todos os vetores binrios de tamanho m considerados para o
problema, e decod uma funo que recebe umindivduo e retorna o elemento do domnio
do problema que este indivduo representa.
Por exemplo, tome os indivduos da populao P apresentada na Figura ?? e supo-
nha que representem a codicao binria dos nmeros inteiros pertencentes ao intervalo
[0, 255]. Suponha tambm que a funo objetiva do problema est a procura do nmero in-
teiro cuja codicao em binrio contenha a maior ocorrncia da subcadeia 01. Neste caso
a funo adaptao seria dada pelo nmero de ocorrncias da subcadeia 01 em cada indiv-
duo. A Figura ?? mostra o valor da adaptao dos indivduos da populao apresentada na
Figura ??.
Figura 2.5: Populacao P e seu valor de adaptao.
Aps calcular o valor de adaptao dos indivduos de P, o algoritmo verica se a condi-
o de parada foi satisfeita. Em caso positivo ele encerra sua execuo. Caso contrrio, ele
inicia seu lao enquanto-faa. A satisfao de sua condio de parada indica um resultado
aceitvel para o problema, seja este um valor de adaptao x ou atingir a j-sima iterao.
2.2. ALGORITMO GENTICO 12
O lao enquanto-faa do Algoritmo ?? compreende o processo evolutivo propriamente
dito. A cada execuo do lao, t incrementado e a populao alterada pela sucessiva ao
dos operadores genticos de cruzamento, mutao e inverso sobre os indivduos da popu-
lao P

, a qual formada por indivduos selecionados pela funo de seleo aplicada a


P.
A funo de seleo recebe a populao atual P e o parmetro h que indica o tamanho
da populao a retornar, e retorna uma populao formada pelos indivduos mais adaptados
de P.
Denio 2.2.4 Seleo - Caracteriza uma funo de seleo uma funo do tipo PR
+
P,
de forma que:
sel (c
1
, c
2
, ..., c
n
) =(c
i
, .., c
j
) | 1 i , j n , onde
c
i
, .., c
j
so cromossomos que satisfazem algumrequisito de seleo.
(2.4)
Tomando como exemplo a populao P na Figura ?? e h =3, a populao selecionada P

seria formada pelos indivduos <0, 1, 0, 0, 1, 1, 1, 0 >, <1, 0, 1, 0, 1, 1, 1, 0>, <0, 1, 0, 1, 0, 1, 0, 1>.
Em seguida, temos os operadores genticos. O operador de cruzamento tem como ob-
jetivo misturar o material gentico de dois ou ais indivduos em busca de um indivduos
melhor. A funo de cruzamento recebe como entrada alguns indivduos da populao P

junto a um nmero aleatrio r , denominado ponto de corte, e retorna os indivduos for-


necidos caso r < p
c
, ou um novo par de indivduos caso r c, tal que o novo par seja a
combinao dos vetores dos indivduos fornecidos. Levaremos em conta nessa trabalho o
cruzamento com apenas dois indivduos, tal qual a denio a seguir.
Denio 2.2.5 Cruzamento - A funo cruzamento toda aquela do tipo um-ponto emque
umponto : I I IR
+
I I, na qual:
umpont o(x
1
, . . . , x
m
,
_
y
1
, . . . , y
m
_
, r ) =
_
(x
1
, . . . , x
m
,
_
y
1
, . . . , y
m
_
) se r <p
c
(
_
x
1
, . . . , x
z
, y
z+1
, . . . , y
m
_
,
_
y
1
, . . . , y
z
, x
z+1
, . . . , x
m
_
) se r p
c
(2.5)
onde I o conjunto de todos os vetores binrios de tamanho m considerados para o
problema e z um nmero inteiro pertinente ao conjunto {1, 2, . . . , m} escolhido de forma ale-
atria.
Para ilustrar, utilizaremos dois dos trs indivduos selecionados anteriormente: <0, 1, 0, 0, 1, 1, 1, 0>
e <0, 1, 0, 1, 0, 1, 0, 1 > e r =3, conforme ilustrado na Figura ??.
Outro operador o de mutao. Na verso de Holland, era constitudo por uma funo
complemento que recebe umindivduo da populao P

e umnmero aleatrio r , e retorna


2.2. ALGORITMO GENTICO 13
Figura 2.6: Operao de cruzamento de Holland.
o indivduo fornecido se r > p
m
, ou um novo indivduo se r p
m
, onde p
m
a probabili-
dade de mutao. Para o ltimo caso, o novo vetor obtido a partir de alteraes feitas no
indivduo fornecido.
Denio 2.2.6 Mutao - O operador de mutao denido como sendo uma funo com-
plemento do tipo, complemento : I R
+
I, onde:
compl ement o(x
1
, . . . , x
m
, r ) =
_
x
1
, . . . , x
m
se r >p
m
_
x
1
, . . . , x
z
1
, . . . , x
z
2
, . . . , x
z
u
, . . . , x
m
_
se r p
m
(2.6)
onde I o conjunto de todos os vetores binrios de tamanho m considerados para o pro-
blema, {z
1
, z
2
, . . . , z
u
} umsubconjunto de {1, 2, . . . , m} escolhido ao acaso e tal que z
1
<z
2
<. . . <z
u
,
e com os caracteres x
z
1
, x
z
2
,..., x
z
u
representando o complemento binrio do caractere que
ocupa esta mesma posio no indivduo x
1
, . . . , x
m
.
Por exemplo, a Figura ?? ilustra a ao da operao de mutao aplicada ao indivduo
<01, 0, 1, 1, 1, 1, 0, 0> da populao P mostrada anteriormente, considerando z
1
=1 e z
2
=4.
Figura 2.7: Operao de mutao por complemento de Holland.
O ltimo operador o operador de inverso. Trata-se de uma funo inverte que recebe
um indivduo da populao P

e um nmero aleatrio r , e retorna o indivduo fornecido


se r > p
i
, ou um novo indivduo se r p
i
, onde p
i
a probabilidade de inverso. Este
novo indivduo ser formado pela alterao da ordem dos caracteres que ocupam posies
vizinhas no indivduo fornecido. A operao de inverso denida por:
2.2. ALGORITMO GENTICO 14
Denio 2.2.7 Inverso - denida por uma funo inverte do tipo inverte : I R
+
I, de
forma que:
i nver t e(x
1
, . . . , x
m
, r ) =
_
x
1
, . . . , x
m
se r >p
i
_
x
1
, . . . , x
z
1
2
, x
z
1
1
, x
z
2
, x
z
2
1
, x
z
2
2
, . . . , x
z
1
, x
z
2
+1
, . . . , x
m
_
se r p
i
(2.7)
onde I o conjunto de todos os vetores binrios de tamanho m considerados para o pro-
blema, e {z
1
, z
2
} um subconjunto de x
1
, . . . , x
m
escolhido aleatoriamente com {z
1
<z
2
}.
Em seguida, o algoritmo gentico substituir a populao atual P por uma nova popu-
lao formada pelos k indivduos mais adaptados da populao P

e pelos n k indivduos
mais adaptados da populao P, sendo n o tamanho mximo da populao.
No algoritmo gentico de Holland, os indivduos eram apenas amostras do espao de
busca, e os operadores eram mecanismos para levar o algoritmo em direo a melhores
amostras, utilizando-se da preservao das caractersticas dos indivduos mais adaptados
obtidas pela operao de cruzamento e da alterao de determinadas caractersticas pre-
sentes em tais indivduos atravs das operaes de mutao e de inverso.
2.2.2 Algoritmos Genticos emJogos
No contexto de jogos, algoritmos genticos costumam ser usados para ajustar prioridades,
comportamentos ou parmetros de personagens, e a utilizao da informao recolhida por
eles tende a ser uma operao do tipo caixa-preta
1
.
Um dos jogos que se utiliza de AGs para ajuste de comportamento o Quake 3. Nele, os
AGs servem para otimizar a IA do controlador de lgica fuzzy dos adversrios controlados
pela IA do jogo, ou bots. Por exemplo, o bot pode estar 45% a favor de pegar um lana-
foguetes e 62% a favor de pegar uma armadura.
Entretanto, possvel utiliz-los massivamente, como demonstrado nos jogos Black and
White e Creatures, mas comum restringir o aprendizado ou as caractersticas genticas
herdadas pelos indivduos, de modo a controlar a direo do aprendizado ou da evoluo o
tanto quanto possvel.
importanteressaltar que os algoritmos genticos podem, e algumas vezes iro, atuar da
pior forma possvel. Por exemplo, devido a natureza dos dois ltimos jogos citados, temos
uma certa imprevisibilidade nas aes tomadas pelos personagens controlados pela IA. Isso
pode gerar aes inapropriadas ou estpidas a serem tomadas. Essas escolhas se devem ao
elemento de aleatoriedade inerente ao algoritmo.
1
Caixa-Preta em computao um termo que signica uma operao que tem sua funcionalidade comple-
tamente abstrada, normalmente omitindo de seus usurios sua implementao. Neste contexto isto signica
que, ainda que se tenha acesso a seus resultados da operao e se saiba o que ela faz, o conhecimento de como
o procedimento realizado desconhecido ?.
2.3. ABORDAGEMS DA IA APLICADAS AO JOGO DE DAMAS 15
Esse elemento aleatrio inserido de modo a direcionar a busca, tornandoos algoritmos
genticos parte de uma classe de mtodos de busca chamada "buscas estocsticas", cuja ca-
racterstica e a necessidade de numerosas interaes a m de localizar a melhor soluo
possvel, visto que o prprio elemento aleatrio pode levar a busca para longe do melhor
resultado possvel. Ainda assim, a tcnica diminui em muito as chances de que o algoritmo
que preso ao redor de uma possvel soluo em particular, o que costuma ocorrer em pro-
blemas que geram muitos bons resultados e que no sejam o melhor possvel. Isso porque
o elemento aleatrio tende tambm a levar a busca para fora de tais regies sendo capaz
mesmo de alcanar a melhor soluo possvel, conhecida como mximo global.
Outra caracterstica dos algoritmos genticos que, diferentemente de outros mecanis-
mos de busca, so capazes de separar inteiramente seu algoritmo da representao do pro-
blema, o que lhes permite localizar facilmente solues em sistemas com diferentes tipos
de variveis. Ainda que algumas estruturas sejam mais comumente utilizadas, como, por
exemplo, vetores de caracteres, possvel usar qualquer tipo de dado desde que cada in-
divduo, deste possa ser codicado em uma soluo completa e que operadores genticos
possamser construdos para aquela estrutura de dados ?.
2.3 Abordagems da IA aplicadas ao jogo de damas
Dentre os projetos de IA aplicada ao jogo de damas, destacam-se os seguintes:
2.3.1 CHINOOK
CHINOOK o agente jogador de damas mais famoso e atual campeo mundial ? ?. Os obje-
tivos inerentes a sua criao foramdesenvolver, a curto prazo, umprograma capaz de vencer
o campeo mundial humano e resolver, a longo prazo, a teoria do jogo de damas. Seu de-
sempenho consiste de quatro aspectos fundamentais:
Utiliza o algoritmo de poda alfa-beta paralelo para busca;
Sua funo de avaliao ajustada manualmente, sendo capaz de decidir quo boa
uma posio;
Possui uma grande base de dados de nais de jogos;
Possui uma outra grande base de dados, desta vez acerca de diretrizes para incio de
jogos.
2.3.2 ANACONDA
Os autores de ANACONDA, Chellapilla e Fogel, exploraram o potencial de aprender a jogar
damas de forma independente da percia humana ? ?, utilizando-se de caractersticas do
2.3. ABORDAGEMS DA IA APLICADAS AO JOGO DE DAMAS 16
jogo que eles acreditavamser importantes para se jogar bem?. Foi desenvolvido utilizando-
se redes neurais, onde, aps aproximadamente 800 geraes, o processo evolucionrio gerou
uma rede neural capaz de jogar damas em um nvel especialista.
Captulo 3
AbordagemProposta
A abordagem que propomos consiste da aplicao de algoritmos genticos para auxiliar
o aprendizado do usurio, no contexto de um jogo. Para a aplicao deste projeto, optamos
pela implementao de um jogo de Damas, que chamamos de AG Checkers. No decorrer
desde captulo sero discutidas as alteraes realizadas no modelo proposto por Holland,
de modo a adequ-lo s estruturas e regras do jogo. Tambm foram implementados uma
mquina de estados nitos, para controlar determinadas caractersticas e regras do jogo, e
uma estrutura em rvore, para permitir a visualizao de jogadas frente da atual na busca
por solues. Ainda que no seja apresentada uma explicao mais detalhada sobre essas
tcnicas, acredita-se que os conceitos presentes na seo ?? desta monograa e a explicao
da implementao da mquina de estados e da estrutura de rvore utilizada, a serem feitos
neste captulo, sejam sucientes para dar ao leitor a compreenso necessria das tcnicas.
A aplicao tambmpossui umsistema para vericar o nvel de habilidade do jogador e,
assim, balancear a diculdade do jogo. Ele utiliza-se de informaes sobre as partidas joga-
das pelo usurio, que so salvar numbanco de dados local. Essas informaes so aplicadas,
tambm, no algoritmo gentico, como ser explicado em sees posteriores.
Primordialmente, acreditamos ser necessrio que se tenha conhecimento pleno dos con-
ceitos bsicos do jogo de Damas. Portanto, inicialmente sero apresentadas as regras do
jogo, explicitando quais foram implementadas ou no, e o porqu de tal deciso.
3.1 Regras do Jogo de Damas
Existemdiversas variaes das regras do jogo ao redor do planeta. Diante disto, foi decidido
adotar o conjunto de regras divulgadas pela Confederao Brasileira de Jogo de Damas ?,
descritas a seguir:
1. O jogo de damas praticado em um tabuleiro de 64 casas, claras e escuras. A grande
diagonal sempre deve car esquerda de cada jogador. Oobjetivo do jogo imobilizar
17
3.1. REGRAS DO JOGO DE DAMAS 18
ou capturar todas as peas do adversrio.
2. O jogo praticado entre dois parceiros, com 12 pedras brancas de um lado e com 12
pedras pretas do lado oposto. O lance inicial cabe sempre s peas brancas. A oitava
linha no tabuleiro denominada de casa de coroao.
Figura 3.1: Tabuleiro de Damas com a grande diagonal marcada.
3. A pedra anda uma casa de cada vez, sempre para frente em diagonal. Quando a pedra
atinge a ltima linha do tabuleiro, ela promovida dama.
4. A dama anda para frente e para trs, em diagonal, quantas casas desejar. Ela no pode
saltar uma pea de mesma cor.
Figura 3.2: a) Movimentao da pea em direo casa de coroao. b) Movimentao da
dama.
5. Se houver possibilidade de captura, esta obrigatria. Duas ou mais peas juntas, na
mesma diagonal, no podemser capturadas.
6. A pedra captura a dama e a dama captura a pedra. Pedra e dama tmo mesmo valor para
capturaremou serem capturadas.
7. A pedra e a dama podem capturar tanto para frente como para trs, uma ou mais peas.
8. Se num mesmo lance existir mais de uma possibilidade de capturar peas, obrigatrio
executar o lance que capture o maior nmero de peas.
3.1. REGRAS DO JOGO DE DAMAS 19
Figura 3.3: Captura de uma pea.
9. A pedra que, durante o lance de captura de vrias peas, apenas passe por qualquer casa
de coroao, sem a parar, no ser promovida dama.
Figura 3.4: Exemplo da regra nmero 9, onde a pea no promovida a dama.
10. Na execuo do lance de captura, permitido passar mais de uma vez pela mesma casa
vazia.
11. Na execuo do lance de captura, no permitido capturar duas vezes a mesma pea e
as peas capturadas no podem ser retiradas do tabuleiro antes de completar o lance
de captura
Figura 3.5: a) Captura de mltiplas peas onde uma mesma casa vazia visitada duas vezes.
b) Outra captura de mltiplas peas. Nota-se que no possvel capturar a pea novamente.
12. Aps 20 lances sucessivos de damas de cada jogador, sem captura ou deslocamento de
pedra, a partida declarada empatada. Almdisso, nais de: 2 damas contra 2 damas;
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 20
2 damas contra uma dama; 2 damas contra uma dama e uma pedra; uma dama contra
uma dama e uma dama contra uma dama e uma pedra, so declarados empatados
aps 5 lances de cada jogadors
3.2 Implementao de um jogo de damas por meio de Algo-
ritmos Genticos
Ojogo de damas criado para este trabalho foi implementado por meio da linguagemde pro-
gramao Java?, utilizando-se das regras de jogo, discutidas na seo ?? do presente cap-
tulo, e os conceitos da tcnica de algoritmo gentico discutidos no captulo ?? deste traba-
lho.
Nesta seo sero discutidas as principais caractersticas, ou mesmo classes e mtodos,
responsveis pela interface grca, o controle da animao do jogo, a transio, entre os es-
tados que identicam a vez de jogar do computador e a do usurio que interage com a apli-
cao, e nalmente aquela responsvel pelo comportamento e desempenho da inteligncia
articial da aplicao.
3.2.1 Ferramentas utilizadas para o desenvolvimento do projeto
Para desenvolver a aplicao proposta por este trabalho, foram utilizados o kit de desenvol-
vimento da linguagem Java, verso 1.7.0, distribudo pela Sun Microsystems?, em conjunto
com a ferramenta de programao Eclipse?, verso 3.7.0.
As imagens utilizadas na aplicao foramcriadas utilizandoa ferramenta PhotoshopCS3
Extended ?, verso 10.0.1, software proprietrio da Adobe Systems, e as animaes foram
feitas a partir dessas imagens e do uso da ferramenta Beneton Movie GIF?, verso 1.1.2, dis-
tribudo pela empresa Beneton.
Foi utilizado o sistema de gerenciamento de banco de dados MySQL ?, de modo a permi-
tir o armazenamento das jogadas em um banco de dados.
Links para realizar o download desses programas, para aqueles que isto permitido,
apresentam-se disponveis na bibliograa deste trabalho.
3.2.2 Da interface e da animao da aplicao
Ao iniciar a aplicao, requisitado o nome do usurio. Em seguida, questionado se o
mesmo deseja realizar ou no o lance inicial. Emcaso armativo, lhe so atribudas s peas
brancas; caso contrrio, ele recebe as peas pretas. Uma terceira opo, denominada "Sair",
permite ao usurio encerrar a aplicao. As caixas de dilogo descritas acima so exibidas
na Figura ??.
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 21
Figura 3.6: a) Escolha do nome do usurio. b) Tela de escolha do lance inicial.
Deste momento em diante, o usurio torna-se participante do jogo. Sua interao coma
aplicao ocorre por meio de uma interface, mostrada na Figura ??. Na parte central direita
apresentado o histrico de movimentos da partida. No canto superior esquerdo mostrado
o nmero atual de peas dos jogadores, que pode estar entre 0 e 12 para cada um, e uma
miniatura de suas respectivas pedras.
No canto superior direito mostrado de quem a jogada atua, e um boto para reini-
ciar a aplicao. Para o caso da jogada pertencer ao usurio ser exibida a mensagem "SUA
VEZ!"e para a jogada pertencente ao computador a mensagem"AGUARDE..."ser exibida ao
usurio no lugar da mensagem anterior. Ao m da partida exibida a mensagem "FIM DE
JOGO", seguida por uma mensagem indicando o resultado da partida. Caso seja vitria do
usurio, exibido "VOC VENCEU!!". Caso seja vitria do computador, "VOC PERDEU!!".
Emltimo caso, ser exibido "EMPATE!!", indicando que no houve vencedor. Nesta rea da
tela tambmso exibidos o nmero de peas atual do usurio e do computador, variando de
12 a zero para cada um,
O lado direito inferior contm uma rea de texto que exibe um histrico do jogo, mos-
trando a disposio do tabuleiro logo aps o usurio ou o computador teremrealizado uma
jogada. O histrico exibido como uma sequncia de caracteres dispostos no formato do
tabuleiro, oito linhas por oito colunas. Os caracteres utilizados pra dispor o tabuleiro do
histrico correspondem queles utilizados pelo algoritmo gentico da aplicao, sendo que
cada tipo de caractere corresponde a um elemento de jogo. Este alfabeto ter o signicado
de seus caracteres explicado na seo ?? deste captulo.
Existe, ainda, ummenu superior, que possui duas opes: "Mudar usurio", que permite
a troca de usurio e reinicia a partida, e "Mudar nvel", que permite alterar o nvel de busca
da rvore de solues, a ser descrita em sees posteriores.
A interao do usurio com a aplicao se d por meio desta interface, onde possvel
arrastar as peas atribudas a ele do local de origem ao destino desejado. Independente de
estar utilizando peas brancas ou pretas para jogar, as peas do usurio so sempre inici-
alizadas na parte inferior do tabuleiro, procurando manter a sensao de proximidade das
mesmas em relao a ele. Essa caracterstica benecia a simulao, pois ajuda a aumentar a
sensao de se estar realmente disputando uma partida do jogo.
Quando houver a possibilidade de captura de pea adversria, ser permitido apenas
mover a pea ou peas que possam realizar tal captura, de acordo com as regras descritas
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 22
Figura 3.7: Interface grca da aplicao durante uma partida.
em ??. As peas da aplicao so mostradas na Figura ??. Para o caso da captura de vrias
peas adversrias em uma nica jogada, tanto para o computador como para o jogador, as
peas so mantidas no tabuleiro at a ltima captura ser realizada. Entretanto estas peas
sero exibidas em preto-e-branco no tabuleiro, de modo a indicar que foram capturadas. A
captura da ltima pea da sequncia resulta na imediata remoo de todas aquelas captura-
das.
Figura 3.8: Aparncia das peas da aplicao.
Ainda utilizando-se das regras descritas em ??, o lance realizado pelo usurio permitido
ou no. Caso no seja permitido, o jogador e informado sobre a impossibilidade de tal lance
atravs de uma caixa de texto exibindo a informao em questo, mostrada na Figura ??. A
interface do jogo tambm garante que no seja permitido mover quaisquer peas que no
as suas.
Figura 3.9: Alerta ao usurio sobre jogada no permitida.
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 23
3.2.3 Da rvore de jogadas
Esta aplicao foi desenvolvida de modo que a formar uma rvore de jogo. Uma rvore de
jogo, ou game tree, um grafo direcionado cujos ns consistem em posies do jogo e as
arestas so movimentos. Cada n no-terminal associado a um jogador, cujo movimento
gerar um n de posse de outro jogador ?. Uma rvore de jogo completa aquela cuja qual
comea na posio inicial e possui todos os movimentos possveis a partir de cada posio.
Nesta aplicao, cada n da rvore possui informaes acerca do tabuleiro atual, da
quantidade de peas, e sua avaliao, utilizada pelo algoritmo gentico na escolha da pr-
xima jogada. Os ns tambm possuem uma ag indicando se a jogada pertencente a ele
do jogador ou computador. Conforme o jogo progride, a rvore expande-se. Mais acerca da
implementao da rvore ser descrito em sees posteriores.
3.2.4 Do controle da vez atual e do encerramento da partida
O controle sobre quem a vez de jogar feito pela mquina de estados nitos da aplicao,
onde a vez de cada participante do jogo pode ser denida como um estado da aplicao.
Devido ao modelo tradicional no trabalhar com aes, sendo um modelo de aceitao ou
reconhecimento de palavras, a FSM da aplicao est de acordo com os Modelos de Moore
e Mealy. Ela segue o modelo de Moore, onde a sada depende somente do estado atual, e
denida pela classe FiniteStateMachine da aplicao desenvolvida, a qual corresponde nos
fontes da aplicao ao arquivo de mesmo nome e extenso .java.
A implementao de uma estrutura prpria ao controle das jogadas mostrou-se necess-
ria, uma vez que determinadas caractersticas da qualidade e quantidade das peas do usu-
rio e do computador, em conjunto com a quantidade de lances realizados, deveriam ser ve-
ricadas a mde dar ou no continuidade ao jogo. A mquina de estados desenvolvida para
a aplicao segue os conceitos exibidos na seo ?? deste trabalho e possui trs estados de
jogo que podemser denidos como VEZ_JOGADOR, VEZ_COMPUTADOR e FIM_DE_JOGO.
Da funo de transio
Antes de iniciarmos uma discussoacerca destes estados, julga-se necessrio falar umpouco
sobre o mecanismo que permite a transio entre eles. A funo de transio entre os esta-
dos desta aplicao pode ser considerada como o ato de validar ou no uma jogada, em
conjunto com o grupo de mtodos denidos na classe FiniteStateMachine responsveis por
identicar o nal da partida.
A validao de umjogada responsabilidade das classes denidas emJogada.java e Mo-
vimentacao.java, que constituem o conjunto de mtodos responsveis por validar o movi-
mento de uma pea para uma dada posio, alm de identicar e armazenar informaes
sobre peas em posio de realizar captura. Informao essa cuja simples existncia su-
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 24
ciente para assegurar que o prximo movimento do jogador atual, quer seja computador ou
usurio, tenha que tomar providncias para satisfaz-la.
A classe Jogada uma superclasse da aplicao herdada pela classe Jogador, que con-
trola as jogadas do usurio. Movimentacao.java, por outro lado, utilizada pela classe Al-
goritmoGenetico para validar as jogadas do computador. Jogador e AlgoritmoGenetico so
encontradas em arquivos de extenso .java de mesmo nome.
Encerrado o movimento, o prximo passo vericar se a partida deve ou no ser encer-
rada. O estado corrente chama ento a funo mDeJogo. Este mtodo, do tipo boolean,
pertencente classe FiniteStateMachine verica inicialmente se, de acordo com as regras
expostas na seo ??, houve vitria do jogador ou do computador. Caso no identique
vitria este mtodo chama o mtodo isEmpate e devolve um resultado com o mesmo valor
do fornecido por este mtodo, o qual tambm do tipo boolean e verica a existncia de
empate de acordo com o conjunto de regras j citado.
Pode-se, com base no que foi exibido aqui, observar que, inicialmente, a funo de tran-
sio da mquina de estados nito da aplicao trabalha coma simples validao da jogada,
onde a jogada invlida impossibilitaa mudana de estado forando o jogo permanncia no
estado atual. Em seguida observa se houve ou no condio que satisfaa o encerramento
do jogo. Em caso armativo, ocorre a transio para o estado FIM_DE_JOGO, que atua de
forma a encerrar a partida. Caso contrrio, ocorrer ou no mudana de estado de acordo
com o que ser observado em relao ao comportamento de cada estado.
Os estados do jogo
As aes tomadas pelos estados do jogo so denidas pelo mtodo update, pertencente
classe da mquina de estados, o qual contm os trs estados da aplicao. interessante
destacar que o mtodo no dene diretamente os comportamentos de cada estado, sendo
responsvel na verdade apenas por gerenciar quando e como cada uma destas aes so
tomadas. O conjunto das aes de cada estado implementado em suas classes chamadas
AcaoComputador e AcaoJogador. Estas classes fazem acesso direto respectivamente as clas-
ses AlgoritmoGenetico e Jogador, e a partir do uso de seus mtodos montamos seus prprios
de forma a criar os conjuntos de aes de cada estado. Explicado isso, vejamos agora como
cada estado atua.
Durante uma partida, a chamada do mtodo update da mquina de estados pode se dar
de trs formas. Continuamente a mquina de estados verica o valor da varivel VEZ que,
dentre outras funes, serve de ag para determinar se a jogada atual pertence ou no ao
computador. Quando identicado que a varivel possui um valor que corresponde vez do
computador, o mtodo update chamado e as aes referentes jogada do computador so
realizadas.
A segunda forma ocorre sempre que o usurio, durante a sua vez, interage com a inter-
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 25
face de jogo pela ao de arrastar uma pea de uma casa a outra. Tal interao aciona um
mtodo da classe da mquina de estados responsvel por avaliar a jogada. Isto feito por
meio de acesso a um mtodo de AcaoJogador que, atravs de chamada a mtodos da classe
Jogador e aqueles que ela herda de Jogada, capaz de vericar se a entrada que a aplica-
o est recebendo vlida ou no. Caso seja determinada a validade da jogada, o mtodo
update chamado para desempenhar as aes referentes vez do jogador.
A ltima forma que se d a chamada do mtodo sempre que, ao nal das aes dos
estados do computador ou do jogador, for determinadopor avaliao feita pelo mtodo m-
DeJogo que a partida deve ser encerrada. Isso gera uma chamada de update especicando
que o estado a ser analisado agora o do encerramento da partida.
Oestado do jogador
Dentro do mtodo update, o estado atribudo ao usurio, VEZ_JOGADOR, quando selecio-
nado, informa a superclasse Jogada que as avaliaes que ela esta prestes a realizar dizem
respeito s peas controladas pelo usurio e em seguida realiza o movimento. Logo aps
ele promove a dama a pea do jogador que tenha alcanado o outro lado do tabuleiro, caso
exista, e informa ao adversrio a nova disposio do tabuleiro.
O estado ainda realiza uma vericao a m de determinar se o usurio encerrou sua
ao. Isso no ocorrer apenas para o caso de se estar realizando uma captura emsequncia
que ainda apresente adversrios a serem capturados. O valor dessa vericao ca arma-
zenado em uma varivel chamada updated. Em seguida realizada a vericao que de-
termina se houve ou no condio que satisfaa o m da partida, por meio do j discutido
mtodo mDeJogo que recebe, como um dos parmetros, o valor de updated. Este valor lhe
informa se determinadas vericaes devem ser realizadas ou no. A avaliao desse par-
metro presta-se a evitar que certos valores sejammodicados e prejudiquema avaliao das
regras do jogo.
Encerrada a avaliao de mDeJogo, se a varivel updated possui valor verdadeiro, e caso
tenha ocorrido captura, as conguraes do tabuleiro so salvas no banco de dados. Por
congurao, denimos o conjunto de peas alteradas durante a captura. Esse conjunto
representado pelo par ndice-caractere, denominamo Posio, tal qual se apresenta no ta-
buleiro anterior a modicao. Essas conguraes so utilizadas pelo algoritmo gentico
durante a avaliao de jogadas. Uma congurao possui vrias posies, e uma posio
pode estar associada a vrias conguraes. As classes Congurao e Posio podem ser
encontradas nos Cdigos ?? e ??, respectivamente.
Ainda no caso de update ter valor verdadeiro, realizada uma limpeza no tabuleiro,
substituindo qualquer caractere que indique uma pea capturada por aquele de um es-
pao vazio e o valor da varivel VEZ mudado para informar que chegou o momento do
computador realizar seus movimentos. O estado ainda incrementa o valor da varivel LAN-
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 26
CES_REALIZADOS, que representa o nmero total de movimentos efetuados at o momento.
O valor falso para updated caracteriza que est ocorrendo uma captura de vrios adver-
srios que ainda no chegou ao m, e o usurio tem permisso de realizar um novo lance,
utilizando apenas a ltima pea movida, de forma a continuar a jogada. interessante des-
tacar que, ainda que este estado faa a vericao de m de jogo para ambos os valores de
updated, para o valor falso nunca ocorrer mde jogo, pois a jogada ainda no foi concluda.
Entretanto necessrio que essa vericao seja feita antes da vericao do valor de upda-
ted, visto que, do contrrio, poderia ocorrer a transferncia de vez ao computador, quando
na verdade a partida deveria ser encerrada.
Oestado do computador
O estado atribudo ao computador, VEZ_COMPUTADOR, possui algumas particularidades
comrelao ao anterior. Ele inicia comunicando a superclasse Jogada, que as avaliaes que
ela esta prestes a realizar dizemrespeito s peas controladas pelo computador. Emseguida,
ativa a ao do computador responsvel por iniciar uma nova jogada, a ao getProximaJo-
gada denida emAcaoComputador. Este mtodo retorna umn da rvore de jogo, cujo qual
possui a prxima jogada, gerada pelo algoritmo gentico. Este n recebido j possui a movi-
mentao da pea e as possveis capturas feitas.
Terminada esta ao vericada a possibilidade de promoo de uma pea para dama,
o nmero de lances total incrementado e caracteres representando peas capturadas que
existamnaqueles da congurao atual do tabuleiro so substitudos por espaos vazios. Se
houver existido captura, as conguraes do tabuleiro anteriores ao atual so salvas. Em
seguida, a varivel VEZ tem seu valor mudado para aquele que representa a vez do jogador,
e se verica se existe pea do jogador em posio de realizar captura. Essa medida deve ser
tomada de forma que ajustes necessrios a tal situao sejamidenticados antes de realizar-
se a animao do tabuleiro que reita a jogada que acaba de ser realizada pelo computador,
assegurando que caso tal situao seja verdadeira a animao correspondente a esse cen-
rio e suas caractersticas sejam devidamente representadas. A falta dessa vericao nesse
ponto acarretaria que o usurio, ao receber a vez, pudesse mover qualquer pea como bem
entendesse, mesmo que devesse estar realizando uma captura.
Finalmente realizada a vericao que determina se o jogo deve ser encerrado, tendo
no lugar do parmetro updated, utilizado no estado do jogador, o valor verdadeiro, j que ao
alcanar este ponto a jogada do computador estar sempre concluda.
Oencerramento da partida
O ltimo estado da mquina de estados, FIM_DE_JOGO, meramente substitui do tabuleiro
de jogo quaisquer peas capturadas que possa haver por espaos vazios. Em seguida rea-
nima o tabuleiro, que por sua vez redene as informaes exibidas na parte superior da tela,
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 27
de forma a reetir corretamente o nmero de peas dos participantes e a situao nal da
partida, isto vitria, empate ou derrota. As informaes referentes partida, como nmero
nal de peas e damas de cada participante, resultado da partida, durao, entre outras, so
salvas a m de fornecerem base para a anlise da habilidade do jogador em questo, estas
conguraes aparecem na forma de uma classe chamada AtributoPartida, cujas proprie-
dades encontram-se no Cdigo ??.
Finalmente, encerrada a execuo da mquina de estados, impedindoque computador
ou jogador venhama realizar quaisquer jogadas posteriores.
Os cdigos dos mtodos update, mDeJogo e isEmpate podem ser encontrados, respec-
tivamente, nos Cdigos ??, ?? e ??.
3.2.5 Da anlise da habilidade e da escolha de diculdade
Como a presente abordagem prope-se a auxiliar o aprendizado do jogador, no caso espe-
cco do jogo de damas, julgou-se imperativo criar um mtodo de anlise das habilidades
atuais do jogador. Isso tornou necessrio a quanticao de tais habilidades. Foi denido
que o nvel de habilidade seria um valor real com mnimo em 0.0, para um jogador sem ne-
nhumconhecimento, e mximo em 100.0, para um jogador ideal.
A vericao da habilidade do jogador se d atravs da classe GerenciadorDiculdade,
umSingleton
1
que calcula e armazena o nvel de diculdade atual.
Devido ao fato de o aprendizado ocorrer com o decorrer de mais de uma partida, o cl-
culo da diculdade efetuado antes de n partidas, e no a cada uma delas. Esse nmero n foi
arbitrariamente denido como 3, com base em testes feitos com o objetivo de descobrir um
melhor desempenho. Assim, antes da chamada do mtodo feita uma vericao atravs
do mtodo precisaCalcular, que retorna um valor do tipo boolean. Esta vericao subtrai
o valor de um contador e, caso este contador seja igual ou menor a zero, reinicia o contador
e retorna verdadeiro, indicando que existe a necessidade de recalcular a diculdade. Caso
contrrio, retorna falso.
Caso o retorno seja positivo, feita uma chamada ao mtodo que efetura o clculo, cha-
mado calculaDiculdade. Este retorna um valor double e tem como parmetros um objeto
do tipo Usurio, cujas propriedades encontram-se no Cdigo ??. Esta classe possui, dentre
outras informaes, o conjunto de objetos do tipo Congurao coletados durantes as par-
tidas deste jogador, e um conjunto de objetos do tipo AtributosPartida, tais quais descritos
na seo ??.
Em posse deste usurio, calculaDiculdade, que pode ser encontrado em ??, dene,
inicialmente, pesos para cada objeto da coleo de AtributosPartida. Essa denio ocorre
como mostrada no Algoritmo ??.
1
Singleton um padro de projeto de software que garante a existncia de apenas uma instncia de uma
classe, mantendo um ponto global de acesso ao seu objeto.
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 28
Algoritmo 2 Denio dos pesos para os atributos.
1: begin procedimento
2: Inicializa vetor fatores
3: i tamanho da coleo de atributos
4: fator 100.
5: while i >0 do
6: i i 1
7: fator fator 2
8: fatores[i ] fator
9: if i ==1 then
10: fatores[0] fator
11: end if
12: end while
13: end procedimento
Para exemplicar essa abordagem, suponhamos que tenhamos cinco objetos Atributo-
Partida: A, B, C e D, de partidas que ocorreram nessa respectiva ordem. Sendo assim, a
coleo seria composta por A,B,C,D, e o vetor fatores possuiria tamanho 4, semelhante ao
tamanho da coleo.
Na primeira iterao, com i = 3 e fator = 100, teramos fator = 1002 = 50, e fatores[4],
indicando D, receberia fator =50.
Na segunda iterao, com i = 2 e fator = 50, teramos fator = 50 2 = 25, e fatores[3],
indicando E, receberia fator =25.
A prxima iterao resultaria em fator= 25 2 = 12.5, e fatores[1] = 12, 5. Neste ponto,
a varivel i seria igual a 1, o que resultaria em fatores[0] = 12, 5. Esses valores sero, ento,
utilizados nas anlises posteriores, de modo a garantir que as partidas mais recentes sejam
mais relevantes para o clculo que as antigas.
Foi denido que cada anlise poderia resultar em um valor de no mnimo 0.0 e no m-
ximo 20.0. Isso se deve ao fato de que foram atribudos pesos a tais anlises, onde, multi-
plicadas por seus respectivos pesos e somadas, elas resultariam em um mximo de 100.00
pontos. Dito isso, feita uma soma da anlise de quatro fatores:
Resultado de todas as partidas do usurio em questo, com peso multiplicador 2.0;
Nmero de damas do usurio e do computador ao m da partida, com peso multipli-
cador 1.5;
Nmero de pedras do usurio e do computador ao m da partida, com peso multipli-
cador 0.5;
Ovalor de lances emrelao ao resultado de cada partida, compeso multiplicador 1.0.
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 29
Da anlise dos resultados das partidas
Esta anlise pode retornar um valor entre um mnimo 0.0 e um mximo 40.0, devido ao seu
peso multiplicador de 2.0, e leva emconta o resultado nal das partidas jogadas pelousurio,
assumindo que quanto mais vitrias, melhor este jogador seria. Tambm levado em conta
a ordem de tais resultados, dando maior importncia aos resultados mais recentes, atravs
do pesos atribudos no Algoritmo ??. O clculo dado pela Equao ??:
f (u) =
_
n

i =0
R f at or es[i ]
MAX +MI N
_

_
MAX_POR_ANALI SE
MAX +MI N
_
(MULT I PLIC ADOR), (3.1)
onde u o usurio; n o nmero de itens AtributosPartida no conjunto de atributos
do usurio u; MAX o valor mximo, no caso atual equivalente a 100.0; MI N o valor
mnimo, no caso atual equivalente a 0.0; MAX_POR_ANALI SE o maior valor que cada
anlise pode resultar, sem o multiplicador, com valor atual de 20.0; MULT I PLIC ADOR o
multiplicador da anlise, com valor de 2.0, e R denido como se segue:
R(i ) =
_

_
MAX se o usurio venceu a partida i ;
MI N se o usurio perdeu a partida i ;
MAX+MI N
2
se houve empate na partida i .
3.2.6 Da anlise da quantidade de damas
Esta anlise pode retornar um valor entre um mnimo 0.0 e um mximo 30.0, devido ao seu
peso multiplicador de 1.5. Ela analisa a quantidade de damas aliadas e inimigas ao nal da
partida. Novamente, levado emconta a ordemdas partidas. Oclculo dado pela Equao
??:
f (u) =
_
g(u)
_

_
MAX_POR_ANALI SE
MAX+MI N
_
(MULT I PLIC ADOR), (3.2)
onde u o usurio; n o nmero de itens AtributosPartida no conjunto de atributos
do usurio u; MAX o valor mximo, no caso atual equivalente a 100.0; MI N o valor
mnimo, no caso atual equivalente a 0.0; MAX_POR_ANALI SE o maior valor que cada
anlise pode resultar, sem o multiplicador, com valor atual de 20.0; MULT I PLIC ADOR o
multiplicador da anlise, com valor de 1.5; e g(u) denida pela Equao ??.
g(u) =
_

n
i =0
V ALOR_ALf ator es[i ]
MAX+MI N
_
+
_

n
i =0
V ALOR_I Nf ator es[i ]
MAX+MI N
_
, (3.3)
onde, dados X e Y tal que X a quantidade de damas aliadas, e Y a quantidade de damas
inimigas, denimos V ALOR_AL e V ALOR_I N como se segue:
3.2. IMPLEMENTAODE UM JOGO DE DAMAS POR MEIODE ALGORITMOS
GENTICOS 30
V ALOR_AL(i ) =
_

_
0 se 0 X <2;
25 se 2 X <4;
50 se 4 X <7;
75 se 7 X <10;
100 se 10 X 12.
V ALOR_I N(i ) =
_

_
100 se 0 Y <2;
75 se 2 Y <4;
50 se 4 Y <7;
25 se 7 Y <10;
0 se 10 Y 12.
3.2.7 Do algoritmo gentico da aplicao e sua implementao
Captulo 4
Resultados Obtidos
31
Captulo 5
Concluso
5.0.8 Trabalhos Futuros
32
Apndice A
Cdigo do AGCheckers
Neste apndice apresentamos alguns trechos de cdigo do AGCheckers com o objetivo de
auxiliar a compreenso da implementao e dos algoritmos, portanto, ressaltamos que mui-
tas linhas de cdigo no relacionado diretamente como propsitodeste trabalho foramomi-
tidas.
Cdigo A.1: Classe AtributosPartida
1 public cl ass At ri but osPart i da {
2 private st at i c f i nal long serialVersionUID = 1L;
3
4 private Int eger i d ;
5 private St ri ng data ;
6 private i nt resul tado ;
7 private i nt numPecasAliadas ;
8 private i nt numDamasAliadas;
9 private i nt numPecasInimigas;
10 private i nt numDamasInimigas ;
11 private long duracao ;
12 private Usuario usuario ;
13 private i nt quantLances ;
14 }
Cdigo A.2: Mtodo update da classe FiniteStateMachine
1 public void update( i nt origem, i nt destino , i nt estado) {
2 boolean updated = true ;
3 switch ( estado) {
4 case FiniteStateMachine . VEZ_JOGADOR:
5 Jogada . setJogador ( Jogada .JOGADOR) ;
6 i f ( t abul ei roAuxi l i arJogador == null ) {
33
APNDICE 34
7 t abul ei roAuxi l i arJogador = new Individuo(
noAtual . getEstado ( ) . getTabul ei ro ( ) . clone ( ) ,
noAtual . getEstado ( ) . getNumPecasJogador( ) ,
noAtual . getEstado ( ) . getNumPecasComputador( ) ,
Jogada .JOGADOR) ;
8 t abul ei roAuxi l i arJogador .
set Posi coesIntermedi ari as (new ArrayLi st <
Integer >( ) ) ;
9 t abul ei roAuxi l i arJogador . setPecaMudada( origem) ;
10 t abul ei roAuxi l i arJogador .
getPosi coesIntermedi ari as ( ) . add( origem) ;
11 }
12 t abul ei roAuxi l i arJogador . getPosi coesIntermedi ari as ( ) .
add( destino ) ;
13
14 char ultima_peca_jogada = t abul ei roAuxi l i arJ ogador .
getTabul ei ro ( ) [ origem] ;
15 thi s . aJogador . doAcaoMovimento( origem, destino ,
ultima_peca_jogada , t abul ei roAuxi l i arJ ogador ) ;
16
17 updated = thi s . aJogador . completouAcao(
t abul ei roAuxi l i arJogador ) ;
18
19 i f ( updated) {
20 thi s . aJogador . doAcaoPromocao( destino ,
t abul ei roAuxi l i arJogador . getTabul ei ro ( ) ) ;
21 }
22
23 / / VERIFICA SE O ADVERSARIO AINDA PODE REALIZAR JOGADAS
24 i f ( thi s . fimDeJogo( updated , FiniteStateMachine .
VEZ_COMPUTADOR) ) {
25 setEstado (FIM_DE_JOGO) ;
26
27 t abul ei roAuxi l i arJogador . setTabul ei ro ( thi s .
aJogador . limparCapturas(
t abul ei roAuxi l i arJogador . getTabul ei ro ( ) .
clone ( ) ) ) ;
28 i f ( t abul ei roAuxi l i arJ ogador . getComeu( ) ) {
APNDICE 35
29 ArqConfiguracao . salvaConfiguracao(
t abul ei roAuxi l i arJ ogador .
getTabul ei ro ( ) , Jogador .JOGADOR) ;
30 }
31
32
33 noAtual = getNovoNo( noAtual ,
t abul ei roAuxi l i arJogador , destino ) ;
34
35 t abul ei roAuxi l i arJogador = null ;
36
37 aComputador. showAnimacao ( ) ;
38 thi s . update( origem, destino , FiniteStateMachine
. FIM_DE_JOGO) ;
39 } el se i f ( updated) {
40 t abul ei roAuxi l i arJogador . setTabul ei ro ( thi s .
aJogador . limparCapturas(
t abul ei roAuxi l i arJogador . getTabul ei ro ( ) .
clone ( ) ) ) ;
41
42 i f ( t abul ei roAuxi l i arJ ogador . getComeu( ) ) {
43 ArqConfiguracao . salvaConfiguracao(
t abul ei roAuxi l i arJ ogador .
getTabul ei ro ( ) , Jogador .JOGADOR) ;
44 }
45
46 noAtual = getNovoNo( noAtual ,
t abul ei roAuxi l i arJogador , destino ) ;
47 t abul ei roAuxi l i arJogador = null ;
48 aComputador. showAnimacao ( ) ;
49 FiniteStateMachine . setEstado ( FiniteStateMachine
.VEZ_COMPUTADOR) ;
50 LANCES_REALIZADOS++;
51 }
52 break;
53 / /

54 case FiniteStateMachine .VEZ_COMPUTADOR:


APNDICE 36
55 long t1 = System. currentTi meMi l l is ( ) ;
56
57 / / Realiza o movimento do computador
58 Jogada . setJogador ( Jogador .COMPUTADOR) ;
59 noAtual = thi s . aComputador. getProximaJogada( noAtual ) ;
60
61 thi s . aComputador. promoveDama( noAtual . getEstado ( ) .
getPosi coesIntermedi ari as ( ) . get ( noAtual . getEstado ( ) .
getPosi coesIntermedi ari as ( ) . si ze ( ) 1) , noAtual .
getEstado ( ) . getTabul ei ro ( ) ) ;
62
63 aComputador. showAnimacao ( ) ;
64
65 LANCES_REALIZADOS++;
66
67 i f ( noAtual . getEstado ( ) . getComeu( ) ) {
68 ArqConfiguracao . salvaConfiguracao( noAtual .
getEstado ( ) . getTabul ei ro ( ) , Jogador .
COMPUTADOR) ;
69 }
70
71 long t2 = System. currentTi meMi l l is ( ) ;
72 loggerTempo. soma( t2t1 ) ;
73 FiniteStateMachine . setEstado ( FiniteStateMachine .
VEZ_JOGADOR) ;
74 Jogada . setJogador ( Jogada .JOGADOR) ;
75 thi s . aJogador . doAcaoInicioCaptura ( noAtual . getEstado ( ) .
getTabul ei ro ( ) ) ;
76
77 thi s . aguardar (500) ;
78 aComputador. showAnimacao ( ) ;
79 / / VERIFICA SE O ADVERSARIO AINDA PODE REALIZAR JOGADAS
80 i f ( thi s . fimDeJogo( true , FiniteStateMachine . VEZ_JOGADOR
) ) {
81 setEstado (FIM_DE_JOGO) ;
82 thi s . update( origem, destino , FiniteStateMachine
. FIM_DE_JOGO) ;
83 }
84 break;
APNDICE 37
85 / /

86 case FiniteStateMachine . FIM_DE_JOGO:


87 FiniteStateMachine . setEstado ( FiniteStateMachine .
FIM_DE_JOGO) ;
88
89 salvaConfiguracoes ( ) ;
90 t abul ei roAuxi l i arJogador = null ;
91 thi s . aJogador . limparCapturas( noAtual . getEstado ( ) .
getTabul ei ro ( ) ) ;
92 aComputador. showAnimacao ( ) ;
93 fsm. stop ( ) ;
94 break;
95 }
96 }
Cdigo A.3: Mtodo mDeJogo da classe FiniteStateMachine
1 public boolean fimDeJogo( boolean updated , i nt owner ) {
2 i nt jogadorAtual = Jogada . getJOGADOR_ATUAL( ) ;
3 Individuo aux ;
4 i f ( t abul ei roAuxi l i arJogador == null ) {
5 aux = noAtual . getEstado ( ) ;
6 } el se {
7 aux = t abul ei roAuxi l i arJ ogador ;
8 }
9
10 i f ( aux . getNumPecasJogador( ) == 0) {
11 FiniteStateMachine . MSG_FIM_DE_JOGO = thi s .
getMsgVitoriaComputador ( ) ;
12 ArqConfiguracao . getData ( ) . setResul tado( "Computador" ) ;
13 ArqConfiguracao . gravarLog ( ) ;
14 return true ;
15 } el se i f ( aux . getNumPecasComputador( ) == 0) {
16 FiniteStateMachine . MSG_FIM_DE_JOGO = thi s .
getMsgVitoriaJogador ( ) ;
17 ArqConfiguracao . getData ( ) . setResul tado( "Usuario" ) ;
18 ArqConfiguracao . gravarLog ( ) ;
19 return true ;
APNDICE 38
20 }
21 i f ( owner == VEZ_COMPUTADOR) {
22 / / se pc nao puder mover jogador vence
23 Jogada . setJogador ( Jogada .COMPUTADOR) ;
24 i f ( updated && ! aComputador. i sPossi vel Mover ( aux .
getTabul ei ro ( ) ) ) {
25 FiniteStateMachine . MSG_FIM_DE_JOGO = thi s .
getMsgVitoriaJogador ( ) ;
26 ArqConfiguracao . getData ( ) . setResul tado( "Usuario
" ) ;
27 ArqConfiguracao . gravarLog ( ) ;
28 return true ;
29 }
30 i f ( updated) {
31 / / devese aval i ar a ultima peca jogada pelo
adversario .
32 char p = aJogador . getULTIMA_PECA_JOGADA( ) ;
33
34 i f (p ! = Pecas .DAMA_JOGADOR | | aux . getComeu( )
| | aJogador . isHouveCaptura( ) ) {
35 FiniteStateMachine .
LANCES_DE_DAMAS_SEGUIDOS = 0;
36 } el se {
37 FiniteStateMachine .
LANCES_DE_DAMAS_SEGUIDOS++;
38 }
39 }
40 } el se i f ( owner == VEZ_JOGADOR) {
41 Jogada . setJogador ( Jogador .JOGADOR) ;
42 / / se jogador nao pode mover pc vence
43 i f ( updated && ! aJogador . i sPossi vel Mover ( aux .
getTabul ei ro ( ) ) ) {
44 FiniteStateMachine . MSG_FIM_DE_JOGO = thi s .
getMsgVitoriaComputador ( ) ;
45 ArqConfiguracao . getData ( ) . setResul tado( "
Computador" ) ;
46 ArqConfiguracao . gravarLog ( ) ;
47 return true ;
48 }
APNDICE 39
49 i f ( updated) {
50 / / devese aval i ar a ultima peca jogada pelo
adversario .
51 char p = aComputador. getULTIMA_PECA_JOGADA( ) ;
52
53 i f (p ! = Pecas .DAMA_COMPUTADOR | | aux . getComeu
( ) ) {
54 FiniteStateMachine .
LANCES_DE_DAMAS_SEGUIDOS = 0;
55 } el se {
56 FiniteStateMachine .
LANCES_DE_DAMAS_SEGUIDOS++;
57 }
58
59 }
60 }
61
62 i f ( thi s . isEmpate( aux , owner ) ) {
63 ArqConfiguracao . getData ( ) . setResul tado( "Empate" ) ;
64 return true ;
65 }
66
67 Jogada . setJogador ( jogadorAtual ) ;
68 return f al se ;
69 }
Cdigo A.4: Mtodo isEmpate da classe FiniteStateMachine
1 public boolean isEmpate( Individuo individuo , i nt owner) {
2 i f ( FiniteStateMachine . LANCES_DE_DAMAS_SEGUIDOS == 20) {
3 FiniteStateMachine . MSG_FIM_DE_JOGO = thi s . getMsgEmpate
( ) ;
4 return true ;
5 }
6
7 i nt damasJogador = aJogador . getNumeroDamasJogador( individuo .
getTabul ei ro ( ) ) ;
8 i nt damasComputador = aComputador. getNumeroDamasComputador(
individuo . getTabul ei ro ( ) ) ;
9
APNDICE 40
10 i f ( individuo . getNumPecasJogador( ) <= 2 && individuo .
getNumPecasComputador( ) <= 2) {
11 i f ( damasJogador == 1 | | damasJogador == 2) {
12 i f (damasComputador > 0 && damasComputador <=
2) {
13 i f (CONTAR_LANCES_FIM_DE_JOGO) {
14 LANCES_FIM_DE_JOGO++;
15 }
16 CONTAR_LANCES_FIM_DE_JOGO = true ;
17 }
18 }
19
20 }
21
22 boolean r esul t = (LANCES_FIM_DE_JOGO == 5 ? true : f al se ) ;
23
24 i f ( r esul t ) {
25 FiniteStateMachine . MSG_FIM_DE_JOGO = thi s . getMsgEmpate
( ) ;
26 }
27
28 return r esul t ;
29 }
Cdigo A.5: Classe Congurao
1 public cl ass Configuracao implements Ser i al i zabl e {
2 public st at i c f i nal i nt DERROTA = 0;
3 public st at i c f i nal i nt VITORIA = 1;
4 public st at i c f i nal i nt EMPATE = 2;
5
6 private st at i c f i nal long serialVersionUID = 1L;
7 private i nt resul tado ;
8 private Li st <Usuario> usuarios ;
9 private Li st <Posicao> posicoes ;
10 private Int eger i d ;
11 }
Cdigo A.6: Classe Posio
APNDICE 41
1 public cl ass Posicao {
2 private st at i c f i nal long serialVersionUID = 1L;
3 private i nt posicao ;
4 private char peca ;
5 private Li st <Configuracao> configuracoes ;
6 private Int eger i d ;
7 }
Cdigo A.7: Classe Usurio
1 public cl ass Usuario implements Ser i al i zabl e {
2
3 private st at i c f i nal long serialVersionUID = 1L;
4
5 private Int eger i d ;
6 private St ri ng nome;
7 private Int eger vi t or i as ;
8 private Int eger derrotas ;
9 private Li st <Configuracao> configuracoes ;
10 private Li st <At ri but osParti da> at ri but osPart i das ;
11 private double cl as s i f i cacao = 1;
12 }

Das könnte Ihnen auch gefallen