Serei um pouco extenso com relação ao problema, mas preciso da ajuda de todos para implementar esse jogo!
Implementação simples do jogo Papel, Pedra e Tesoura.
Implementar uma classe Elemento e as classes filhas Papel, Pedra e Tesoura; todas no pacote exercicio.poo.regras. A classe Elemento deve ser declarada como abstrata [public abstract class Elemento()] -
Criar um método abstrato combate, que retorne um int, e receba um Elemento como parâmetro. Este método será implementado pelas classes filha, onde testarão se o próprio elemento em combate com o passado por parâmetro, gera sua vitória ou derrota. Por ex: uma classe pedra recebe o elemento e testa, se ele for papel, pedra perde e retorna -1, se tesoura, pedra ganha e retorna 1, se pedra ocorre um empate, retornando 0.
Ainda na classe Elemento, implemente um método concreto (não abstrato) getNome, que retorne o nome da classe. Para pegar o nome da classe, utilize o seguinte comando: this.getClass().getSimpleName(). Implemente o método concreto get para o atributo de valor de escolha (descrição de escolha abaixo). Note que o atributo deve ser declarado como protected, para poder ser acessado diretamente pela classe filha.
Nas classes filhas (Pedra, Papel e Tesoura), implemente a sobrecarga do método abstrato, como descrito acima. Crie também um construtor para cada uma delas, e atribua ao atributo de valor de escolha, o valor correspondente.
Implementar uma classe PPT com o método main, que iniciará a interface do jogo chamando a classe Gui.
A classe PPT deve estar no raiz da aplicação, e Gui no pacote exercicio.poo.gui.
A cada rodada, deve mostrar as informações: número da rodada, pontuação do jogador e do computador, e as opções de escolha para o jogador (1) - Papel, (2) - Pedra, (3) - Tesoura, (9) - Sair.
Para controlar cada rodada, implemente uma classe Rodada no pacote de regras. Para controlar as rodadas, implemente uma classe Jogo no mesmo pacote.
Na classe Rodada, crie um construtor que receba um parâmetro a ser atribuído como número da rodada, crie um método get para retornar o número da rodada. Crie atributos do tipo Elemento para o jogador e o computador, cada um destes atributos será utilizado como escolha da rodada. Crie os métodos set e get para eles. Para o método set de escolha do computador, não permita que um parâmetro seja passado, ao invés, gere aleatoriamente (com Math.Random [pesquisar] - (int)(Math.random() * 3) + 1) a escolha.
Na classe rodada, implemente um método que retorne a pontuação obtida pelo vencedor e outro para o computador. A pontuação é baseada no retorno do combate de suas escolhas.
Na classe Jogo, crie um atributo para controlar qual a próxima rodada, crie atributos para conter a pontuação do computador e do jogador. Crie os métodos get para eles (não queremos que outro objeto altere estes valores, apenas consulte-os).
Em Jogo, crie um atributo do tipo Vector, e instancie como novo Vector. Este atributo irá conter, em cada um de seus registros, uma rodada do jogo. Crie um método de nova rodada, que recebe por parâmetro o elemento de escolha do jogador. Neste método, incremente o número da rodada, instancie uma nova rodada passando seu número. Passe a escolha do jogador, e a escolha do computador (chamando os métodos set correspondentes). Adicione a rodada ao vetor de rodadas, utilizando o método add. Some a pontuação de jogador e computador, no jogo, com o resultado de combate de cada um nesta rodada.
Em Rodada, crie um método toString que retorne as seguintes informações: Num rodada ? Jogador (escolha:pontuação) ? Computador (escolha:pontuação).
Ainda em Jogo, crie um método toStringUltimaRodada, que retorne um String com as informações da última rodada: Num rodada ? Jogador (escolha:pontuação) ? Computador (escolha:pontuação).
DICA: para manipular um objeto retornado do Vector, coloque antes o tipo de objeto que estará manipulando, por ex: Rodada r = (Rodada)v.get(10). Onde, neste caso, 10 é a posição do objeto no vetor.
Na Gui, crie um método para gerar a instancia do elemento correto, a partir da escolha do jogador no menu.
Após o usuário escolher sua entrada pelo menu, se ela estiver dentro das opções de jogo, peça para o jogo criar uma nova rodada, e passe a instância do elemento correto.
Quando o jogador escolher para sair, liste todas as rodadas e a pontuação final obtida.
