Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Professores: Gustavo Soares (turma 1) Raquel Lopes (turma 2) Livia Campos (turma 3) Kyller Gorgônio (turma 4) Disciplina: Laboratório de Programação 2 Período: 2014.1 Laboratório 02 Neste laboratório iremos experimentar a edição e compilação de programas simples em Java, explorando entrada de dados através do teclado, estruturas de repetição e mais detalhes de operadores em Java. Importante: Antes da definição de cada classe escreva o seu nome em comentário (/*Aluno: <seu nome>*/); A partir deste roteiro você poderá usar o Eclipse como ambiente de desenvolvimento Java; Crie no eclipse o projeto lab02 (File -> New -> Java Project) e programe todos os exercícios dentro do pacote lp2.lab02 que está dentro deste projeto; Neste laboratório você vai usar estruturas de desvio e repetição, além de tipos primitivos e leitura a partir da entrada padrão (use a classe java.util.Scanner). Pode também fazer modularização usando métodos. Porém, não usar arrays. Consulte o material da disciplina teórica aqui. Entendendo o problema Pedra-Papel-Tesoura é um jogo simples para ser jogado apenas com as mãos e que não requer nenhuma habilidade especial ou equipamentos específicos. O jogo é frequentemente usado como método de seleção (como na escolha de equipes para a prática desportiva, por exemplo), assim como lançar moedas, jogar dados, ou tirar par-ou-ímpar. As regras são bastante simples. Os jogadores devem simultaneamente esticar a mão, formando um símbolo (que significa pedra, papel ou tesoura) e comparam os símbolos para decidir quem ganhou, da seguinte forma: Pedra ganha da tesoura (amassando-a ou quebrando-a); tesoura ganha do papel (cortando-o); papel ganha da pedra (embrulhando-a). A pedra é simbolizada por um punho fechado; a tesoura, por dois dedos esticados; e o papel, pela mão aberta. Caso dois jogadores façam o mesmo gesto, ocorre um empate, e geralmente se joga de novo até desempatar. Uma variação desse jogo é o Pedra-Papel-Tesoura-Lagarto-Spock. Uma generalização desse jogo é criar um índice para cada um dos elementos (pedra, papel, tesoura, etc.), onde esse índice é um número de 1 até n (onde n é o número total de elementos). Por exemplo, podemos ter: pedra = 1, papel = 2 e tesoura = 3. Cada um dos jogadores escolhe um número entre 1 e n, e o vencedor pode ser escolhido por uma operação módulo trivial. Digamos que o jogador 1 escolha o número i e o jogador 2 escolha o número j. O resultado do jogo pode ser calculado usando a fórmula res = |(n + i – j) mod n| 1 Se: 0 < res ≤ n/2, então o jogador 1 ganha; res > n/2, então o jogador 2 ganha; res = 0, então houve empate. Passo1: Implemente um programa chamado PedraPapelTesoura.java para simular o jogo descrito acima. Considere o jogo para n = 3 (mas, seu programa deve ser facilmente estendido para suportar outros valores de n); 2 jogadores. Os valores de cada jogador serão lidos do teclado usando a classe java.util.Scanner (consulte o material aqui para lembrar como se usa essa classe). Seu programa deve informar o jogador vencedor da rodada. Um exemplo de execução do seu programa: Pedra (1), Papel (2), Tesoura (3)? 3 Pedra (1), Papel (2), Tesoura (3)? 2 TESOURA - PAPEL Jogador 1 Ganhou! Passo3: O que acontece se o usuário fornecer uma entrada inválida para seu programa? Certifique-se de estar lendo um número inteiro no intervalo [1, n]. Caso o usuário informe um outro tipo de dado ou um inteiro negativo, solicite um valor, até que o valor fornecido pelo usuário seja válido. Passo3: Seu programa fez o maior sucesso e agora você deve modificá-lo para permitir várias partidas (o programa continua até que o usuário digite -1). Passo4: Modularize seu código para que ele fique mais organizado, simples e possa ser mais reusado. Experimente, por exemplo, modularizar a leitura da opção de cada jogador, a jogada e a decisão do vencedor. Jogo++: Que tal fazer um dos jogadores ser o computador? Uma dica é usar um gerador de números randômicos (java.util.Random) que escolha o valor do computador. Jogo++: No jogo quando se tem empate, automaticamente inicia-se uma nova partida. Modifique seu programa para permitir isso. Para exercitar mais 1. Quantos pares de coelhos podem ser gerados de um par de coelhos em 365 dias (1 ano)? Um homem ganhou um par de coelhos que serão criados em um ambiente inteiramente fechado. Quantos pares de coelhos podem ser gerados deste par em um ano, se de um modo natural a cada mês ocorre a produção de um par e um par começa a produzir coelhos quando completa dois meses de vida? Escreva um programa em Java que resolva este enigma. 2. Quantas vezes você deve rolar um par de dados (bozó, etc.) antes que eles mostrem os “olhos de cobra”? Você pode fazer o experimento rolando os dados agora... Escreva um programa de computador que simula esse experimento. O programa deve imprimir na tela o número de rodadas necessárias para os dados mostrarem os “olhos de cobra”. a. Dica: para simular a rolagem de um dado você pode usar a classe java.util.Random. Algumas dicas que podem ser úteis 1. Lembrando as estruturas de repetição apresentadas no material da disciplina: 2 for(int i=0; i<LIMITE; i++){ //LIMITE é uma constante bloco de comandos do for } while(condição verdade){ bloco de comandos do while } do{ bloco de comandos do while }while(condição verdade); O comando de decisão switch (para situações com ifs encadeados sobre condições para a mesma variável) switch(variável){ case valor1: <bloco de comandos> break; case valor2: <bloco de comandos> break; case... default: } 2. Evite números mágicos no seu código usando constantes. ... final int SAIR = -1; int opcao; //leitura de opcao do teclado if(opcao == SAIR)... 3. Usando a classe java.util.Random ... Random r = new Random(); //cria um gerador de números randômicos. r.nextInt(); //retorna o próximo inteiro randômico (distribuição uniforme). r.nextInt(5); //retorna o próximo inteiro randômico no intervalo [0, 5[. 3