Programação Terceiro trabalho prático Semestre de Verão de 2010/2011 Neste trabalho, os alunos exercitam todos os conceitos adquiridos na unidade curricular. Cada grupo terá que entregar até 6 de Junho no respectivo site da turma os ficheiros fonte de todas as classes usadas e um relatório com a descrição das classes devidamente documentadas com as opções tomadas. O objectivo do trabalho é realizar um programa em Java para jogar ao “Jogo do Galo”, com dois jogadores ou um jogador contra o computador. O programa vai registando o número de vitórias, derrotas e empates de cada jogo. No final do jogo, antes do programa terminar, é actualizado o ficheiro da tabela de recordes, com os nomes e as pontuações dos 10 jogadores que obtiveram mais vitórias num jogo. C:\PG>java Galo | | ---+---+--| | ---+---+--| | X > _ Figura 1 Ao executar o programa como o comando java Galo a janela de comandos ficará com o aspecto da figura 1, ficando o programa à espera que o jogador do símbolo “X” indique a posição do tabuleiro onde quer jogar. As posições do tabuleiro (caso seja de 3 x 3) são identificadas C:\PG>java Galo por um número de 1 a 9. Se o utilizador introduzir o número 5 é realizada a jogada e o programa escreve um novo tabuleiro já com a jogada “X” solicitando que o outro jogador indique a posição para a jogada “O”, como mostra a figura 2. | | ---+---+--| | ---+---+--| | X > 5 Cada vez que é realizada uma jogada, o programa escreve novamente o tabuleiro com as jogadas já realizadas e solicita a jogada do outro jogador até haver vitória de um dos jogadores ou empate. A figura 3 mostra o tabuleiro após a sequência de jogadas 5, 9, 3, 7 e 1, ficando à espera da próxima jogada do jogador “O”. Se for introduzida a posição 8, o jogador “O” vence a partida, recomeçando outra em que o primeiro a jogar é “O”, como mostra a figura 4. | | ---+---+--| X | ---+---+--| | O > _ Em vez de ser introduzida uma jogada, o jogador corrente pode indicar um dos seguintes comandos, identificados por uma só letra: P – (Pontuação) Apresenta a pontuação das partidas realizadas indicando o número de partidas realizadas e as vitórias do jogador “X” e “O”. N – (Novo jogo) Recomeça uma nova partida considerando derrota do jogador corrente. Figura 2 X | | X ---+---+--| X | ---+---+--O | | O O > 8 Figura 3 U – (Undo) Desfaz a última jogada, dando hipótese do jogador anterior jogar novamente. F – (Fim) Após uma confirmação do utilizador, termina o jogo e o programa. Apresenta a pontuação das partidas realizadas (como o comando P) e caso o número de vitórias seja superior à pior da tabela dos melhores 10 (ver comando T), pergunta o nome do jogador vencedor e guarda os resultados deste jogo na tabela. T – (Tabela Top 10) Apresenta a tabela dos 10 melhores jogos realizados indicando para cada jogo o nome do jogador que obteve mais vitórias, o número de vitórias, de empates e de derrotas. H – (Help) Apresenta todos os comandos indicando a letra e a descrição sumária de cada um. X | | X ---+---+--| X | ---+---+--O | O | O O jogador O venceu. Novo jogo. Jogador O a começar. | | ---+---+--| | ---+---+--| | O > A tabela dos 10 melhores jogos tem que permanecer entre jogos, por isso, tem que ser armazenada num ficheiro, por exemplo GaloTop10.txt. A informação deste ficheiro é Figura 4 lida no início do programa e é reescrita no fim do programa caso tenha havido alterações. Para aceder ao ficheiro de texto use a classe FileAcess fornecida em anexo. O método main da classe FileAcess é um programa que exemplifica a utilização desta classe para acesso a ficheiros para leitura e escrita. Programação Terceiro trabalho prático Semestre de Verão de 2010/2011 Se o programa for iniciado com o comando java Galo auto, o jogador “X” jogará contra o computador, porque o jogador “O” terá jogadas realizadas automaticamente pelo programa, só sendo solicitadas jogadas (ou comandos) ao jogador “X”. Neste caso, para efeitos de registo na tabela dos melhores 10, considera-se “Computador” o nome do jogador “0”. Valorizam-se os trabalhos que aceitem vários níveis de jogadas automáticas e com as melhores estratégias de jogadas automáticas. Por exemplo, o comando java Galo auto 2 pode realizar jogadas automáticas com uma estratégia de nível 2. Na realização do trabalho devem ser respeitadas as seguintes regras: - Não repetir o código do mesmo algoritmo. Em vez disso, definir métodos que serão chamados várias vezes. - Cada método não dever conter mais do que dois ciclos repetitivos e não deve ocupar mais do que 25 a 30 linhas. - O código desenvolvido deve ficar agrupado em várias classes. Além das classes FileAcess e Galo, devem existir outras classes com objectivos bem definidos, por exemplo, a classe TopScores poderá ter o código e os dados relacionados com a tabela de recordes. Valorizam-se os trabalhos que usem várias classes com objectivos bem definidos. - Não usar “números mágicos” no código dos métodos. Em vez disso, definir constantes com nomes sugestivos, por exemplo: public static final int MAX_TOP_SCORES=10; . - São valorizados os trabalhos em que a dimensão do tabuleiro possa ser facilmente alterada para 2x2, 4x4, ou qualquer outra, modificando apenas o valor de uma constante, por exemplo, bastando modificar a constante SIZE_BOARD=3 para SIZE_BOARD=4. Bom trabalho. ISEL, 5 de Maio de 2011