Centro Universitário Positivo - UnicenP Núcleo de Ciências Exatas e Tecnológicas – NCET
Engenharia da Computação Christiano Grillo Justus
Jogo de Damas Embarcado Multinível
Curitiba 2006
Centro Universitário Positivo - UnicenP Núcleo de Ciências Exatas e Tecnológicas – NCET
Engenharia da Computação Christiano Grillo Justus
Jogo de Damas Embarcado Multinível
Monografia apresentada à disciplina de Projeto Final, como requisito parcial à conclusão do Curso de Engenharia da Computação. Orientador: Profª. Adriana Thomé
Curitiba 2006
Termo de Aprovação
Christiano Grillo Justus
Jogo de Damas Embarcado Multinível
Monografia aprovada como requisito parcial à conclusão do
curso de Engenharia da Computação do Centro Universitário
Positivo, pela seguinte banca examinadora:
Professora Adriana Cursino Thomé – Orientadora
Professor Nestor Cortez Saavedra Filho – Membro
Professor Alessandro Zimmer – Membro
Curitiba, 9 de fevereiro de 2007
Agradecimentos
Agradeço aos meus pais, André Justus Neto e Licia Carolina B. Grillo
Justus, pela oportunidade que me ofereceram de cursar uma faculdade, no
auxilio na construção do projeto e pela paciência por agüentarem a constante
bagunça.
Meus amigos e colegas de classe, principalmente os mais próximos por
me ajudarem, passando confiança e descontração nos momentos difíceis.
A minha orientadora Adriana Cursino Thomé, por ter confiado este projeto
a mim, sempre me guiando na direção certa, nos momentos em que me
encontrava perdido.
E a todos os professores, pelos ensinamentos transmitidos durante esses
anos, que direta ou indiretamente foram fundamentais para a elaboração
deste projeto.
Página 5
Sumário
Lista de Figuras ...............................................................................................................7
Lista de Tabelas ..............................................................................................................9
Lista de Siglas............................................................................................................... 10
Resumo........................................................................................................................... 11
Abstract .......................................................................................................................... 12
1. Introdução............................................................................................................. 13
1.1. Introdução ao tema do projeto ..................................................................... 13
1.2. Motivação do desenvolvimento .................................................................... 13
1.3. Metas a serem alcançadas........................................................................... 14
2. Estudo Teórico .................................................................................................... 15
2.1. Teoria dos jogos ............................................................................................. 15
2.2. O Jogo de Damas .......................................................................................... 17
2.3. Regras do jogo de damas............................................................................. 19
2.4. Decisões ótimas em jogos ............................................................................ 25
2.4.1. Árvore do jogo......................................................................................... 25
2.4.2. Estratégias ótimas.................................................................................. 26
2.4.3. O algoritmo minimax.............................................................................. 28
2.4.4. Poda alfa-beta......................................................................................... 30
2.4.5. Decisões imperfeitas em tempo real................................................... 34
2.4.5.1. Funções de avaliação............ ......................................................34
2.4.5.2. Busca com corte .............................................................................37
2.5. Microcontrolador ............................................................................................. 38
2.6. Display LCD .................................................................................................... 38
2.7. Diodo emissor de luz ..................................................................................... 40
3. Descrição .............................................................................................................. 41
3.1. Arquitetura AVR.............................................................................................. 42
4. Especificação do hardware .............................................................................. 43
4.1. Funções do hardware .................................................................................... 43
4.1.1. Matriz de contatos .................................................................................. 44
4.2. Componentes utilizados ................................................................................ 46
4.3. Tabela de custos ............................................................................................ 47
4.4. Requisitos de hardware................................................................................. 48
Página 6
4.5. Configurando o chip....................................................................................... 49
4.6. Diagramas em blocos .................................................................................... 50
5. Especificação do software ............................................................................... 51
5.1. Ambiente e linguagem de desenvolvimento .............................................. 51
5.2. Interface com o usuário................................................................................. 51
5.3. Diagrama de contexto ................................................................................... 51
5.4. Diagrama de fluxo de dados......................................................................... 52
5.5. Diagrama de estados..................................................................................... 53
5.6. Fluxograma ..................................................................................................... 53
6. Especificação da validação do projeto ......................................................... 55
7. Resultados............................................................................................................ 56
7.1. Hardware ......................................................................................................... 56
7.2. Software ........................................................................................................... 57
8. Conclusão............................................................................................................. 58
9. Referências Bibliográficas ............................................................................... 60
10. Anexo – Cronograma.............................................Erro! Indicador não definido.
11. Anexo – Diagrama em blocos do chip Atmega64 ..........Erro! Indicador não
definido.
12. Anexo – Esquemático do microcontrolador....Erro! Indicador não definido.
13. Anexo – Esquemático da matriz de contatos..Erro! Indicador não definido.
14. Anexo – Esquemático da matriz de leds ..........Erro! Indicador não definido.
15. Anexo – Esquemático do gravador....................Erro! Indicador não definido.
16. Anexo – Esquemático da fonte ...........................Erro! Indicador não definido.
Página 7
Lista de Figuras
Figura 2.1 - Tabuleiro 1................................................................................................. 20
Figura 2.2 - Tabuleiro 2................................................................................................. 20
Figura 2.3 - Tabuleiro 3................................................................................................. 21
Figura 2.4 - Tabuleiro 4................................................................................................. 21
Figura 2.5 - Tabuleiro 5................................................................................................. 22
Figura 2.6 - Tabuleiro 6................................................................................................. 22
Figura 2.7 - Tabuleiro 7................................................................................................. 22
Figura 2.8 - Tabuleiro 8................................................................................................. 23
Figura 2.9 - Tabuleiro 9................................................................................................. 23
Figura 2.10 - Tabuleiro 10. ........................................................................................... 24
Figura 2.11 - Tabuleiro 11. ........................................................................................... 24
Figura 2.12 – Árvore de busca (parcial) para o jogo da velha................................ 26
Figura 2.13 – Árvore do jogo de duas jogadas. ........................................................ 28
Figura 2.14 – Árvore do jogo de duas jogadas utilizando poda alfa -beta............. 31
Figura 2.15 – Poda alfa-beta........................................................................................ 33
Figura 2.16 – Peso das casas na heurística posicional........................................... 36
Figura 2.17 – Display LCD............................................................................................ 40
Figura 2.18 - Diodo emissor de luz (LED). ................................................................. 41
Figura 3.1 – Módulos do hardware.............................................................................. 41
Figura 4.1 – Sistema de encaixe das peças no tabuleiro........................................ 43
Figura 4.2 – Foto do contato de uma das casas....................................................... 43
Figura 4.3 – Matriz de contatos. .................................................................................. 44
Figura 4.4 – Exemplo de funcionamento da matriz de contatos. ........................... 45
Figura 4.5 – Pinagem do chip Atmega64................................................................... 48
Figura 4.6 – Circuito para transferência de dados pelo paralela............................ 49
Figura 4.7 – Diagrama em blocos do sistema........................................................... 50
Figura 5.1 – Diagrama de contexto............................................................................. 51
Figura 5.2 – Diagrama de fluxo de dados (DFD). ..................................................... 52
Figura 5.3 – Diagrama de estados. ............................................................................. 53
Figura 5.4 – Fluxograma............................................................................................... 54
Figura 6.1 - Criança realizando uma jogada.............................................................. 55
Página 8
Figura 6.2 - Crianças interagindo com o tabuleiro.................................................... 55
Figura 7.1 – Placa do circuito da matriz de leds. ...................................................... 56
Figura 7.2 – Placa do circuito de leitura/escrita do microcontrolador.................... 56
Figura 7.3 – Tabuleiro. .................................................................................................. 57
Figura 10.1 - Cronograma do projeto.........................Erro! Indicador não definido.
Figura 11.1 - Diagrama em blocos do chip Atmega64............. Erro! Indicador não
definido.
Figura 12.1 - Esquemático do microcontrolador. .....Erro! Indicador não definido.
Figura 13.1 – Esquemático da matriz de contatos. .Erro! Indicador não definido.
Figura 14.1 – Esquemático da matriz de leds. .........Erro! Indicador não definido.
Figura 15.1 - Esquemático do gravador. ...................Erro! Indicador não definido.
Figura 16.1 - Esquemático da fonte. ..........................Erro! Indicador não definido.
Página 9
Lista de Tabelas
TABELA 2.1 – CARACTERÍSTICAS DOS LCD DISPONÍVEIS ............................. 39
TABELA 4.1 – COMPONENTES UTILIZADOS ........................................................ 46
TABELA 4.2 – CUSTOS DO PROJETO .................................................................... 47
TABELA 4.3 – ESPECIFICAÇÕES DO MICROCONTROLADOR ATMEGA64.. 48
TABELA 10.1 – TAREFAS DO CRONOGRAMA.....Erro! Indicador não definido.
Página 10
Lista de Siglas
AVR – Advanced Virtual RISC.
CISC – Complex Instruction Set Computer.
CMOS – Complementary Metal Oxide Semicondutor.
EEPROM – Electrically Erasable Programmable Read Only Memory.
IA – Inteligência Artificial.
JTAG - Joint Test Action Group.
LCD – Liquid Crystal Display.
LED – Light Emitter Diode.
MLF – Micro Lead Frame.
PC – Personal Computer.
RAM – Random Access Memory.
RISC – Reduced Instruction Set Computer.
SPI - Serial Peripheral Interface.
TQFP – Thin Quad Flat Pack.
Página 11
Resumo
Este trabalho consiste na construção de um tabuleiro, de 64 casas com
apenas 12 peças brancas, para prática do jogo de damas contra um computador,
que não possui peças e indica seus movimentos através do acionamento de
leds. Através do algoritmo de Minimax foram implementados níveis de
dificuldade para o computador, que realiza todo o processamento no próprio
tabuleiro, através do microcontrolador Atmega64 da Atmel.
Página 12
Abstract
The following research based project consists of constructing an electronic
board with 64 spaces accompanied by 12 white game pieces. The objective of
the project is to build a game environment where a user plays the game of
checkers against the machine. The computer does not play with real game
pieces; instead, the moves on the computer side are identified through leds that
are activated and deactivated. The computer can play the game in different levels
of difficulty that were implemented through the Minimax algorithm. All the
processing takes place inside the board having the Atmel’s Atmega64 as the
microcontroller.
Página 13
1. Introdução
1.1. Introdução ao tema do projeto
?? Este projeto baseia-se no projeto de final de curso desenvolvido em Fonseca
(2005). A idéia é incrementar seu projeto de forma que, tanto o hardware
quanto o software, possam ser melhorados a fim de tornar o jogo mais
operacional, tanto em termos de velocidade, quanto em termos de
manipulação do tabuleiro e das peças pela criança. Dessa forma, o tema do
projeto é a construção (hardware e software) de um sistema embarcado,
baseado no sistema anteriormente desenvolvido, que possibilite a prática do
jogo de damas.
1.2. Motivação do desenvolvimento
O projeto desenvolvido em Fonseca (2005) apresentou algumas dificuldades
no desenvolvimento do software, já que com o limite de tamanho para a geração
do código hex, só foi possível programar o algoritmo do MINIMAX de forma
limitada.
Como a memória RAM do microcontrolador era inferior ao necessário, o jogo
possuía apenas um nível de dificuldade, ou seja, o algoritmo só gerava um nível
da árvore, fazendo com que o computador só enxergasse uma jogada a frente
do tabuleiro atual, a qual nem sempre era a melhor jogada a ser feita.
Outro problema enfrentado foram com os sensores utilizados (reed switches)
para identificar as peças nas casas, eles apresentavam instabilidade, já que nem
sempre acusavam as mesmas.
O sistema é voltado para crianças, e apresenta os seguintes incrementos em
relação ao sistema anterior:
?? O processador utilizado é o Atmega64, já que o utilizado no projeto
desenvolvido em 2005, P89C51RD2 da Philips, tinha uma memória RAM
Página 14
limitada para a execução do algoritmo MINIMAX, impedindo a montagem da
árvore com mais de um nível, fazendo assim, com que a jogada do
computador nem sempre fosse a melhor a ser executada naquele momento.
?? Implementação de 2 níveis de dificuldade no software, sendo que em cada
nível implementado o computador deverá “enxergar” mais um nível de
jogada, dificultando o jogo para a criança.
?? Implementação de validações das jogadas realizadas, por exemplo, se a
criança colocar uma peça em uma casa não permitida, o software deverá
avisá-la.
?? Alteração do sistema de jogadas do computador, de forma que não sejam
necessárias peças, ou seja, de forma que a criança não necessite realizar a
movimentação da peça na jogada do computador.
?? Alterações na construção do tabuleiro de forma que fique mais adaptado à
criança.
1.3. Metas a serem alcançadas
O projeto consiste da elaboração de um tabuleiro para a prática do jogo de
damas com um sistema embarcado que, com ajuda de sensores e algoritmos
inteligentes, têm as seguintes características:
?? Validação das jogadas realizadas, através de algoritmos que verificam as
regras do jogo.
?? Apresentação de no mínimo dois níveis de dificuldade, e para que isso seja
possível, o algoritmo foi implementado de forma que a árvore tivesse dois
níveis ou mais, ou seja, o computador pode enxergar duas ou mais jogadas à
frente do tabuleiro atual.
?? As peças do computador são indicadas através de luzes, ou seja, conforme o
computador realiza sua jogada, a casa de onde a peça sai apaga e a casa de
destino acende, dessa forma todas as casas válidas do tabuleiro poderão
acender.
?? As damas do computador são representadas com o acionamento de mais
uma luz, deste modo, uma dama sempre será indicada com duas luzes
acesas.
Página 15
O tabuleiro tem um encaixe para as peças do jogador, de forma que as
mesmas fiquem bem colocadas. Cada encaixe tem, em forma de semicírculo,
dois contatos que conforme uma peça, com um metal condutor, seja colocada no
encaixe, feche o contato de um lado para o outro, informando ao processador
que uma peça foi movida para o local, o mesmo acontecerá quando a peça for
removida, mas ao invés de fechar contato, acontece o inverso, ou seja, a
conexão entre os condutores é desfeita, impedindo a passagem de informação
naquela casa.
Alem disso, espera-se através desse sistema, prover com a prática do jogo
um modo de auxiliar crianças no desenvolvimento das inteligências múltiplas,
mais especificamente a espacial e a lógico-matemática. Além de ressaltar
habilidades como a percepção, raciocínio, concentração e desenvolvimento de
estratégias.
2. Estudo Teórico
2.1. Teoria dos jogos
A teoria de jogos (matemática), um ramo da economia, visualiza qualquer
ambiente multiagente como um jogo, desde que o impacto de cada agente sobre
os outros seja “significativo”, não importando se os agentes são cooperativos ou
competitivos. Em Inteligência Artificial (IA), os “jogos” normalmente são de um
tipo bastante especializado – que os teóricos de jogos dominam jogos
determinísticos de revezamento de dois jogadores de soma zero com
informações perfeitas. Em nossa terminologia, isso significa ambientes
determinísticos completamente observáveis em que existem dois agentes cujas
ações devem se alternar e em que os valores de utilidade no fim do jogo são
sempre iguais e opostos (ou simétricos). Por exemplo, se um jogador ganha um
jogo de xadrez (+1), o outro jogador necessariamente perde (-1). É essa
oposição entre as funções de utilidade dos agentes que gera a situação de
competição.
Página 16
Os jogos ocuparam as faculdades intelectuais dos seres humanos – chegando
algumas vezes a um grau alarmante – desde que surgiu a civilização. Para
pesquisadores de IA, a natureza abstrata de jogos os torna um assunto atraente
para estudo. É fácil representar o estado de um jogo e, em geral, os agentes se
restringem a um pequeno número de ações cujos resultados são definidos por
regras precisas, Jogos físicos, como críquete e hóquei sobre gelo, têm
descrições muito mais complicadas, uma faixa muito maior de ações possíveis e
regras bastante imprecisas definindo a legalidade das ações. Com exceção do
futebol de robôs, esses jogos físicos não atraíram muito interesse na
comunidade de IA.
A participação de jogos foi uma das primeiras tarefas empreendidas em IA.
Por volta de 1950, quase ao mesmo tempo em que os computadores se
tornaram programáveis, o xadrez foi estudado por Konrad Zuse (o criador da
teoria da informação), por Nobert Wiener (o criador da moderna teoria de
controle) e por Alan Turing. Desde então, houve um progresso constante no
padrão dos jogos, até o ponto em que as máquinas ultrapassaram os seres
humanos nos jogos de damas e Othello, derrotaram campeões humanos
(embora não todas as vezes) em xadrez e gamão, e são competitivos em muito
outros jogos.
Os jogos, diferentemente de outros problemas de IA, são interessantes
porque são muito difíceis de resolver. Por exemplo, o xadrez tem um fator médio
de ramificações de cerca de 35, e as partidas com freqüência chegam até a 50
movimentos por cada jogador; assim a árvore de busca tem aproximadamente
35100 ou 10154 nós (embora o grafo de busca tenha “apenas” cerca de 1040 nós
distintos). Os jogos, como o mundo real, exigem portanto habilidade de tomar
alguma decisão, até mesmo quando o cálculo da decisão ótima é inviável. Os
jogos também penalizam a ineficiência de forma severa. Enquanto uma
implementação de busca A* com metade da eficiência custará simplesmente o
dobro do valor para funcionar até a conclusão, um programa de xadrez com
metade da eficiência no uso de seu tempo disponível provavelmente será
derrubado sem piedade, mantendo-se outros aspectos inalterados. Por essa
Página 17
razão, a busca de jogos elaborou várias idéias interessantes sobre como fazer o
melhor uso possível do tempo (Russel, 2004).
2.2. O Jogo de Damas
Conforme Jogo de Damas (2006), a origem do jogo de damas é
desconhecida. Pinturas e tabuleiros encontrados em túmulos do antigo Egito,
além de outros achados arqueológicos em diversos lugares do mundo, nos dão
conta da existência de jogos bem semelhantes ao atual Jogo de Damas. Não
existem, no entanto, indícios seguros que nos possam elucidar onde e quando
ele surgiu.
No século XVI foram editados na Espanha os primeiros livros de que se tem
notícia, contendo elementos teóricos já bastante desenvolvidos. Embora não
exista nenhum exemplar, conhecido apenas por citação de outros autores, o
primeiro livro editado deve ter sido "El ingénio ó juego de marro, de punto ó
damas", de Anton Torquemada, 1547, Espanha. Hoje, estimam-se em centenas
de milhares os títulos publicados em todo o mundo.
O primeiro campeão mundial, homologado pela Federação Mundial de Jogo
de Damas, foi o austríaco Isidore Weiss, em 1985. A Federação Mundial foi
fundada em 1948, em Paris, França. O jogo de damas popularizou-se no mundo
em dois tabuleiros: 64 casas, que se joga com 12 pedras de cada lado e 100
casas, que se joga com 20 pedras de cada lado.
Tem-se como certo, considerando sua já grande popularidade na Europa
antes da época dos descobrimentos, que o jogo de damas tenha sido introduzido
no Brasil pelos primeiros colonizadores.
O jogo de damas, como esporte, teve seu início no Brasil nos idos de 1935 a
1940, pelas mãos de Geraldino Izidoro. Grandes partes das provas realizadas
naquela época estão registradas no livro "Ciência e Técnica do Jogo de Damas",
de autoria de G. Izidoro e J. Cardoso. Maiores detalhes a respeito deste surto
damístico podem ser encontrados naquela publicação. O primeiro livro editado
Página 18
no Brasil foi “40 Golpes Clássicos", de autor desconhecido, publicado no Rio de
Janeiro, em 1940.
A partir de 1940, a prática do jogo de damas de uma forma organizada, entrou
em recesso. Não há registros de movimento damístico até 1954, quando, com o
advento do mestre russo W. Bakumenko, um novo surto começou a surgir, no
tabuleiro de 64 casas.
Radicado em São Paulo, W. Bakumenko, egresso de uma escola damística
evoluída, campeão da URSS em 1927, deu início à criação de um núcleo
damístico. Por sua vez, G. Izidoro, que sempre manteve seu interesse pelo jogo
de damas, ao saber da presença de Bakumenko, o procurou. Isto gerou um
encontro famoso entre as equipes de São Paulo e Rio de Janeiro, que
praticamente marcou o reinício das atividades damísticas no país. Esta prova foi
realizada no Rio de Janeiro, no dia 02 de maio de 1954.
Com Bakumenko em São Paulo e G. Izidoro no Rio, o jogo de damas tomou
um impulso fabuloso. Bakumenko, alicerçado em sólidos conhecimentos
técnicos, incentivou a prática do jogo, principalmente pela publicação semanal
de uma coluna damística no jornal "A Gazeta Esportiva". Manteve também
outras colunas e incentivou a criação de outras (L. Engels, famoso jogador de
xadrez, incentivado pelo mestre, manteve uma seção no jornal "O Estado de São
Paulo"). Criou grupos damístico e foi a centelha da criação de muitos outros.
Editou dois livros: "Jóias do Jogo de Damas" e "Curso das Damas Brasileiras".
Bakumenko faleceu em 13 de maio de 1969.
Por sua vez, G. Izidoro, realizando torneios, criando grupos damísticos e
incentivando com simultâneas e prêmios a criação de outros, escrevendo
diversas colunas em jornais e revistas, fez crescer o interesse pelo esporte no
Rio e em todo o país. Todo este movimento resultou na criação das Federações
Estaduais: São Paulo, Rio de Janeiro, Rio Grande do Sul, Espírito Santo e Minas
Gerais criaram suas Federações. Em 5 de abril de 1963, na sede do Clube
Estrela de Oliveira, à Rua do Gasômetro, na cidade de São Paulo, foi fundada a
Federação Paulista de Jogo de Damas, a primeira federação no Brasil.
Página 19
A década de 60 foi uma época de grande desenvolvimento para o jogo de
damas. Em Belo Horizonte, em 1967, foi organizado o maior campeonato de
jogo de damas até hoje do Brasil, reunindo 1009 participantes.
O grande obstáculo surgiu para o jogo de damas brasileiro em 1967, quando
João Havelange, então presidente da Confederação Brasileira de Desportos, que
na época englobava todos os esportes amadores, qualificou o jogo de damas
como mera recreação, desfiliando-o da CBD. Foi um atraso irreparável para a
modalidade, pois somente em 19 de novembro de 1988, 21 anos depois, é que o
jogo de damas voltou à condição de esporte no Brasil. Foram 21 anos à margem
do processo esportivo nacional.
Porém, muito se evoluiu nesses 21 anos. Alguns meses após a desfiliação da
CBD, os damistas se reuniram em Niterói e fundaram a Confederação Brasileira
de Jogo de Damas, sendo seu primeiro presidente o Dr. Murilo Portugal.
E em 1967, aconteceu o 1º Campeonato Brasileiro de Jogo de Damas, de 64
casas, em São Pedro D'Aldeia, ficando na primeira colocação o paulista
Humberto Olivarbo e o espírito-santense José Carlos Rabelo. Houve uma partida
para decidir o título e a vitória coube a José Carlos Rabelo, que se tornou o
primeiro campeão brasileiro individual (Jogo de Damas, 2006).
Maiores informações podem ser encontradas em Confederação Brasileira
(2006), Wikipedia (2006) e Jogos Antigos (2006).
2.3. Regras do jogo de damas
Conforme Jogo de Damas (2006), o jogo é praticado em um tabuleiro de 64
casas, claras e escuras, conforme a Figura 2.1. A grande diagonal, escura, deve
ficar sempre à esquerda de cada jogador. O objetivo do jogo é imobilizar ou
capturar todas as peças do adversário.
Página 20
Figura 2.1 - Tabuleiro 1.
FONTE: Jogo de Damas (2006).
Esse jogo é praticado entre dois parceiros, com 12 pedras brancas de um lado
e com 12 pedras pretas de outro lado, como mostra a Figura 2.2. O lance inicial
cabe sempre a quem estiver com as peças brancas. Também se pode jogar
damas em um tabuleiro de 100 casas, com 20 pedras para cada lado (Damas
Internacional).
Figura 2.2 - Tabuleiro 2.
FONTE: Jogo de Damas (2006).
A pedra anda só para frente, uma casa de cada vez. Quando a pedra atinge a
oitava linha do tabuleiro ela é promovida à dama, como mostra a Figura 2.3.
Página 21
Figura 2.3 - Tabuleiro 3.
FONTE: Jogo de Damas (2006).
A dama é uma peça de movimentos mais amplos. Ela anda para frente e para
trás, quantas casas quiser. A dama não pode saltar uma peça da mesma cor,
como mostra a Figura 2.4.
Figura 2.4 - Tabuleiro 4.
FONTE: Jogo de Damas (2006).
A captura é obrigatória. Duas ou mais peças juntas, na mesma diagonal, não
podem ser capturadas, como mostra a Figura 2.5.
Página 22
Figura 2.5 - Tabuleiro 5.
FONTE: Jogo de Damas (2006).
A pedra captura a dama e a dama captura a pedra. Pedra e dama têm o
mesmo valor para capturarem ou serem capturadas, como mostra a Figura 2.6.
Figura 2.6 - Tabuleiro 6.
FONTE: Jogo de Damas (2006).
A pedra e a dama podem capturar tanto para frente como para trás, uma ou
mais peças, como mostra a Figura 2.7.
Figura 2.7 - Tabuleiro 7.
FONTE: Jogo de Damas (2006).
Página 23
Se no mesmo lance se apresentar mais de um modo de capturar, é obrigatório
executar o lance que capture o maior número de peças (Lei da Maioria), como
mostra a Figura 2.8.
Figura 2.8 - Tabuleiro 8.
FONTE: Jogo de Damas (2006).
A pedra que durante o lance de captura de várias peças, apenas passe por
qualquer casa de coroação, sem aí parar, não será promovida à dama, como
mostra a Figura 2.9.
Figura 2.9 - Tabuleiro 9.
FONTE: Jogo de Damas (2006).
Na execução do lance de captura, é permitido passar mais de uma vez pela
mesma casa vazia, não é permitido capturar duas vezes a mesma peça, como
mostra a Figura 2.10.
Página 24
Figura 2.10 - Tabuleiro 10.
FONTE: Jogo de Damas (2006).
Na execução do lance de captura, não é permitido capturar a mesma peça
mais de uma vez e as peças capturadas não podem ser retiradas do tabuleiro
antes de completar o lance de captura, como mostra a Figura 2.11.
Figura 2.11 - Tabuleiro 11.
FONTE: Jogo de Damas (2006).
O empate é declarado nos seguintes casos:
?? Após 20 lances sucessivos de damas, sem captura ou deslocamento de
pedra, a partida é declarada empatada;
Em casos especiais, o empate é declarado após 5 lances. Isso ocorre quando
as peças que sobram no tabuleiro são as seguintes:
?? duas damas contra duas damas;
?? duas damas contra uma;
Página 25
?? duas damas contra uma dama e uma pedra;
?? uma dama contra uma dama e;
?? uma dama contra uma dama e uma pedra.
2.4. Decisões ótimas em jogos
Considera-se um jogo com dois jogadores, os quais chamarão MAX e MIN.
MAX faz o primeiro movimento, e depois eles se revezam até o jogo terminar. No
fim do jogo, os pontos são dados ao jogador vencedor e são impostas
penalidades ao perdedor. Um jogo pode ser definido formalmente como uma
espécie de problema de busca com os seguintes componentes:
?? O estado inicial, que inclui a posição do tabuleiro e identifica o jogador que
fará o movimento.
?? Uma função sucessor, que retorna uma lista de pares (movimento, estado),
cada qual indicando um movimento válido e o estado resultante.
?? Um teste de término, que determina quando o jogo termina. Os estados em
que o jogo é encerrado são chamados estados terminais.
Uma função utilidade (também chamada função objetivo ou função
compensação), que dá um valor numérico aos estados terminais. Em damas, o
resultado é uma vitória, uma derrota ou um empate, com valores +1, -1 ou 0.
Alguns jogos têm uma variedade mais ampla de resultados possíveis; a
compensação no gamão varia de 192 até -192 (Russel, 2006).
2.4.1. Árvore do jogo
O estado inicial e os movimentos válidos para cada lado definem a árvore do
jogo correspondente ao jogo. A Figura 2.12 mostra parte da árvore do jogo para
o jogo-da-velha. A partir do estado inicial, MAX tem nove movimentos possíveis.
O jogo se alterna entre a colocação de um X por MAX e a colocação de um O
por MIN até alcançarmos nas de folhas correspondentes a estados terminais,
tais que um jogador tem três símbolos em uma linha ou todos os quadrados são
preenchidos. O número em cada nó de folha indica o valor de utilidade do estado
terminal, do ponto de vista de MAX; valores altos são considerados bons para
Página 26
MAX e ruins para MIN (o que explica os nomes dados aos jogadores). Cabe a
MAX usar a árvore de busca (em particular a utilidade de estados terminais) para
determinar o melhor movimento (Russel, 2004).
Figura 2.12 – Árvore de busca (parcial) para o jogo da velha.
FONTE: Russel (2006), pág. 158.
2.4.2. Estratégias ótimas
Em um problema de busca normal, a solução ótima seria uma seqüência de
movimentos que levasse a um estado objetivo – um estado terminal que
representa uma vitória. Por outro lado, em um jogo, MIN tem alguma relação
com esse estado. Portanto, MAX deve encontrar uma estratégia de contingência
que especifique o movimento de MAX no estado inicial, e depois os movimentos
de MAX nos estados resultantes de cada resposta possível de MIN a esses
movimentos e assim por diante. Em termos gerais, uma estratégia ótima leva a
resultados no mínimo tão bons quanto qualquer outra estratégia quando se está
enfrentando um oponente infalível. Começaremos mostrando como encontrar
essa estratégia ótima, embora deva ser inviável para MAX calculá-la no caso de
jogos mais complexos que o jogo-da-velha.
Página 27
Até mesmo um jogo simples como jogo-da-velha é muito complexo para se
traçar a árvore de jogo inteira, e assim nos limitaremos ao jogo trivial da Figura
2.12 . Os movimentos possíveis para MAX no nó raiz são identificados por a1, a2
e a3. As respostas possíveis para a1 correspondentes a MIN são b1, b2 e b3 e
assim sucessivamente. Esse jogo específico termina depois de um movimento
realizado por MAX e por MIN. (No linguajar dos jogos, dizemos que essa árvore
tem profundidade de um único movimento, que consiste em dois meios-
movimentos, cada um dos quais é chamado jogada.) As utilidade dos estados
terminais nesse jogo variam de 2 até 14.
Dada uma árvore de jogo, a estratégia ótima pode ser determinada
examinando-se o valor minimax de cada nó, que representamos como VALOR-
MINIMAX(n). O valor minimax de um nó é a utilidade (para MAX) de se encontrar
no estado correspondente, supondo-se que ambos os jogadores têm um
desempenho ótimo desde esse estado até o fim do jogo. É óbvio que o valor
minimax de um estado terminal é simplesmente sua utilidade. Além disso, dada
uma escolha, MAX preferirá se mover para um estado de valor máximo,
enquanto MIN preferirá em estado de valor mínimo.
Assim, tem-se:
VALOR-MINIMAX(n) =
UTILIDADE(n)
Maxs?Sucessores(n) VALOR-MINIMAX(s)
Min s?Sucessores(n) VALOR-MINIMAX(s)
Se n é um estado terminal
Se n é um nó de MAX
Se n é um nó de MIN
Aplicam-se essas definições à árvore de jogo da Figura 2.13. Os nós terminais
no nível inferior já estão identificados com seus valores de utilidade. O primeiro
nó de MIN, identificado por B, tem três sucessores com valores 3, 12 e 8;
portanto, seu valor minimax é 3. De modo semelhante, os outros nós de MIN têm
valor minimax 2. O nó raiz é um nó de MAX. Seus sucessores têm valores
minimax 3, 2 e 2; logo, ele tem uma valor minimax igual a 3. Também podemos
identificar a decisão minimax na raiz: a ação a1 é a escolha ótima para MAX,
porque leva ao sucessor com o mais alto valor minimax.
Página 28
Figura 2.13 – Árvore do jogo de duas jogadas.
FONTE: Russel (2006), pág. 159.
Essa definição de jogo ótimo para MAX supõe que MIN também joga de forma
ótima, ela maximiza o resultado para MAX no pior caso. E se MIN não jogar de
forma ótima? Nesse caso, é fácil mostra que MAX terá um desempenho ainda
melhor que a estratégia de minimax; porém, essas estratégias necessariamente
têm um desempenho pior contra oponentes ótimos (Russel, 2004).
2.4.3. O algoritmo minimax
O algoritmo minimax calcula a decisão minimax a partir do estado corrente.
Ela utiliza uma computação recursiva simples dos valores minimax de cada
estado sucessor, implementando diretamente as equações da definição. A
recursão percorre todo o caminho descendente até as folhas da árvore, e depois
os valores minimax são propagados de volta pela árvore, à medida que a
recursão retorna. Por exemplo, na Figura 2.13, primeiro o algoritmo efetua uma
recursão descendo a árvore até os três nós de folhas inferiores e emprega a
função UTILIDADE sobre eles para descobrir que seus valores são 3, 12 e 8,
respectivamente. Em seguida ele toma o mínimo desses valores, 3, e o devolve
como valor propagado de volta para o nó B. Um processo semelhante fornece os
valores propagados de volta de 2 para C e 2 para D. Por fim, tomamos o valor
máximo entre 3, 2 e 2 para obter o valor propagado de volta igual a 3 para o nó
raiz.
O algoritmo minimax executa uma exploração completa em profundidade da
árvore do jogo. Se a profundidade máxima da árvore é m e existem b
Página 29
movimentos válidos em cada ponto, a complexidade de tempo do algoritmo
minimax é O(bm). A complexidade de espaço é O(bm) para um algoritmo que
gera todos os sucessores de uma vez ou O(m) para uma algoritmo que gera um
sucessor de cada vez. É claro que em jogos reais, o custo de tempo é totalmente
impraticável, mas esse algoritmo serve como base para a análise matemática de
jogos e para algoritmos mais práticos (Russel, 2004).
função DECISÃO-MINIMAX(estado) retorna uma ação
entradas: estado, estado corrente no jogo
v ? VALOR-MAX(estado)
retornar a ação em SUCESSORES(estado) com valor v
função VALOR-MAX(estado) retorna um valor de utilidade
se TESTE-TERMINAL(estado) então retornar UTILIDADE(estado)
v ? -8
para a, s em SUCESSORES(estado) faça
v ? MAX(v, VALOR-MIN(s))
retornar v
função VALOR-MIN(estado) retorna um valor de utilidade
se TESTE-TERMINAL(estado) então retornar UTILIDADE(estado)
v ? 8
para a, s em SUCESSORES(estado) faça
v ? MIN(v, VALOR-MAX(s))
retornar v
Conforme os algoritmos acima, pode-se calcular a decisão minimax. Ele
retorna a ação correspondente ao melhor movimento possível, isto é, o
movimento que leva ao resultado com a melhor utilidade, sob a suposição de
que o oponente joga para minimizar a utilidade. As funções VALOR-MAX e
Página 30
VALOR-MIN passam por toda a árvore de jogo, até chegar às folhas, a fim de
determinar o valor propagação de volta de um estado (RICH, 1994).
2.4.4. Poda alfa-beta
O problema da busca minimax é que o número de estados de jogo que ela
tem de examinar é exponencial em relação ao número de movimentos.
Infelizmente, não podemos eliminar o expoente, mas podemos efetivamente
reduzi-lo pela metade. O artifício é a possibilidade de calcular a decisão minimax
correta sem examinar todos os nós na árvore de jogo. Ou seja, podemos tomar
emprestada a idéia de poda, a fim de poder de deixar de considerar grandes
partes da árvore. A técnica específica que examinaremos é chamada poda alfa-
beta. Quando é aplicada a uma árvore minimax padrão, ela retorna o mesmo
movimento que minimax retornaria, mas poda as ramificações que não terão
influência possível sobre a decisão final.
Considerando-se novamente a árvore de jogo de duas jogadas da Figura
2.13. Vamos acompanhar mais uma vez o cálculo da decisão ótima, agora
prestando bastante atenção ao que conhecemos em cada ponto do processo.
Observando-se a Figura 2.14 (a), percebemos que a primeira folha sob B tem
valor 3, consequentemente, B, que é um nó de MIN, tem valor máximo 3. (b) a
segunda folha sob B tem valor 12; MIN evitaria esse movimento, de forma que o
valor de B ainda é no máximo 3. (c) A terceira folha sob B tem valor 8, e como B
não tem nenhum sucessor menor que 3, e MIN sempre procura o menor valor, o
valor de B é exatamente 3.
Pode-se deduzir que o valor raiz é pelo menos 3, já que MAX tem uma
escolha de valor 3 na raiz. (d) A primeira folha abaixo de C tem o valor 2, assim,
C, que é um nó de MIN, tem no máximo 2. Porém, sabemos que B vale 3,
portanto, MAX, que sempre escolhe o maior valor, nunca escolheria C. Desse
modo, não há razão para se examinar os outros sucessores de C.
A seguir é mostrado um exemplo de poda alfa-beta. (e) A primeira folha
abaixo de D tem o valor 14, e então D vale no máximo 14. Esse valor ainda é
Página 31
mais alto que a melhor alternativa de MAX (isto é, 3), e portanto precisamos
continuar a explorar sucessores de D. Note também que agora temos limites
para todos os sucessores da RAIZ, e conseqüentemente o valor da RAIZ
também é no máximo 14. (f) O segundo sucessor de D vale 5, e assim
novamente precisamos continuar a exploração. O terceiro sucessor vale 2,
agora, D vale exatamente 2. A decisão de MAX na raiz é efetuar o movimento
para B, o que nos dá o valor 3.
Figura 2.14 – Árvore do jogo de duas jogadas utilizando poda alfa-beta.
FONTE: Russel (2004), pág. 162.
Isso também pode ser visto como uma simplificação da fórmula de VALOR-
MINIMAX. Sejam x e y valores dos dois sucessores não-avaliados do nó C da
figura acima e seja z o mínimo entre x e y. O valor do nó raiz é dado por:
VALOR-MINIMAX(raiz) = max(min(3, 12, 8), min(2, x, y), min(14, 5, 2))
= max(3, min(2, x, y), 2)
= max(3, z, 2) onde z = 2
= 3
Página 32
Em outras palavras, o valor da raiz é conseqüentemente a decisão minimax
são independentes dos valores das folhas podadas x e y.
A poda alfa-beta pode ser aplicada a árvores de qualquer profundidade, e
freqüentemente, é possível podar subárvores inteiras em lugar de podar apenas
folhas. O princípio geral é este: considere um nó n em algum lugar da árvore
(veja a Figura 2.15), tal que o Jogador tenha a escolha de movimento até esse
nó. Se o Jogador tiver uma escolha melhor m no nó pai de n ou em qualquer
ponto de escolha de movimento até esse nó. Se o Jogador tiver uma escolha
melhor m no nó pai de n ou em qualquer ponto de escolha adicional acima dele,
então n nunca será alcançado em um jogo real. Assim, uma vez que
descobrimos o suficiente sobre n (examinando alguns de seus descendentes)
para chegar a essa conclusão, poderemos podá-la.
A busca minimax é do tipo em profundidade; então, em qualquer instante
considera-se os nós ao longo de um único caminho na árvore. A poda alfa-beta
obtém seu nome a partir dos dois parâmetros a seguir, que descrevem limites
sobre os valores propagados de volta que aparecem em qualquer lugar ao longo
do caminho:
?? a ? o valor da melhor escolha (isto é, a de valor mais alto) que encontramos
até o momento em qualquer ponto de escolha ao longo do caminho para
MAX.
?? ß ? o valor da melhor escolha (isto é, a de valor mais baixo) que
encontramos até agora em qualquer ponto de escolha ao longo do caminho
para MIN.
Página 33
Figura 2.15 – Poda alfa-beta.
FONTE: adaptada de Russel (2004), pág. 163.
A busca alfa-beta atualiza os valores de a e ß à medida que prossegue e poda
as ramificações restantes em um nó (isto é, encerra a chamada recursiva) tão
logo se sabe que o valor do nó corrente é pior que o valor corrente de a ou ß
para MAX ou MIN, respectivamente.
A efetividade da poda alfa-beta é altamente dependente da ordem em que
os sucessores são examinados. Por exemplo, na Figura 2.14 (e) e (f), não
poderíamos podar quaisquer sucessores de D, porque os piores sucessores (do
ponto de vista de MIN) foram gerados primeiro. Se o terceiro sucessor tivesse
sido gerado primeiro, seríamos capazes de podar os outros dois. Isso sugere
que poderia valer a pena tentar examinar primeiro os sucessores que têm
probabilidade de serem melhores.
Supõe-se que pode ser feito, então o resultado será que alfa-beta
precisará examinar apenas O (b3d/4) para o valor moderado de b. Acrescentar
esquemas dinâmicos de ordenação de movimentos, como tentar primeiro os
movimentos considerados os melhores da última vez, nos levará até bem perto
do limite teórico (Russel, 2004).
Página 34
2.4.5. Decisões imperfeitas em tempo real
Conforme Russel (2004), o algoritmo minimax gera o espaço de busca do
jogo inteiro, enquanto o algoritmo alfa-beta nos permite podar grandes partes
desse espaço. Porém, alfa-beta ainda tem que fazer a busca em toda a distância
até os estados terminais, pelo menos para uma parte do espaço de busca. Em
geral, essa profundidade não é prática, porque os movimentos devem ser
realizados em um período de tempo razoável – normalmente por alguns minutos,
no máximo. O artigo de 1950 de Shannon, Programing a computer for playing
chess, propunha em vez disso que os programas cortassem a busca mais cedo
e aplicassem uma função de avaliação heurística aos estados de busca,
transformando efetivamente nós não terminais em folhas terminais. Em outras
palavras, a sugestão é alterar minimax ou alfa-beta de duas maneiras: a função
de utilidade é substituída por uma função de avaliação de heurística AVAL, que
fornece uma estimativa da utilidade da posição, e o teste de término é
substituído por um teste de corte que decide quando aplicar AVAL.
2.4.5.1. Funções de avaliação
Uma função de avaliação retorna, segundo RICH (1994), uma estimativa de
utilidade esperada do jogo, a partir de uma dada posição de mesma forma que
as funções de heurística retornam uma estimativa de distância até a meta. A
idéia de um avaliador não era nova quando Shannon a propôs. Durante séculos,
os jogadores de xadrez (e os aficionados por outros jogos) desenvolveram meios
de julgar o valor de uma posição, porque os seres humanos são ainda mais
limitados que os programas de computador no volume de busca que podem
realizar. Deve ficar claro que o desempenho de um programa de jogos depende
da qualidade de sua função de avaliação. Uma função de avaliação inexata
guiará um agente em direção e posições que acabarão por serem perdidas.
A função de avaliação pode ser projetada da seguinte forma: primeiro, a
função de avaliação deve ordenar os estados terminais do mesmo modo que a
verdadeira função de utilidade; caso contrário, um agente que a utilizasse
poderia selecionar movimentos não ótimos, mesmo que pudesse antecipar todos
os movimentos até o fim do jogo. Em segundo lugar, a computação não deve
Página 35
demorar tempo demais (A função de avaliação poderia chamar DECISÃO-
MINIMAX como uma sub-rotina e calcular o valor exato da posição, mas isso iria
anular a principal finalidade: poupar tempo.) Em terceiro lugar, no caso de
estados não-terminais, a função de avaliação deve estar fortemente relacionada
com as chances reais de vitória.
Se a busca tiver de ser cortada em estados não-terminais, o algoritmo será
necessariamente incerto sobre os resultados finais desses estados. Esse tipo de
incerteza é induzido por limitações computacionais, e não informativas. Dado o
volume limitado de computação que a função de avaliação pode realizar para um
determinado estado, o melhor que ela pode fazer é arriscar um palpite sobre o
resultado final.
Para tornar essa idéia mais concreta, deve-se analisar que a maioria das
funções de avaliação atua calculando diversas características do estado – por
exemplo, o número de peças tomadas por cada lado de um jogo de damas.
Consideradas em conjunto, as características definem diversas categorias ou
classes de equivalência de estados: os estados de cada categoria têm os
mesmos valores para todas as características. Qualquer categoria específica,
em termos gerais, conterá alguns estados que levam a vitórias, alguns que
levam a empates e alguns que levam a derrotas. A função de avaliação não tem
como saber os estados de cada grupo, mas pode retornar um único valor capaz
de refletir a proporção de estados que conduzem a cada resultado. Por exemplo,
vamos supor que nossa experiência sugira que 72% dos estados encontrados na
categoria levam a vitória (com utilidade +1); 20% levam a uma derrota (-1) e 8%
a um empate (0). Então, uma avaliação razoável dos estados na categoria é a
média ponderada ou valor esperado: (0,72 x +1) + (0,20 x -1) + (0,08 x 0) =
0,52. Em princíp io, o valor esperado pode ser determinado para cada categoria,
o que resulta em uma função de avaliação que funciona para qualquer estado.
Como ocorre com estados terminais, a função de avaliação não precisa retornar
valores esperados reais, desde que a ordenação dos estados seja a mesma
(Russel, 2004).
Página 36
Segundo Figueiredo (2006), na prática, essa espécie de análise exige muitas
categorias e, conseqüentemente, muita experiência para estimar todas as
probabilidades de vitória. Em vez disso, a maioria das funções de avaliação
calcula contribuições numéricas separadas de cada característica e depois as
combina para encontrar o valor total. Por exemplo, a heurística posicional que
calcula a força de cada tabuleiro conforme a disposição e a promoção das peças
da seguinte maneira, é atribuído um valor material aproximado para as peças
sendo, o peão vale 5, caso esteja prestes a virar dama vale 7 e a dama vale 10.
São atribuídos os seguintes pesos para as casas do tabuleiro, conforme a Figura
2.16.
Figura 2.16 – Peso das casas na heurística posicional.
FONTE: Figueiredo (2006).
Então calcula-se a força de cada jogador através do somatório do peso de
cada peça (w) vezes o peso da respectiva casa do tabuleiro (f) e depois se
calcula a força do tabuleiro subtraindo a força das peças brancas (jogador) pela
força das peças pretas (computador).
AVAL(s) = FORÇA-BRANCA() – FORÇA-PRETA()
FORCA-BRANCA = ? w ifi ,sendo wi as peças brancas
FORCA-PRETA = ? w ifi ,sendo wi as peças pretas
Outra análise eficaz é a heurística do triângulo defensivo, que é calculada
através da fórmula (p - b)/(p + b) sendo p a pontuação das pretas e b a
pontuação das brancas. Cada pontuação é calculada através de caracteres
Página 37
defensivos (casas privilegiadas da defesa) e caracteres materiais (1 ponto para o
peão e 3 pontos para a dama), ou seja, além de levar em conta a quantidade e o
tipo da peça (peão ou dama) de cada jogador, a heurística do triângulo defensivo
também privilegia o fato da peça estar em sua base ou pertencer ao triângulo
defensivo.
2.4.5.2. Busca com corte
A próxima etapa é modificar BUSCA-ALFA-BETA, de modo que ela chame a
função heurística AVAL quando for apropriado cortar a busca. Em termos de
implementação, substituímos as duas linhas das funções VALOR-MAX e
VALOR-MIN que mencionam TESTE-TERMINAL pela linha a seguir:
se TESTE-DE-CORTE (estado, profundidade) então retornar AVAL(estado)
Também deve-se providenciar alguma anotação para que a profundidade
corrente seja incrementada em cada chamada recursiva. A abordagem mais
direta para controlar a quantidade de busca é definir um limite de profundidade
fixo, a fim de que TESTE-DE-CORTE (estado, profundidade) retorne verdadeiro
para toda profundidade maior que alguma profundidade fixa d. (Ela também deve
retornar verdadeiro para todos os estados terminais, como fazia TESTE-
TERMINAL.) A profundidade d é escolhida de modo que o período de tempo
utilizado não exceda o período permitido pelas regras do jogo.
Uma abordagem mais resistente é aplicar o aprofundamento iterativo (ou
busca em profundidade por aprofundamento iterativo), ou seja, é uma estratégia
geral, usada com freqüência em combinação com a busca em profundidade, que
encontra o melhor limite da profundidade. Ela faz isso aumentando gradualmente
o limite – primeiro 0, depois 1, depois 2 e assim por diante – até encontrar um
objetivo. Isso ocorrerá quando o limite de profundidade alcançar p, a
profundidade do nó objetivo mais raso.
Página 38
Quando o tempo se esgota, o programa retorna ao movimento selecionado
pela busca mais profunda concluída. No entanto, essas abordagens podem levar
a erros, devido a natureza aproximada da função de avaliação.
Considera mais uma vez a função de avaliação simples para damas, ou seja,
suponha que o programa pesquise até a profundidade limite alcançando uma
posição onde as peças pretas têm vantagem sobre as brancas. Isso seria
reportado como o valor heurístico do estado, declarando-se assim que o estado
provavelmente levará a uma vitória das peças pretas. Porém, o próximo
movimento das brancas teria uma vantagem muito maior sobre as pretas.
Portanto, a posição resulta na realidade em uma vitória das brancas, mas isso só
pode ser visto observando-se mais uma jogada à frente.
É óbvio que é necessário um teste de corte mais sofisticado. A função de
avaliação deve ser aplicada apenas a posições quiescentes – isto é, posições
em que é improvável haver grandes mudanças de valores no futuro próximo
Russel (2004).
2.5. Microcontrolador
Um microcontrolador é um computador programável, em um chip otimizado
para controlar dispositivos eletrônicos. É uma espécie de microprocessador, com
memória e interfaces de E/S (Entrada e Saída) integrados, enfatizando a auto-
suficiência, em constante com um microprocessador de propósito geral, o
mesmo tipo usado nos PCs, que requer chips adicionais para prover as funções
necessárias (Schunk, 2001).
2.6. Display LCD
Os módulos LCD são interfaces de saída muito útil em sistemas
microprocessados. Estes módulos utilizam um controlador próprio, permitindo
sua interligação com outras placas através de seus pinos, onde deve ser
alimentado o módulo e interligado o barramento de dados e controle com a placa
do usuário. Naturalmente que além de alimentar e conectar os pinos do módulo
com a placa do usuário, deverá haver um protocolo de comunicação entre as
Página 39
partes, que envolve o envio de bytes de instruções e bytes de dados pelo
sistema do usuário.
Os LCD gráficos são encontrados com resuluções de 122x32, 128x64, 240x64
e 240x128 dots pixel, e geralmente estão disponíveis com 20 pinos para
conexão. Os LCD comuns (tipo caracter) são especificados em número de linhas
por colunas e são encontrados nas configurações previstas na TABELA 2.1.
TABELA 2.1 – CARACTERÍSTICAS DOS LCD DISPONÍVEIS.
Número de
Colunas
Numero de
Linhas
Quantidade de
pinos
8 2 14
12 2 14/15
16 1 14/16
16 2 14/16
16 4 14/16
20 1 14/16
20 2 14/16
20 4 14/16
24 2 14/16
24 4 14/16
40 2 16
40 4 16
FONTE: CICHACZEWSKI (2002).
Os módulos podem ser encontrados com LED backlight (com uma iluminação
de fundo) para facilitar as leituras durante a noite. Neste caso, a alimentação
deste led faz-se normalmente pelos pinos 15 e 16 para os módulos comuns e 19
e 20 para os módulos gráficos, sendo os pinos 15 e 19 para ligação ao anodo e
os pinos 16 e 20 para o catodo. A corrente de alimentação deste led varia de 100
a 200mA, dependendo do modelo.
Página 40
Estes módulos utilizam um controlador próprio, permitindo sua interligação
com outras placas através de seus pinos, onde deve ser alimentado o módulo e
interligado o barramento de dados e controle do módulo com a placa do usuário.
Naturalmente que além de alimentar e conectar os pinos do módulo com a placa
do usuário, deverá haver um protocolo de comunicação entre as partes, que
envolve o envio de bytes de instruções e bytes de dados pelo sistema do
usuário. A Figura 2.17 ilustra um display LCD (Display LCD, 2006)
Figura 2.17 – Display LCD.
FONTE: Cichaczewski (2002).
2.7. Diodo emissor de luz
O LED (Light Emitter Diode - Diodo Emissor de Luz), como o próprio nome já
diz, é um diodo (junção P-N) que quando energizado emite luz visível. A luz é
monocromática e é produzida pelas interações energéticas do elétron. O
processo de emissão de luz pela aplicação de uma fonte elétrica de energia é
chamado eletroluminescência. Em qualquer junção P-N polarizada diretamente,
dentro da estrutura, próximo à junção, ocorrem recombinações de lacunas e
elétrons. Essa recombinação exige que a energia possuída por esse elétron, que
até então era livre, seja liberada, o que ocorre na forma de calor ou fótons de luz,
como mostrado na Figura 2.18.
Página 41
Figura 2.18 - Diodo emissor de luz (LED).
FONTE: Adaptada de Complex (2006).
3. Descrição
O sistema é composto por um tabuleiro com 64 casas, 12 peças brancas e
alguns componentes eletrônicos, sendo que as peças do computador são
mostradas por meio de leds.
Todas as casas têm contatos, que são responsáveis por identificar se há ou
não uma peça na casa. Todo o processamento é realizado pelo
microcontrolador. O hardware é composto por três módulos, como mostra a
Figura 3.1:
Módulos do hardware
Módulo de Entrada (Jogador)
Módulo de Processamento
Módulo de Saída(Computador)
Jogada do jogador
Jogada do computador
Estado do jogo
Estado do jogo
Figura 3.1 – Módulos do hardware.
Conforme a Figura 3.1, segue uma descrição das características da cada
módulo do hardware:
Página 42
?? Módulo de Entrada: onde o jogador movimenta as peças. A movimentação
de uma peça faz com que o contato da casa em que a peça foi removida
passe para aberto, e o da casa em que a peça foi movida passe para
fechado, permitindo assim saber em o destino e a origem da peça.
?? Módulo de Processamento: com os dados do módulo de entrada, o
microcontrolador realiza o processamento, e através do algoritmo de
MINIMAX e do nível escolhido pelo jogador verifica a melhor jogada a ser
efetuada pelo computador, assim gera os dados de saída para o próximo
módulo.
?? Módulo de Saída: representa a jogada do computador. Os leds da casa a
qual o computador deseja mover a peça se apagam e os da casa onde a
peça será movida se iluminam.
3.1. Arquitetura AVR
A família AVR de microcontroladores da ATMEL é integrada com tecnologia
CMOS High-Speed e possuem arquitetura RISC de 8 bits com conceito Harvard,
tendo portanto barramentos de programa e memória separados, oferecendo alto
desempenho, aliado a um baixo consumo de potência.
Possuem 130 instruções poderosas, sendo a maioria delas executadas em
um único período de clock, podendo chegar a 16MIPS com o clock máximo de
16 MHz, sendo que os chips da linha ATmega podem ser encontrados com clock
de até 20Mhz.
Possuem ainda 32 registros de uso geral, todos conectados diretamente à
Unidade Aritmética e Lógica, permitindo que dois registros quaisquer sejam
acessados em um único ciclo de clock, por uma única instrução. Estas
características especiais proporcionam códigos mais eficientes tendo como
resultado velocidades de processamento até dez vezes mais rápido que os
microcontroladores convencionais de arquitetura CISC.
Página 43
Uma grande vantagem de se usar a arquitetura AVR é que além dela ser
projetada buscando eficiência com a linguagem de programação C, possui
também uma grande quantidade de softwares de desenvolvimento no mercado e
muitos deles gratuitos (Lanari, 2006).
4. Especificação do hardware
4.1. Funções do hardware
O tabuleiro contém em cada uma de suas casas pretas um encaixe exato para
uma peça, no qual se encontra dois contatos, um de cada lado extremo da casa,
esses contatos são responsáveis pela identificação se há ou não uma peça na
casa como mostra a Figura 4.1.
Sistema de Encaixe
MATERIAL CONDUTOR
CONTATOS
Figura 4.1 – Sistema de encaixe das peças no tabuleiro.
Cada peça do jogo contém na sua base um material condutor, sendo assim,
conforme a peça é colocada no encaixe, esses contatos são fechados,
mandando instantaneamente um sinal para o microcontrolador, o qual interpreta
a ação (peça removida ou colocada) e realiza o devido processamento.
Figura 4.2 – Foto do contato de uma das casas.
Página 44
4.1.1. Matriz de contatos
A matriz de contatos é utilizada para descobrir qual peça foi movida e para
onde ela foi. O tabuleiro contém 64 casas das quais, apenas 32 são jogáveis,
portanto, a matriz é constituída de 32 contatos, divididos em 8 linhas por 8
colunas, com 4 casas cada conforme a
Figura 4.3. Assim, quando o microcontrolador varre o tabuleiro para descobrir
se alguma peça foi movida, ele envia um sinal para cada coluna, que através da
lógica utilizada no circuito da matriz, retorna à linha onde a peça foi removida ou
posicionada.
COLUNA 8
COLUNA 7
COLU
NA 6
COLUNA 5
COLU
NA 4
COLUNA 3
COLUNA 2
COLUNA 1
LINHA 1
LINHA 2
LINHA 3
LINHA 4
LINHA 5
LINHA 6
LINHA
7
LINHA 8
Matriz de contatos
Figura 4.3 – Matriz de contatos.
Por exemplo, caso o primeiro movimento do jogo tenha sido da casa da linha
6 com a coluna 4 para a linha 5 coluna 3, o microcontrolador varre todas as
casas enviando um sinal para todas as colunas, uma de cada vez, e caso a
coluna contenha uma peça, um sinal informando em qual linha ela foi encontrada
Página 45
é retornado ao microcontrolador, sendo assim, no caso do primeiro movimento,
quando o sinal enviado for para a coluna 4 apenas as linhas 2 e 8 são ativadas,
o que indica que a peça que estava na linha 6 foi removida, e logo em seguida,
faz a mesma coisa com a coluna 3, o que fará com que as linhas 2, 4, 6 e 7
retornem um sinal indicando a presença de peça, assim o microcontrolador
guarda a posição de todas as peças do tabuleiro, para realizar os devidos
algoritmos, como mostrado na Figura 4.4.
COLUNA 8
COLUNA 7
COLU
NA 6
COLUNA 5
COLU
NA 4
COLUNA 3
COLUNA 2
COLUNA 1
LINHA 1
LINHA
2
LINHA
3
LINHA 4
LINHA
5
LINHA
6
LINHA 7
LINHA
8
Lendo o Tabuleiro
Contato Fechado
Contato Aberto
Figura 4.4 – Exemplo de funcionamento da matriz de contatos.
Página 46
4.2. Componentes utilizados
A TABELA 4.1 apresenta os componentes utilizados para o desenvolvimento
do projeto.
TABELA 4.1 – COMPONENTES UTILIZADOS
Componentes Quantidade
Microcontrolador da família AVR (Atmega64) 1
Leds Vermelhos 32
Leds Alto-Brilho 32
Latch 74HC543 10
74HC164 1
74LS04 2
DM7406 2
74LS14 2
Decodificador 74LS139 1
Diodo 1N4007 32
Display LCD 1
Placa de fibra 4
Placa Adaptadora SMD 64 Pinos 1
Demais componentes (resistores, capacitores, chaves, etc ...) vários
Página 47
4.3. Tabela de custos
A TABELA 4.2 apresenta o custo do projeto com o valor dos componentes
utilizados e o valor da mão-de-obra gasta durante a produção.
TABELA 4.2 – CUSTOS DO PROJETO
Componentes Qtde Custo Unitário Total
Microcontrolador Atmega64 1 R$ 35,00 R$ 35,00
Leds 64 R$ 0,15 R$ 9,60
Leds Alto-Brilho 32 R$ 1,60 R$ 51,20
Latch 74HC573 10 R$ 0,90 R$ 9,00
74HC154 1 R$ 3,00 R$ 3,00
74LS04 2 R$ 0,50 R$ 1,00
DM7406 2 R$ 1,32 R$ 2,64
74LS14 2 R$ 0,56 R$ 1,12
Decodificador 74LS139 1 R$ 0,80 R$ 0,80
Diodo 1N4007 32 R$ 0,05 R$ 1,60
Display LCD 1 R$ 19,80 R$ 19,80
Placa de fibra 4 R$ 15,00 R$ 60,00
Placa Adaptadora SMD 64 Pinos 1 R$ 10,00 R$ 10,00
Demais gastos - - R$ 100,00
Mão de obra (aproximadamente 4
horas por dia, durante 6 meses) 480h R$ 30,00 R$ 14.400,00
TOTAL R$ 14.704,76
Página 48
4.4. Requisitos de hardware
O microcontrolador utilizado é o ATmega64 da Atmel, pois além de possuir
uma grande quantidade de compiladores em C possui também uma RAM interna
de 4Kb, o que torna viável a execução do algoritmo de minimax. As
especificações estão listadas na TABELA 4.3.
TABELA 4.3 – ESPECIFICAÇÕES DO MICROCONTROLADOR ATMEGA64
Memória Flash (Kbytes) 64
EEPROM (Kbytes) 2
SRAM (Bytes) 4096
Freqüência Máxima (MHz) 16
Vcc (V) 2.7 – 5.5
SPI 1
UART 2
FONTE: Atmel (2006).
O chip possui uma configuração de pinos do tipo TQFP/MLF com 64 pinos
como mostra a Figura 4.5.
Figura 4.5 – Pinagem do chip Atmega64.
FONTE: Atmel (2006).
Página 49
4.5. Configurando o chip
O microcontrolador Atmega64 pode ser programado de várias maneiras, uma
delas é o modo SPI (Serial Peripheral Interface), que permite a transferência de
dados em alta velocidade entre o chip e outro dispositivo.
Para isso foi necessário montar um circuito como o da Figura 4.6, para fazer a
transferência de dados entre o computador e o chip, assim através do software
PonyProg e uma porta paralela foi possível tanto ler como programar o
dispositivo.
Figura 4.6 – Circuito para transferência de dados pelo paralela.
FONTE: PonyProg (2006).
O microcontrolador possui de fábrica algumas configurações padrões, uma
delas é o clock interno habilitado, mas como a freqüência é muito baixa, foi
necessário setar os fuses CKSEL0, CKSEL1, CKSEL2 e CKSEL3 para 0, de
forma que ele funcionasse com um clock externo.
Os 4 bits menos significativos do port F funcionam por padrão para a interface
JTAG, para habilitá-los para leitura e escrita é necessário desabilitar a interface
setando o fuse JATGEN para 1, a última alteração é no fuse M103C, que
habilita a compatibilidade com o Atmega103 impedindo a leitura e escrita no port
C, para habilitar o port é necessário setar o bit para 0.
Página 50
4.6. Diagramas em blocos
A Figura 4.7 ilustra o diagrama em blocos do hardware, o que representa todo
o sistema em partes separadas, mostrando os fluxos de entrada e saída de cada
bloco. O bloco Microcontrolador corresponde ao chip Atmega64.
A seqüência de operação do hardware, tendo como base o diagrama em
blocos é a seguinte:
1. A partida é iniciada através de um botão da inteface.
2. O Microcontrolador informa ao jogador, através do LCD, para efetuar a
jogada.
3. O jogador pressiona um botão informando ao Microcontrolador que
terminou a sua jogada.
4. O Microcontrolador inicia a leitura do tabuleiro enviando e recebendo
sinais da Matriz de Contatos.
5. Após o computador escolher a melhor jogada, envia para a Matriz de Leds
e para o LCD, os dados da jogada.
6. Volta-se para o passo 2 e repete-se a seqüência até que o jogo acabe ou
caso o jogador cancele a partida pressionando um botão.
Microcontrolador
Diagrama em Blocos
Matriz de contatos
Matriz de Leds
Botões da Interface
LCD
Movimento dasPeças do
Computador
Leitura doTabuleiro
Informações daPartida
Controle daPartida
Figura 4.7 – Diagrama em blocos do sistema.
Página 51
5. Especificação do software
5.1. Ambiente e linguagem de desenvolvimento
A linguagem utilizada para o desenvolvimento do software foi C e o ambiente
de desenvolvimento utilizado foi o AVR Studio 4 juntamente com o WinAVR
development tool, ambos podem ser adquiridos sem custos.
5.2. Interface com o usuário
A interação com o usuário é realizada através de um tabuleiro, onde na
jogada do usuário, ele remove a peça da casa de origem e encaixa a mesma na
casa de destino, assim logo em seguida o computador irá efetuar a sua jogada,
apagando a casa de origem da peça e ascendendo a casa destino através de
led’s contidos nas casas.
5.3. Diagrama de contexto
A Figura 5.1 apresenta o diagrama de contexto do sistema, onde entidades
externas interagem com o sistema através de fluxos.
Figura 5.1 – Diagrama de contexto.
Página 52
5.4. Diagrama de fluxo de dados
A Figura 5.2 mostra o diagrama de fluxo de dados do sistema. O diagrama de
fluxo de dados representa uma especificação semiformal das funcionalidades
descrevendo o sistema como uma coleção de dados que são manipulados por
funções (componentes).
Figura 5.2 – Diagrama de fluxo de dados (DFD).
Página 53
5.5. Diagrama de estados
A Figura 5.3 representa o diagrama de estados do sistema. Demonstra os
diferentes estados de um objeto durante sua vida, e o estímulo faz com que
mude de estado.
Figura 5.3 – Diagrama de estados.
5.6. Fluxograma
A Figura 5.4 mostra o fluxograma do sistema. O jogo começa com o jogador
realizando a primeira jogada, assim que ela é efetuada o computador verifica se
foi valida, caso seja inválida um alerta é emitido no display informando ao
jogador para tentar novamente, caso contrário verifica se as peças do
computador acabaram. É decretada vitória do jogador caso o computador não
tenha mais peças, do contrário o computador, através do algoritmo minimax,
monta a árvore das possíveis jogadas e escolhe a melhor. Sua jogada é
informada no display e logo em seguida os leds da casa inicial são apagados e
os da casa destino acesos. Por fim verifica se as peças do jogador acabaram,
caso tenham acabado o computador vence, caso contrário o computador informa
ao jogador que é sua vez de jogar.
Página 54
Figura 5.4 – Fluxograma.
Página 55
6. Especificação da validação do projeto
A validação foi realizada entre crianças das primeiras séries do ensino
fundamental, onde serão observadas as reações perante as dificuldades
impostas pelo software, a jogabilidade e a interação com o hardware. De modo
que as habilidades das crianças sejam graduadas na medida em que se joga,
conforme pode ser observado nas Figura 6.1 e Figura 6.2.
Figura 6.1 - Criança realizando uma jogada.
Figura 6.2 - Crianças interagindo com o tabuleiro.
Página 56
7. Resultados
7.1. Hardware
Para o desenvolvimento do hardware foram projetadas quatro placas de
circuito impresso e uma para regular a tensão de entrada, sendo a da Figura 7.1,
a placa com o circuito das duas matrizes de leds, tanto a que informa a peça do
computador quanto a das damas, conectada à tampa do tabuleiro através de
cabos flat.
Figura 7.1 – Placa do circuito da matriz de leds.
Para o processamento, desenvolveu-se uma placa para o microcontrolador,
onde é possível realizar leitura e escrita do chip via porta paralela e também
foram colocados os encaixes para os conectores que fazem a ligação com as
outras placas, como mostra a Figura 7.2.
Figura 7.2 – Placa do circuito de leitura/escrita do microcontrolador.
Página 57
Para a leitura dos contatos do tabuleiro foi desenvolvida outra placa, que
também é conectada a tampa através de cabos flat.
As outras duas placas, são as mais simples, uma com o circuito que com a
ajuda do conversor serial-paralelo 74HC164, envia dados para o display,
utilizando apenas 3 pinos do microcontrolador e regula seu contraste e na outra
placa foi projetado um regulador de tensão, que pode ser conectado a uma fonte
externa de no máximo 12V, para assim alimentar todas as placas com 5V. A
Figura 7.3 demonstra o tabuleiro finalizado.
Figura 7.3 – Tabuleiro.
7.2. Software
No desenvolvimento do software, a preocupação sempre foi com a memória,
já que o algoritmo implementado, Minimax, aumenta sua complexidade
conforme o nível da árvore de jogadas, e assim aloca cada vez mais variáveis.
Para evitar problemas com a memória e reduzir o tempo de processamento, foi
utilizado o menor número de variáveis possíveis e empregados alguns artifícios
da linguagem, como declarar funções como inline, evitando que o compilador
chame a função e sim faça uma cópia dela no local da chamada; declarar as
variáveis com mais freqüências, como as que controlam um loop, com a palavra-
Página 58
chave register, fazendo com que essas variáveis sejam armazenadas em um
registrador e não na memória.
Deste modo, foi possível processar até 6 níveis da árvore de jogadas, ou seja,
o computador conseguiu ver 6 jogadas à frente da dele, mas como o
processamento ficou muito lento, a solução foi diminuir o número de níveis para
4, o qual teve um rendimento muito satisfatório e estável.
8. Conclusão
Durante o desenvolvimento do projeto, muitos problemas apareceram, grande
parte deles nos testes com o hardware, um deles foi com as configurações do
microcontrolador, as quais foram informações difíceis de descobrir, apesar de
simples.
Outro fator que gerou bastantes problemas foi a confecção das placas de
circuito impresso, pois uma delas tinha muitas trilhas, que inicialmente foi
resolvido projetando o layout da placa com 2 faces, mas essa solução acarretou
em um problema ainda maior na confecção, já que era muito trabalhoso acertar
os dois lados da placa, assim, a solução foi adicionar vários jumpers na placa,
realizando a conexão através de fios.
Os contatos apresentaram alguma instabilidade, devido a sujeira nas casas e
oxidação do cobre, sendo necessário a implementação de um tratamento no
software, informando ao jogador, através de leds, quais peças foram
identificadas em suas casas. Para resolver esse problema uma das soluções
seria aumentar o peso das peças ou mudar o metal condutor para alumínio.
Muitos pontos podem ser melhorados ou implementados, para um perfeito
funcionamento do jogo, como criar uma memória externa deixando o computador
mais inteligente, possibilitando processar mais jogadas à sua frente, aperfeiçoar
o código fonte para um processamento mais rápido, estudar uma solução mais
eficaz para os contatos e programar algumas regras do jogo que não foram
Página 59
utilizadas como: capturar várias peças em uma jogada e verificar se ocorreu
empate.
Apesar de alguns problemas ocorridos no decorrer do projeto, este
apresentou um desempenho muito satisfatório, alcançando todas as metas
propostas e superando algumas, podendo ser comprovado na demonstração
feita na instituição de ensino Positivo Júnior, onde crianças de 1ª a 4ª série
puderam testar o funcionamento e desempenho do jogo e aprender com o
mesmo.
Página 60
9. Referências Bibliográficas
Atmel. On-line. (www.atmel.com)
Junho de 2006.
AVR Freaks. On-line. (http://www.avrfreaks.net)
Março de 2006.
CICHACZEWSKI, E. Interface Display LCD – 8031, Agosto (2002)
Confederação Brasileira. On-line. (http://www.topdam.com.br/confederacaob)
Maio de 2006.
Complex. On-line. (www.complex.cz)
Junho de 2006.
Display LCD. On-line. (http://paginas.terra.com.br/educacao/mdmau/lcd.pdf)
Junho de 2006.
FIGUEIREDO, S. M.; MAFRA, S. N.. Trabalho de Inteligência Artificial – Jogo
de Damas. RJ, Trabalho Acadêmico, Universidade Federal do Rio de Janeiro
(UFRJ).
FONSECA, F. P., Projeto final de curso. Jogo de Damas Embarcado. 2005
Jogos Antigos. On-line. (http://www.jogos.antigos.nom.br/damas.asp)
Outubro 2006.
Jogo de Damas. On-line. (http://www.xadrezregional.com.br)
Março de 2006.
LANARI, A. P.; MARTINS A. S.; Cotta L. C.. Desenvolvimento com
microcontroladores Atmal AVR. Junho (2006).
Página 61
LUGER, G. F.. Inteligência Artificial: Estruturas e estratégias para a solução de
problemas complexos. 2004, 4ª Edição
Microcontroladores – UFRGS. On-line. (http://www.inf.ufrgs.br/pct/disciplinas)
Abril de 2006.
PonyProg. On-line. (http://www.lancos.com)
Agosto de 2006.
RICH, E.; KNIGHT, K.. Inteligência Artificial. Editora Makron Books, 1994, 2ª
Edição.
RUSSEL, S.; NORVIG, P. Inteligência Artificial Tradução da Segunda Edição.
Editora Campus, 2004, 2ª Edição.
SCHUNK, L. M.; LUPPI A., Microcontroladores AVR – Teoria e aplicações
práticas. Editora Érica, 2001, 1ª Edição.
Wikipedia. On-line. (www.wikipedia.com)
Abril de 2006.