Escolar Documentos
Profissional Documentos
Cultura Documentos
Exemplo2 PDF
Exemplo2 PDF
Programação em Lógica
Spider 4 em Linha
(Trabalho 12)
Grupo 55 (Turma 5)
80509011 – ei08011@fe.up.pt – André Daniel Moreira Pinto Riboira
70509052 – ei07052@fe.up.pt – João Guilherme Ribeiro de Brito
Página 1 de 10
Resumo
Este trabalho pretende implementar o jogo “Spider 4 em Linha” em linguagem Prolog,
possibilitando jogos com dois adversários humanos, com um adversário humano e um
computador ou com dois adversários computadores.
Para mais informações relativamente às regras deste jogo por favor consulte o capítulo
“Descrição do Problema”.
Introdução
O objectivo deste trabalho é adquirir conhecimentos de programação lógica utilizando a
linguagem de programação Prolog, bem como utilizar conceitos lógicos para resolução de
problemas associados a regras e jogadas de jogos de tabuleiro.
A escolha deste jogo deve-se sobretudo à simplicidade das regras, que permite a rápida
compreensão por qualquer jogador que nunca o tenha jogado, embora possibilite
estratégias de jogo interessantes.
Este jogo tem algumas particularidades que o distinguem da maioria dos restantes jogos
de tabuleiro, nomeadamente o facto das peças serem atraídas para as extremidades do
tabuleiro, tal como se estivessem sujeitas a forças magnéticas.
A maior motivação para a escolha deste jogo foi sem dúvida o facto de derivar de um jogo
extremamente simples (o 4 em Linha) mas ter o desafio da lei da gravidade a que está
sujeito o jogo original ser nesta versão substituída por forças em 4 direcções distintas, o
que possibilita jogadas e estratégias que surpreendem o jogador menos atento.
Descrição do Problema
Este jogo é composto por um tabuleiro de 64 casas (8 casas por 8 casas), e poderá ser
jogado por dois jogadores. O funcionamento é muito semelhante ao “4 em Linha”
tradicional, mas com a diferença que os jogadores podem inserir peças a partir de
qualquer um dos lados do tabuleiro, o que vai alterar radicalmente a estratégia do jogo.
Página 2 de 10
Exemplo do tabuleiro na posição inicial:
T1 T2 T3 T4 T5 T6 T7 T8
E1 D1
E2 D2
E3 D3
E4 D4
E5 D5
E6 D6
E7 D7
E8 D8
F1 F2 F3 F4 F5 F6 F7 F8
Objectivo do Jogo
O objectivo deste jogo, tal como do “4 em Linha” original, é conseguir um alinhamento de
4 peças da cor do jogador no tabuleiro. Esse alinhamento poderá ser horizontal, vertical
ou diagonal.
Página 3 de 10
Exemplo de uma jogada inicial do jogador com as peças brancas, inserindo a peça a partir da
entrada D4:
T1 T2 T3 T4 T5 T6 T7 T8
E1 D1
E2 D2
E3 D3
E4 D4
E5 D5
E6 D6
E7 D7
E8 D8
F1 F2 F3 F4 F5 F6 F7 F8
Exemplo de uma jogada do jogador com as peças pretas, inserindo a peça a partir da entrada T4:
T1 T2 T3 T4 T5 T6 T7 T8
E1 D1
E2 D2
E3 D3
E4 D4
E5 D5
E6 D6
E7 D7
E8 D8
F1 F2 F3 F4 F5 F6 F7 F8
Página 4 de 10
Exemplo de uma jogada do jogador com as peças brancas, inserindo a peça a partir da entrada F1:
T1 T2 T3 T4 T5 T6 T7 T8
E1 D1
E2 D2
E3 D3
E4 D4
E5 D5
E6 D6
E7 D7
E8 D8
F1 F2 F3 F4 F5 F6 F7 F8
Exemplo de uma jogada do jogador com as peças pretas, inserindo a peça a partir da entrada D4:
T1 T2 T3 T4 T5 T6 T7 T8
E1 D1
E2 D2
E3 D3
E4 D4
E5 D5
E6 D6
E7 D7
E8 D8
F1 F2 F3 F4 F5 F6 F7 F8
Vencedor da Partida
O jogador que conseguir colocar 4 peças seguidas da sua cor (válido em leituras
horizontais, verticais ou diagonais) ganha o jogo.
Página 5 de 10
Exemplo de uma jogada do jogador com as peças brancas, inserindo a peça a partir da entrada F1 e
ganhando o jogo:
T1 T2 T3 T4 T5 T6 T7 T8
E1 D1
E2 D2
E3 D3
E4 D4
E5 D5
E6 D6
E7 D7
E8 D8
F1 F2 F3 F4 F5 F6 F7 F8
Fim da Partida
A partida deste jogo chega ao final se for encontrado um vencedor, ou caso nenhum
jogador consiga esse objectivo e todas as casas do tabuleiro sejam preenchidas com
peças, o jogo acaba em empate.
Página 6 de 10
Possível estado intermédio:
estado = [ [ B, V, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ B, P, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ V, V, V, P, V, V, V, V ] ] .
Possível estado final:
estado = [ [ B, V, V, V, V, V, V, V ],
[ B, V, V, V, V, V, V, V ],
[ B, V, V, V, V, V, V, V ],
[ B, P, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ V, V, V, V, V, V, V, V ],
[ V, V, V, P, V, V, V, V ],
[ V, V, V, P, V, V, V, V ] ] .
Representação de um Movimento
Em cada jogada, o jogador apenas terá que indicar qual a entrada através da qual
pretende inserir a peça no tabuleiro. A representação deste movimento poderá ser
efectuada da seguinte forma:
inserir_peca(Jogador, Entrada, Posicao, Tabuleiro, NovoTabuleiro).
Nesta situação, o programa recebe o jogador, a entrada (T: topo, F: fundo, E: esquerda, D:
direita) e a posição da entrada (de 1 a 8). Recebe também o tabuleiro actual e guarda o
tabuleiro com o resultado em NovoTabuleiro.
Para efectuar uma jogada, iremos desenvolver diversos predicados de manipulação da
matriz, de forma a que o predicado da jogada seja um único para qualquer uma das
entradas do tabuleiro. Assim sendo, iremos desenvolver um predicado que troque as
colunas de uma matriz pelas suas linhas (de forma a tratarmos as entradas do topo e do
fundo), um que inverta uma linha (de forma a tratarmos as entradas do topo e da
esquerda), e predicados para efectuar a jogada (retornando uma matriz com o resultado).
O procedimento a seguir será o seguinte:
● Verifica se a entrada é a de topo ou do fundo. Se for, troca as colunas pelas linhas
da matriz.
● Obtém a linha correspondente à jogada.
● Verifica se a entrada é a de topo ou da esquerda. Se for, inverte a linha obtida.
● Efectua a jogada: procura a primeira ocorrência de “v” (vazio) e substitui-a pela
letra associada ao jogador.
● Gera a matriz com a nova linha gerada pela jogada e retorna-a como resultado
(novo tabuleiro).
Página 7 de 10
Visualização do Tabuleiro
O tabuleiro do jogo será representado em modo de texto, sobre forma de uma matriz de
caracteres. Para uma melhor visualização será utilizado o caracter “O” para representar
as peças brancas e o caracter “X” para as peças pretas. Além do tabuleiro de jogo serão
também representadas as entradas do tabuleiro. Assim sendo, um exemplo de uma
possível representação de um tabuleiro seria o seguinte:
T1 T2 T3 T4 T5 T6 T7 T8
+---+---+---+---+---+---+---+---+
E1 | O | | | | | | | | D1
+---+---+---+---+---+---+---+---+
E2 | | | | | | | | | D2
+---+---+---+---+---+---+---+---+
E3 | | | | | | | | | D3
+---+---+---+---+---+---+---+---+
E4 | O | X | | | | | | | D4
+---+---+---+---+---+---+---+---+
E5 | | | | | | | | | D5
+---+---+---+---+---+---+---+---+
E6 | | | | | | | | | D6
+---+---+---+---+---+---+---+---+
E7 | | | | | | | | | D7
+---+---+---+---+---+---+---+---+
E8 | | | | X | | | | | D8
+---+---+---+---+---+---+---+---+
F1 F2 F3 F4 F5 F6 F7 F8
Página 8 de 10
Bibliografia
Para realização do trabalho:
[1] Eugénio Oliveira e Luís Paulo Reis, Materiais da Disciplina de Programação em
Lógica, disponível online a partir de http://www.fe.up.pt/~eol/LP/0809 (Consultado em
Outubro de 2008).
[2] Vários Autores, SICStus Prolog User’s Manual, Release 3.10.1, Abril de 2003.
Para a realização do relatório:
[3] Vários Autores, BrainKing – Regras do Jogo (Spider 4 em Linha), disponível online em
http://brainking.com/pt/GameRules?tp=16 (Consultado em Outubro de 2008)
Página 9 de 10
Anexos
Representação do Estado Inicial
tabuleiro( [ [ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ],
[ v, v, v, v, v, v, v, v ] ] ).
% roda_matriz(matriz, resultado)
roda_matriz([HE|T],R):- A=HE, linhas(T,B,TB), linhas(TB,C,TC), linhas(TC,D,TD),
linhas(TD,E,TE), linhas(TE,F,TF), linhas(TF,G,TG),
linhas(TG,H,_), colunas(A,B,C,D,E,F,G,H,R).
linhas([H|T],H,T).
colunas([],[],[],[],[],[],[],[],[]).
colunas([HA|TA],[HB|TB],[HC|TC],[HD|TD],[HE|TE],[HF|TF],[HG|TG],[HH|TH],[H|T]):-
colunas(TA,TB,TC,TD,TE,TF,TG,TH,T),H=[HA,HB,HC,HD,HE,HF,HG,HH].
Página 10 de 10