Jogo da Velha Modificado

O segundo projeto de programação, a ser implementado em PROLOG, terá como tema o Jogo da Velha Modificado, explicado a seguir. O progama deverá ser entregue até o dia 26/09/1999 às 23:59. A forma de entrega será via Web, semelhantemente ao que ocorreu com o primeiro projeto.

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

Tabuleiro

O jogo será jogado num tabuleiro 3x3, como o de jogo da velha normal. A numeração das casas deverá seguir o seguinte padrão:
    _____ _____ _____
   |     |     |     |
   |  1  |  2  |  3  |
   |_____|_____|_____|
   |     |     |     |
   |  4  |  5  |  6  |
   |_____|_____|_____|
   |     |     |     |
   |  7  |  8  |  9  |
   |_____|_____|_____|

As casas serão representadas por um número entre 1 e 9, inclusive.

Regras do Jogo

Cada jogador tem três pedras. Quem joga primeiro será chamado de X, e o outro jogador é O. O objetivo de cada jogador é posicionar suas três pedras em linha reta (vertical, horizontal ou diagonal). O tabuleiro começa vazio, e alternadamente os jogadores fazem suas jogadas, comçando pelo jogador X. Enquanto não estiverem as seis pedras no tabuleiro, uma jogada consiste em colocar uma pedra em uma casa vazia. Quando as três pedras de cada jogador já estiverem no tabuleiro, uma jogada passa a ser a movimentação de uma pedra para uma posição vizinha não ocupada. Define-se como casa vizinha aquela à qual se pode chegar movendo-se uma posição no sentido vertical, horizontal, ou diagonal.

Cada jogador só pode mexer em suas próprias pedras. Não é permitido "passar" a vez.

Exemplo de partida

A seguir exibimos umapartida para ilustrar o jogo. Os três primeiros lances de cada jogador são indicados por casas, e os restantes por listas da forma (a b), onde a é a posição de origem e b é a posição de destino da pedra que foi movida.

X O
1 5
6 3
7 4
[1, 2] [4, 1]
[7, 4] [5, 8]
[2, 5]

O X venceu, pois conseguiu fazer uma linha reta. Note que o O já estava perdido na penúltima jogada, pois só podia mexer a pedra 5, deixando o lugar vago para o X ganhar. Posição final:

    _____ _____ _____
   |     |     |     |
   |  O  |     |  O  |
   |_____|_____|_____|
   |     |     |     |
   |  X  |  X  |  X  |
   |_____|_____|_____|
   |     |     |     |
   |     |  O  |     |
   |_____|_____|_____|

A partida pode terminar empatada se nenhum dos jogadores tiver ganho depois de trancorridas n jogadas.

O que voce deve implementar

Voce deverá escrever um programa em PROLOG que joga este jogo, tanto do lado do X como do lado do O. Seu programa deverá ter quatro predicados:

x_inicia(-Jogada)

Este predicado será chamado com uma variável livre como argumento e deverá instanciá-la com o valor da casa onde seu programa jogará o primeiro lance como X. Além disso, pode executar as inicializações que julgar necessárias.

x_responde(+Jogada, -Resposta)

Este predicado será chamado com o primeiro argumento instanciado com o valor da última jogada do O, e deve instanciar o seu segundo argumento com o valor da jogada-resposta.

o_inicia(+Jogada, -Resposta)

Este predicado será chamado com uma variável livre como argumento e deverá instanciá-la com o valor da casa onde seu programa jogará o primeiro lance como O. Além disso, pode executar as inicializações que julgar necessárias.

o_responde(+Jogada, -Resposta)

Este predicado será chamado com o primeiro argumento instanciado com o valor da última jogada do X, e deve instanciar o seu segundo argumento com o valor da jogada-resposta.

Para evitar conflitos com outros programas, usaremos módulos. Cada módulo definirá um espaço de nomes diferente, evitando conflitos. É muito simples usar módulos em SWI-Prolog. Basta que seu programa comece com a seguinte linha:

:- module(raNNNNNN, []).
onde NNNNNN é o seu RA. Exemplo: se seu login é 973451, use ra973451 como nome do módulo. Seu programa deve ser submetido num arquivo chamado raNNNNNN.prolog, onde novamente NNNNNN é o seu RA.

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

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: 3 para vitória, 1 para empate, 0 para derrota (jogada inválida conta como derrota).

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]. Após tudo isso, serão descontados os pontos devidos aos dias de atraso, se houver.

A nota dos que não cumprirem o funcionamento mínimo será 5 multiplicado pela fração de partidas onde o programa não fez jogadas inválidas.

Como sempre, programas iguais ou suficientemente parecidos serão punidos com nota zero para todos os envolvidos.


Joao Meidanis

Last modified: Sat Sep 25 15:40:11 EST 1999 by JM