Array
(
)

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

Kleber Bogo
   - 17 fev 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. #Código

 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[/tagcod]

Mathews Motta
   - 17 fev 2012

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

0
|
0

Kleber Bogo
   - 17 fev 2012


Citação:
="bimrock"]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. #Código

 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[/tagcod] 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: #Código
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í.

0
|
0

Kleber Bogo
   - 17 fev 2012

Para mostrar as tentativas, faz como o Mathews disse, com um contador: #Código

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.

0
|
0

Mathews Motta
   - 17 fev 2012

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

0
|
0

Kleber Bogo
   - 17 fev 2012


Citação:
="MathewsMotta"]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

0
|
0

Mathews Motta
   - 17 fev 2012

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.

0
|
0

Kleber Bogo
   - 17 fev 2012

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.

0
|
0

Kleber Bogo
   - 17 fev 2012


Citação:
="bimrock"]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... Clique na imagem para abrir em uma nova janela

0
|
0

Kleber Bogo
   - 17 fev 2012


Citação:
="bimrock"] Isso de memes não vem ao caso, é somente uma imagem qualquer.
Uma imagem qualquer???? IMAGEM QUALQUER????

0
|
0

Kleber Bogo
   - 05 mar 2012

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. #Código

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

}

0
|
0

Kleber Bogo
   - 05 mar 2012


Citação:
="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]

0
|
0

Douglas Eric
   - 05 mar 2012


Citação:
="sekkuar"]
Citação:
="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]
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?

0
|
0

Kleber Bogo
   - 05 mar 2012


Citação:
="bimrock"]
Citação:
="sekkuar"]
Citação:
="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]
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?
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.

0
|
0

Kleber Bogo
   - 05 mar 2012


Citação:
="sekkuar"]
Citação:
="bimrock"]
Citação:
="sekkuar"]
Citação:
="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]
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?
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.
Agora está certo. #Código

	{
				
				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.

0
|
0

Kleber Bogo
   - 05 mar 2012

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.

0
|
0

Douglas Eric
   - 05 mar 2012


Citação:
="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. #Código

		}
		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?

0
|
0

Douglas Eric
   - 05 mar 2012

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

0
|
0

Lucas Iorio
   - 05 mar 2012


Citação:
="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. #Código

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++)

0
|
0

Lucas Iorio
   - 05 mar 2012

Fazendo como o Sekkuar sugeriu pelo While ficou assim: #Código

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.

0
|
0

Lucas Iorio
   - 05 mar 2012


Citação:
="bimrock"]Fazendo como o Sekkuar sugeriu pelo While ficou assim: #Código

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.

0
|
0