[RESOLVIDO]Dúvida - Famoso exercicio de adivinhação

17/02/2012

0

Boa tarde a todos!! Estou tentando fazer um exercício aparentemente básico. "Desenvolva um programa em Java que simule um jogo de adivinhação. Primeiramente, o programa deverá pedir o nome do jogador, depois sortear um número entre 0 e 100. Após o sorteio, inicia-se o jogo e o jogador deverá tentar adivinhar o número sorteado. A cada tentativa, o jogo deverá informar se o “chute” do jogador foi maior ou menor do que o número a ser adivinhado. O jogo termina após vinte tentativas erradas ou quando o jogador acertar o número sorteado e, nesse caso, informe a quantidades de tentativas que foram necessárias. Após o término do jogo será mostrado o nome do jogador seguido da quantidade de tentativas, o jogador deverá decidir então se deseja ou não iniciar um novo jogo." Estou com dúvida de como fazer para ele mostrar no final em qual tentativa o usuário acertou. Vou postar meu código até agora do que fiz.
 package JogoAdivinha;

import javax.swing.JOptionPane;

public class Jogo {

	
	public static void main(String[] args) {

		String nome ;
		int numTentativas ;
		int randon = (int)(1+Math.random()*100);
		int[] jogadas = new int[20];
		
		nome = JOptionPane.showInputDialog(null,"Olá,qual o seu nome?");
		JOptionPane.showMessageDialog(null,"Agora estou pensando em um número...Pronto!Tente adivinhar!");
		numTentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual número você acha que é?"));

		
		for(int i = 0; i < 21; i++)
		
			while(numTentativas != randon && numTentativas < 21)
			
		{
				numTentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Tente de novo "+nome+ "."));
				if  (numTentativas < randon)
				JOptionPane.showMessageDialog(null,"Tente um numero maior " +nome+".");
			else if  (numTentativas > randon)
				JOptionPane.showMessageDialog(null,"Tente um numero menor " +nome+".");
		}

		if (numTentativas == randon)
				JOptionPane.showMessageDialog(null,"PARABÉNS "+nome+" !!");
				JOptionPane.showMessageDialog(null,"Você acertou na " +jogadas);
		else (numTentativas < 21)
				JOptionPane.showMessageDialog(null,"Fim de jogo,acabaram as tentativas.");
		 		

	}

}
Lembrando que sou iniciante,as vezes a lógica não pode estar perfeita, ou nem perto disso...rsrs[/code]
Kleber Bogo

Kleber Bogo

Responder

Posts

05/03/2012

Douglas Eric

[quote="MathewsMotta"]Uma sugestão. Porque, enquanto vc ainda está testando, você não faz o sort em vez de 1 a 100, de 1 a 10? Vc pode deixar o numero de tentativas 10 também. Assim, você não precisaria de fato adivinhar o numero, e pode fazer os testes de forma mais rápida.
Na hora de testar eu coloco 5 pra ir mais rapido..rsrs Posso estar fazendo bobeira aqui , mais to tentando fazer sem usar esse while. Não sei se vão entender o que quero mais vou mostrar aqui.
		}
		if (tentativas == randon){
			JOptionPane.showMessageDialog(null,"Parabéns "+nome+" você acertou na " +chutes+ " tentativa(s)");	
			botao = JOptionPane.showConfirmDialog(null,"Gostaria de jogar novamente?");
			if (botao == JOptionPane.YES_OPTION)
				return;
			else 
				System.exit(0);
		}
		
	else 
		botao = JOptionPane.showConfirmDialog(null,"Acabaram suas chances!Quer Jogar de novo?");
		if (botao == JOptionPane.YES_OPTION)
			return;
		else 
			System.exit(0);
	}

}
Ali aonde está o return eu queria colocar pra voltar o inicio do jogo.Tentei algumas coisas mais não deu certo.Tem como fazer isso desse jeito?
Responder

05/03/2012

Douglas Eric

Inicie o jogo através de um método. Daí, se quiser iniciar mais um jogo, chame o método.
Responder

05/03/2012

Lucas Iorio

[quote="bimrock"]Fiz algumas correções, e tive pontos positivos.Mais algumas coisas negativas. No código agora , após acertar o número,ele mostra a tela "tentar o numero maior " e em seguida a tela certa de acerto. Introduzi o confirmDialog do JOptionPane.Preciso atribuir ações para o botão que ele selecionar,isto eu sei, mais vou te que da um return pra voltar ao inicio do jogo caso ele queira jogar novamente,vou precisar então criar um método inicio? Segue o código até agora.
package JogoAdivinha;

import javax.swing.JOptionPane;

public class Jogo {

	
	public static void main(String[] args) {

		String nome ;
		int chutes = 1 ;
		int tentativas = 1;
		int randon = (int)(1+Math.random()*100);
		
		nome = JOptionPane.showInputDialog(null,"Olá,qual o seu nome?");
		tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Vamos começar,qual o número?"));

		  
		for(int i = 0; i < 20; i++)
		
			while(tentativas != randon && chutes < 20) 
			
		{
				tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Tente de novo "+nome+ "."));
				if  (tentativas < randon)
				JOptionPane.showMessageDialog(null,"Tente um numero maior " +nome+".");
				else 
				JOptionPane.showMessageDialog(null,"Tente um numero menor " +nome+".");
				tentativas++;
				chutes++;
		}
		if (tentativas == randon){
			JOptionPane.showMessageDialog(null,"Parabéns "+nome+" você acertou na " +chutes+ " tentativa(s)");	
			JOptionPane.showConfirmDialog(null,"Gostaria de jogar novamente?");

		}
		
	else 
		JOptionPane.showConfirmDialog(null,"Acabaram suas chances!Quer Jogar de novo?");
					
	}

}
Esta sobrando um for(int i = 0; i < 20; i++)
Responder

05/03/2012

Lucas Iorio

Fazendo como o Sekkuar sugeriu pelo While ficou assim:
package JogoAdivinha;

import javax.swing.JOptionPane;

public class Jogo {


	public static void main(String[] args) {

		String nome ;
		int chutes = 1 ;
		int tentativas = 1;
		int randon = (int)(1+Math.random()*100);
		int botao;
		boolean continua = true;
		
		nome = JOptionPane.showInputDialog(null,"Olá,qual o seu nome?");
		while(continua){
		tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Vamos começar,qual o número?"));
		
			while(tentativas != randon && chutes < 10) 
		
		{
				if  (tentativas < randon)
				JOptionPane.showMessageDialog(null,"Tente um numero maior " +nome+".");
				else 
				JOptionPane.showMessageDialog(null,"Tente um numero menor " +nome+".");
				tentativas++;
				chutes++;
				tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual o número? "));
		}
		
		if (tentativas == randon){
			JOptionPane.showMessageDialog(null,"Parabéns "+nome+" você acertou na " +chutes+ " tentativa(s)");	
			botao = JOptionPane.showConfirmDialog(null,"Gostaria de jogar novamente?","Jogo Adivinhação",JOptionPane.YES_NO_OPTION);
			if (botao == JOptionPane.YES_OPTION)
				continua = true;
			
			else 
				continua = false;
				}
	else 
		botao = JOptionPane.showConfirmDialog(null,"Acabaram suas chances!Quer Jogar de novo?","Jogo Adivinhação",JOptionPane.YES_NO_OPTION);
		if (botao == JOptionPane.YES_OPTION)
			continua = true;
		else 
		continua = false;
		}
		System.exit(0);
	}

 }
	
PROBLEMA: se eu coloco pra jogar novamente,ele não sorteia outro numero,e continua contando as alternativas da onde parou.Ou seja se errei 8 vezes antes de acertar o jogo passado,e começo um novo jogo , ao errar ele conta como 9 erros.
Responder

05/03/2012

Lucas Iorio

[quote="bimrock"]Fazendo como o Sekkuar sugeriu pelo While ficou assim:
package JogoAdivinha;

import javax.swing.JOptionPane;

public class Jogo {


	public static void main(String[] args) {

		String nome ;
		int chutes = 1 ;
		int tentativas = 1;
		int randon = (int)(1+Math.random()*100);
		int botao;
		boolean continua = true;
		
		nome = JOptionPane.showInputDialog(null,"Olá,qual o seu nome?");
		while(continua){
		tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Vamos começar,qual o número?"));
		
			while(tentativas != randon && chutes < 10) 
		
		{
				if  (tentativas < randon)
				JOptionPane.showMessageDialog(null,"Tente um numero maior " +nome+".");
				else 
				JOptionPane.showMessageDialog(null,"Tente um numero menor " +nome+".");
				tentativas++;
				chutes++;
				tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual o número? "));
		}
		
		if (tentativas == randon){
			JOptionPane.showMessageDialog(null,"Parabéns "+nome+" você acertou na " +chutes+ " tentativa(s)");	
			botao = JOptionPane.showConfirmDialog(null,"Gostaria de jogar novamente?","Jogo Adivinhação",JOptionPane.YES_NO_OPTION);
			if (botao == JOptionPane.YES_OPTION)
				continua = true;
			
			else 
				continua = false;
				}
	else 
		botao = JOptionPane.showConfirmDialog(null,"Acabaram suas chances!Quer Jogar de novo?","Jogo Adivinhação",JOptionPane.YES_NO_OPTION);
		if (botao == JOptionPane.YES_OPTION)
			continua = true;
		else 
		continua = false;
		}
		System.exit(0);
	}

 }
	
PROBLEMA: se eu coloco pra jogar novamente,ele não sorteia outro numero,e continua contando as alternativas da onde parou.Ou seja se errei 8 vezes antes de acertar o jogo passado,e começo um novo jogo , ao errar ele conta como 9 erros.
Muito óbvio isso, não? Ao começar um novo jogo, você precisa reiniciar as variáveis. Pretty basic.
Responder

05/03/2012

Lucas Iorio

Quando é feito uma nova tentativa, voce tem que rodar essas linhas, novamente.
  chutes = 1 ;  
  tentativas = 1;  
  randon = (int)(1+Math.random()*100); 
Responder

05/03/2012

Lucas Iorio

[quote="lucas iorio"]Quando é feito uma nova tentativa, voce tem que rodar essas linhas, novamente.
  chutes = 1 ;  
  tentativas = 1;  
  randon = (int)(1+Math.random()*100); 
[b]You lose![/b]
Responder

05/03/2012

Lucas Iorio

[quote="ryuuji"][quote="bimrock"]Fazendo como o Sekkuar sugeriu pelo While ficou assim:
package JogoAdivinha;

import javax.swing.JOptionPane;

public class Jogo {


	public static void main(String[] args) {

		String nome ;
		int chutes = 1 ;
		int tentativas = 1;
		int randon = (int)(1+Math.random()*100);
		int botao;
		boolean continua = true;
		
		nome = JOptionPane.showInputDialog(null,"Olá,qual o seu nome?");
		while(continua){
		tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Vamos começar,qual o número?"));
		
			while(tentativas != randon && chutes < 10) 
		
		{
				if  (tentativas < randon)
				JOptionPane.showMessageDialog(null,"Tente um numero maior " +nome+".");
				else 
				JOptionPane.showMessageDialog(null,"Tente um numero menor " +nome+".");
				tentativas++;
				chutes++;
				tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual o número? "));
		}
		
		if (tentativas == randon){
			JOptionPane.showMessageDialog(null,"Parabéns "+nome+" você acertou na " +chutes+ " tentativa(s)");	
			botao = JOptionPane.showConfirmDialog(null,"Gostaria de jogar novamente?","Jogo Adivinhação",JOptionPane.YES_NO_OPTION);
			if (botao == JOptionPane.YES_OPTION)
				continua = true;
			
			else 
				continua = false;
				}
	else 
		botao = JOptionPane.showConfirmDialog(null,"Acabaram suas chances!Quer Jogar de novo?","Jogo Adivinhação",JOptionPane.YES_NO_OPTION);
		if (botao == JOptionPane.YES_OPTION)
			continua = true;
		else 
		continua = false;
		}
		System.exit(0);
	}

 }
	
PROBLEMA: se eu coloco pra jogar novamente,ele não sorteia outro numero,e continua contando as alternativas da onde parou.Ou seja se errei 8 vezes antes de acertar o jogo passado,e começo um novo jogo , ao errar ele conta como 9 erros.
Muito óbvio isso, não? Ao começar um novo jogo, você precisa reiniciar as variáveis. Pretty basic.
Correto, isso eu sabia.Só não sei como fazer pra zerar as variaveis.
Responder

05/03/2012

Kleber Bogo

[quote="bimrock"] Correto, isso eu sabia.Só não sei como fazer pra zerar as variaveis.
[quote="lucas iorio"]Quando é feito uma nova tentativa, voce tem que rodar essas linhas, novamente.
  chutes = 1 ;  
  tentativas = 1;  
  randon = (int)(1+Math.random()*100); 
Responder

05/03/2012

Lucas Iorio

[quote="Quote"]Correto, isso eu sabia.Só não sei como fazer pra zerar as variaveis.
Só uma obs. "Zerar as variáveis" não seria colocar ZERO em tudo e sim colocar os valores iniciais novamente.
Responder

05/03/2012

Lucas Iorio

[quote="lucas iorio"]os valores iniciais que estavam no começo de seu programa.
Valores iniciais geralmente são os que estão no inicio do programa. :arrow:
Responder

05/03/2012

Lucas Iorio

[quote="sekkuar"][quote="lucas iorio"]os valores iniciais que estavam no começo de seu programa.
Valores iniciais geralmente são os que estão no inicio do programa. :arrow:
Indeed. Imaginei quais seriam os valores iniciais do meio ou do fim do programa... [img]http://javafree.uol.com.br/forum/images/smiles/icon_arrow.gif[/img]Confuso...
Responder

05/03/2012

Lucas Iorio

Redundância a favor do aprendizado hehehehe =] se bem que já coloquei as linhas.
Responder

05/03/2012

Lucas Iorio

[quote="Quote"]Só uma obs. "Zerar as variáveis" não seria colocar ZERO em tudo e sim colocar os valores iniciais que estavam no começo de seu programa.
Com certeza, quando me disse "Zerar as variáveis" era pra voltar no valor inicial dela.
	while(continua){
		tentativas = Integer.parseInt(JOptionPane.showInputDialog(null,"Vamos começar,qual o número?"));
		
		chutes = 1 ;
		tentativas = 1;
		randon = (int)(1+Math.random()*100);
			
		while(tentativas != randon && chutes < 10) 
Tentei fazer isso , achando que iria solucionar,apesar de não da erro, não funcionou.
Responder

05/03/2012

Lucas Iorio

[quote="ryuuji"][quote="sekkuar"][quote="lucas iorio"]os valores iniciais que estavam no começo de seu programa.
Valores iniciais geralmente são os que estão no inicio do programa. :arrow:
Indeed. Imaginei quais seriam os valores iniciais do meio ou do fim do programa... [img]http://javafree.uol.com.br/forum/images/smiles/icon_arrow.gif[/img]Confuso... fuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu Soltei um borboleta em alemão agora !!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar