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

17/02/2012

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

Respostas

17/02/2012

Mathews Motta

Ué? Faz um contador... Cada vez que ele tentar, conta +1 quando ele acertar exibe o numero de tentativas!
Responder Citar

17/02/2012

Kleber Bogo

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]
Você está comparando o número (random) com o número de tentativas (numTentativas). Quer dizer que se "Random" for um (1) vai acertar de primeira, independente do chute? Dá uma revisada nisso. Só uma dica, você deve comparar se o número é igual do mesmo jeito que verifica se ele é maior ou menor! Você pode ter quantas estruturas de "if" você quiser, assim:
int num = <código de obter número>
if(num > 10){
    <Ação caso seja maior que 10>
} else if(num < 10){
    <Ação caso seja menor que 10>
} else {
    <Ação caso seja IGUAL a 10> //Já que ele não é NEM maior e NEM menor, então é igual.
}
Você poderia colocar a condição ali (else if (num == 10)), mas não era realmente necessário. Tenta aí.
Responder Citar

17/02/2012

Kleber Bogo

Para mostrar as tentativas, faz como o Mathews disse, com um contador:
int numTentativas = 0; //Começa com 0 tentativas.
int chute = <RECEBE VALOR> //RECEBE O VALOR DO CHUTE AQUI E NÃO NO NÚMERO DE TENTATIVAS
while(chute != randon && numTentativas < 21) {
    //...
    numTentativas++; //Isso aqui é igual a numTentativas = numTentativas + 1;
}
Assim você tem as tentativas e qual foi o "chute" que o usuário deu.
Responder Citar

17/02/2012

Mathews Motta

bimrock Não traduza memes. Nunca traduza memes!!! memes perdem sua fodacidade quando são traduzidos!
Responder Citar

17/02/2012

Kleber Bogo

bimrock Não traduza memes. Nunca traduza memes!!! memes perdem sua fodacidade quando são traduzidos!
Indeed! Fica MUITO ridículo alguém mandar um meme com "Desafio Aceito" ou "Isso aí" (no lugar do "Fuck yeah"). O único que achei legal foi o "LoL QUE", mas em Mexicano! xDDDDDDD
Responder Citar

17/02/2012

Mathews Motta

Cara, isso ta mais para "exercício de chute" do que de adivinhação. 20 tentativas de acertar um numero entre 100. Nao é questão de adivinhação, mas de probabilidade. Nao importa oq vc tentar adivinhar, se vc jogar 12903610231 vezes o jogo vc só vai conseguir acertar o numero 1/5 das vezes jogadas. Simples assim. E, pelo amor de deus, faça testes com sort de 1 a 10 e com 2 tentativas. As chances são as mesmas e a unica coisa q vai mudar eh seu tempo que não vai ser perdido à toa.
Responder Citar

17/02/2012

Kleber Bogo

O que tem a ve a imagem do perfil ? Coloquei como poderia colocar qualquer coisa..rsrs Isso de memes não vem ao caso, é somente uma imagem qualquer. Cheguei agora do trabalho, vou da uma olhada e acrescentar algo aqui e posto novamente depois.
Responder Citar

17/02/2012

Kleber Bogo

O que tem a ve a imagem do perfil ? Coloquei como poderia colocar qualquer coisa..rsrs Isso de memes não vem ao caso, é somente uma imagem qualquer. Cheguei agora do trabalho, vou da uma olhada e acrescentar algo aqui e posto novamente depois.
Coloca um "Challenge Accepted" pelo menos... [img]http://1.bp.blogspot.com/-0gHg2T3fGVw/TvNIW3AcL6I/AAAAAAAAAVw/IUtxnrs9zpA/s320/challenge-accepted-meme.jpg[/img]
Responder Citar

17/02/2012

Kleber Bogo

Isso de memes não vem ao caso, é somente uma imagem qualquer.
Uma imagem qualquer???? IMAGEM QUALQUER????
Responder Citar

05/03/2012

Kleber Bogo

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?");
					
	}

}
Responder Citar

05/03/2012

Kleber Bogo

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?
Coloque o seu código dentro de um laço while, que vai continuar começando novos jogos até que o usuário [url=http://desciclopedia.ws/wiki/Capitão_Nascimento]peça pra sair[/url]
Responder Citar

05/03/2012

Douglas Eric

[quote="bimrock"] 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?
Coloque o seu código dentro de um laço while, que vai continuar começando novos jogos até que o usuário [url=http://desciclopedia.ws/wiki/Capitão_Nascimento]peça pra sair[/url] [/quote] E sob ele mostrar a tela "tente um numero maior" ? Como disse eu acerto o número,ele mostra essa tela seguida da tela correta. Outra coisa, quando coloco o primeiro palpite, ele fala pra tentar de novo,e não diz se é maior ou menor,só diz do segundo palpite em diante.O que pode ser?
Responder Citar

05/03/2012

Kleber Bogo

[quote="sekkuar"][quote="bimrock"] 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?
Coloque o seu código dentro de um laço while, que vai continuar começando novos jogos até que o usuário [url=http://desciclopedia.ws/wiki/Capitão_Nascimento]peça pra sair[/url] [/quote] E sob ele mostrar a tela "tente um numero maior" ? Como disse eu acerto o número,ele mostra essa tela seguida da tela correta. Outra coisa, quando coloco o primeiro palpite, ele fala pra tentar de novo,e não diz se é maior ou menor,só diz do segundo palpite em diante.O que pode ser? [/quote] Siga a lógica. Alguns ifs e elses estão fora do lugar. Vai seguindo linha por linha enquanto executa que você percebe onde está o erro.
Responder Citar

05/03/2012

Kleber Bogo

[quote="bimrock"][quote="sekkuar"][quote="bimrock"] 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?
Coloque o seu código dentro de um laço while, que vai continuar começando novos jogos até que o usuário [url=http://desciclopedia.ws/wiki/Capitão_Nascimento]peça pra sair[/url] [/quote] E sob ele mostrar a tela "tente um numero maior" ? Como disse eu acerto o número,ele mostra essa tela seguida da tela correta. Outra coisa, quando coloco o primeiro palpite, ele fala pra tentar de novo,e não diz se é maior ou menor,só diz do segundo palpite em diante.O que pode ser? [/quote] Siga a lógica. Alguns ifs e elses estão fora do lugar. Vai seguindo linha por linha enquanto executa que você percebe onde está o erro. [/quote] Agora está certo.
	{
				
				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? "+nome+ "."));
		}
Vou agora tentar fazer a parte final do código , vou pensar aqui pra ver se entendo essa lógica do laço que sugeriu.Estou vendo aonde ficaria ele.
Responder Citar

05/03/2012

Kleber Bogo

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.
Responder Citar