MC336/MC346 - Paradigmas de Programação

Turmas AB - Segundo Semestre de 2012

Voltar à pagina inicial da disciplina

Instruções para o jogador em Java


Introdução

A criação e execução do jogador em Java é um pouco mais complexa do que foi em Prolog e em Lisp. Nestas últimas, era necessário apenas enviar ao campeonato um arquivo contendo o código fonte, que precisava apenas conter os predicados ou as funções previamente especificados. No campeonato de Java você deverá criar um jogador que obedeça a algumas regras simples de orientação a objetos. Além disso, será permitida a criação de um número ilimitado de classes para que uma boa estratégia seja implementada. Dessa forma, você terá permissão de enviar vários arquivos “.java” ao servidor, compactados no formato “.zip”.

O presente documento visa instruir os alunos a criar um jogador que seja considerado válido para o campeonato. Para tanto, pressupõe-se que você já tenha algumas noções de orientação a objetos em Java.


Arquivos necessários

Para acompanhar as intruções é necessário que você tenha em seu computador:


Biblioteca spacelib

A biblioteca spacelib é composta de um conjunto de interfaces necessárias para que o seu código seja compilado. Além disso, a biblioteca fornece um modo de execução para que você possa testar o seu jogador localmente. A figura abaixo mostra as interfaces presentes na biblioteca.


Criação do jogador

Para criar o seu jogador, o ponto de partida será o jogador vazio. Para tanto, utilize o editor de texto de sua preferência.

Observe no jogador vazio a declaração da classe pública:

public class raXXXXXX implements PlayerInterface {

Indica que a classe pública satisfaz o comportamento especificado pela interface PlayerInterface, cuja definição está na biblioteca spacelib.jar vista na seção anterior. O fato de implementar esta interface indica que esta classe possui os métodos start, myPlay e lastPlay, essenciais para que o campeonato possa se comunicar com o jogador:

O método start recebe como parâmetro um objeto que implementa a interface BoardInterface. Dessa forma, é possível acessar os métodos deste objeto usando a definição da própria interface. O método myPlay, por outro lado, deverá enviar ao campeonato uma instância de uma classe que implementa a interface MoveInterface e, por conseguinte, a classe que implementa MoveInterface lhe obriga a criar uma classe que implemente PositionInterface.

Resumindo, para que o seu jogador seja válido, você deverá obrigatoriamente criar classes que implementem PlayerInterface, MoveInterface e PositionInterface. Opcionalmente você poderá criar classes que implementem BoardInterface (leia o arquivo EmptyBoard.java para maiores detalhes) ou quantas classes de suporte achar necessário. Recomenda-se que você escreva cada classe em um arquivo separado, uma prática comum entre os programadores de Java.


Método de compilação

Para compilar o seu jogador localmente (recomendamos que faça isso antes de enviar ao servidor), você deverá utilizar a biblioteca spacelib.jar.

O comando para compilar o código é o javac, que deverá receber a localização do arquivo jar através da opção classpath. Dessa forma, procure no seu computador pelo executável javac, que por padrão, está na pasta bin do diretório onde você instalou o JDK.

No Windows, supondo que você instalou o JDK no diretório “C:\Arquivos de Programas\Java\jdk7_05” e colocou o arquivo spacelib.jar no diretório C:\java, a linha de comando para compilar o seu arquivo raXXXXXX.java é:

C:\Arquiv~1\Java\jdk7_05\bin\javac -classpath .;C:\java\spacelib.jar raXXXXXX.java

No Linux, supondo que você instalou o JDK no diretório /usr/lib/jvm/java-7-oracle/ e colocou o arquivo spacelib.jar no diretório /java/, a linha de comando para compilar o seu arquivo raXXXXXX.java é:

/usr/lib/jvm/java-7-oracle/bin/javac -classpath .:/java/spacelib.jar raXXXXXX.java

Observe que você deverá executar esse comando no mesmo diretório do arquivo raXXXXXX.java. Caso o arquivo raXXXXXX.java utilize outras classes que não foram compiladas, o comando javac as compilará automaticamente.


Interface de execução

Agora que você já está com o jogador compilado, é possível testá-lo.

Execute a biblioteca spacelib.jar passando como parâmetro o nome do seu jogador sem a extensão .java.

No Windows, considerando os diretórios do exemplo de compilação da seção anterior, use a seguinte linha de comando:

C:\Arquiv~1\Java\jdk7_05\bin\java -classpath .;C:\java\spacelib.jar GameViewer raXXXXXX

No Linux, também considerando os diretórios do exemplo de compilação da seção anterior, use a seguinte linha de comando:

/usr/lib/jvm/java-7-oracle/bin/java -classpath .:/java/spacelib.jar GameViewer raXXXXXX

Será aberta a seguinte interface gráfica:

A interface gráfica é dividida em duas áreas. A primeira área, identificada como “Results”, mostrará o histórico de interações entre você e seu jogador. Uma informação importante nesse histórico é o tempo que o seu jogador demorou para realizar as jogadas. Não esqueça que o campeonato não esperará mais de um segundo para receber a jogada.

A segunda área é composta das caixas de texto e botões necessários para que você acesse os métodos start, myPlay e lastPlay de seu jogador. O botão print-field imprime o tabuleiro do jogo. O formato de entrada segue o padrão:

**Start:Columns:BallPosition:WhitePositions:**BlackPositions

**BallPosition:**Position

**WhitePositions:**Position1;Position2;Position3

**BlackPositions:**Position1;Position2;Position3

Position: Line,Column

**lastPlay:**Position1-Position2

Por exemplo, um jogo pode ser iniciado com o seguinte comando inserido no campo de texto “start” e clicando no botão “»” ao lado do campo de texto.

5:3,3:1,1;1,2;1,3;1,4;1,5;2,1;2,2;2,3;2,4;2,5:4,1;4,2;4,3;4,4;4,5;5,1;5,2;5,3;5,4;5,5

Em seguida, o jogo pode continuar fornecendo-se a seguinte jogada:

4,3-3,3

Pede-se uma jogada ao jogador java que fornece:

2,2-3,3

Por fim, pede-se para imprimir o tabuleiro.

A figura abaixo ilustra a inserção das jogadas acima:

Na interface gráfica não há uma verificação para saber se o jogo acabou e, muito menos, para saber se alguma das jogadas foi inválida. Espera-se que, localmente, você seja capaz de identificar ambos os eventos. Entretanto, durante o campeonato, assim como ocorreu nos campeonatos anteriores, a sua jogada será validada e o sistema identificará o término da partida.


Enviando o jogador

Antes de enviar o seu jogador, você deverá compactar todas as suas classes (somente os arquivos com extensão .java) em um arquivo com a extensão .zip (mesmo que tenha criado o jogador em um arquivo só). Preste muita atenção no modo como você está compactando os arquivos, pois é uma exigência que a classe raXXXXXX (onde XXXXXX é o seu ra), que implementa a interface PlayerInterface, esteja na raiz do arquivo compactado e não dentro de uma pasta qualquer.