Oposição

O primeiro projeto de programação, a ser implementado em LISP, terá como tema o jogo Oposição, explicado a seguir. O progama deverá ser entregue até o dia 29/08/99 às 23:59.  A forma de entrega será definida em breve (provavelmente via Web ou e-mail).

Abaixo encontram-se as explicações sobre o programa.

Tabuleiro

O jogo será jogado num tabuleiro 8x8, como o de xadrez. A numeração do tabuleiro deverá seguir o seguinte padrão:
    _____ _____ _____ _____ _____ _____ _____ _____
   |     |     |     |     |     |     |     |     |
8  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
7  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
6  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
5  |     |     |     |  A  |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
4  |     |     |     |     |     |     |  B  |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
3  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
2  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
1  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|

      1     2     3     4     5     6     7     8
As casas serão representadas por listas de dois átomos numéricos da forma (l c) , onde l é a linha e c é a coluna. Por exemplo, as posições marcadas no tabuleiro acima são A = (5 4) e B = (5 7).
 

Regras do Jogo

As peças do jogo são: o rei branco, o rei preto, e o peão preto.  Suas posições iniciais estão indicadas abaixo, sendo B o rei branco, P o rei preto e PP o peão preto:
 
    _____ _____ _____ _____ _____ _____ _____ _____
   |     |     |     |     |     |     |     |     |
8  |  B  |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
7  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
6  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
5  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
4  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
3  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
2  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
1  |     |     |     |     |     |     |  P  | P P |
   |_____|_____|_____|_____|_____|_____|_____|_____|

      1     2     3     4     5     6     7     8
Joga um jogador de cada vez. Não é permitido "passar" a vez. O Branco sempre começa. O objetivo do branco é "comer" (ou seja, ocupar a casa) do peão preto, e ele tem 30 lances para fazer isso.  O objetivo do preto é impedir que o branco coma o peão preto nos primeiros trinta lances.  Não há empate.

Os movimentos são como no jogo de xadrez. Os reis andam uma casa de cada vez, em qualquer direção (vertical, horizontal ou diagonal). O peão preto não se move.   O rei preto não pode ocupar a mesma casa do seu peão.  Os reis não podem encostar um no outro.  Mais formalmente, defina duas casas (l1 c1) e (l2 c2) como sendo adjacentes quando max(|delta-l|, |delta-c|) = 1, onde delta-l = l1 - l2 e delta-c = c1 - c2.  Cada rei só pode mover-se para uma casa adjacente a que ele esta.  E os reis nunca podem ocupar casas adjacentes.
 

Exemplo de partida

A seguir exibimos ums partida para ilustrar melhor como é o jogo. Os lances são indicados por casas da forma (l c) , onde (l c) é a posição da peça que está sendo jogada,  depois do lance.
Branco             Preto

(7 1)              (2 7)
(6 1)              (2 6)
(5 2)              (3 6)
(4 3)              (3 5)
(3 3)              (4 5)
(2 4)              (3 6)
(1 5)              (2 7)
(2 5)              (1 7)
Nesta posição o preto já está perdido.  O branco deve aproximar-se cada vez mais, encurralando o rei preto, que se verá impossibilitado de jogar as melhores defesas por culpa do próprio peão que visa defender. Posição atual:
    _____ _____ _____ _____ _____ _____ _____ _____
   |     |     |     |     |     |     |     |     |
8  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
7  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
6  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
5  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
4  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
3  |     |     |     |     |     |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
2  |     |     |     |     |  B  |     |     |     |
   |_____|_____|_____|_____|_____|_____|_____|_____|
   |     |     |     |     |     |     |     |     |
1  |     |     |     |     |     |     |  P  | P P |
   |_____|_____|_____|_____|_____|_____|_____|_____|

      1     2     3     4     5     6     7     8

O que voce deve implementar

Voce deverá escrever um programa em LISP que joga este jogo, tanto do lado do branco como do lado do preto. Seu programa deverá exportar apenas quatro funções:
(branco-inicia)
Esta função, sem argumentos, deve inicializar o que for necessário e retornar o primeiro lance do branco .
(branco-responde jogada)
Esta função recebe um argumento, que reflete a última jogada do preto, e deve retornar a próxima jogada do branco.
(preto-inicia jogada)
Esta função recebe um argumento, que foi a primeira jogada do branco. Ela deve inicializar o que for necessário e retornar o primeiro lance do preto.
(preto-responde jogada)
Esta função recebe um parâmetro, que reflete a última jogada do branco, e deve retornar a próxima jogada do preto.

Para encaspular seu programa num pacote, inicie código com as seguinte três linhas:

(make-package  'nome)
(in-package nome)
(lisp::use-package 'lisp)
onde nome é o seu RA, precedido de "ra". Exemplo: seu login é 973451, use ra973451 como nome.

Funcionamento mínimo

O funcionamento mínimo é importante pois todo aluno que não o cumprir vai para exame direto.

Neste projeto, o funcionamento mínimo é o seguinte: seu programa não poderá perder mais do que 10% das partidas disputadas por ter feito jogadas inválidas.

Avaliação

Atenção! Isto mudou um pouco, para compatibilizar-se com legislação anterior (plano do curso)

Os programas de todos os alunos que entregarem no prazo, ou até dez dias após o prazo, serão colocados num campeonato. Para cada dia de atraso, o aluno perde um ponto na nota. Este campeonato consiste em jogar uns contra os outros e ver quem acumula mais pontos. Os pontos são contados como: 1 para vitória, 0 para derrota (jogada inválida conta como derrota, independentemente da posição).

Os jogadores serão ordenados pelo total de pontos. Os que não fizeram o funcionamento mínimo serão removidos da lista. O primeiro colocado tira 10 (dez). O último colocado fica com 5 (cinco). Os outros terão sua nota calculada por interpolação de seu total de pontos em relação ao interalo [5,10]

Falta decidir que nota dar aos que não cumprirem o funcionamento mínimo. Ainda não estabeleci um critério, mas será alguma nota entre 0 e 5 levando em conta a freqüência com que o programa faz jogadas inválidas.


Joao Meidanis

Last modified: Thu Aug 12 00:46:36 EST 1999 by JM