Meu prof. pediu pra fazer um jogo da forca.
Com uma palavra de 5 letras. Tipo “merda”.
Ae eu faço assim:
Um vetor com as 5 letras corretas.
Um vetor para todas as letras digitadas.
Mas não sei o seguinte:
Como eu armazeno cada letra digitada no vetor.
Como eu comparo a letra digitada com o vetor das corretas pra imprimir “letra certa” ou “letra errada” e como comparo com o vetor das digitadas pra ver se já foi digitado e imprimir “letra já digitada”.
A lógica eu sei, quero saber os comandos.
Se alguém puder me dizer e dar um exemplo básico só pra mim ver como funciona, ia ajudar MUITO!
Valeu. Abraços.
EDIT:
[size=18]SOLUÇÃO por RodrigoM91[/size]
String palavra[] = { "c", "h", "a", "v", "e" };
Scanner sc = new Scanner(System.in);
int forca = 1, vencer = 0, perder = 0, contador = 0;
// Nesse caso o array não precisa ter o tamanho de 100, já que a pessoa se
// perder for = 5 ele perde e
// se vencer = 5, ele ganha, pode ser 10 para melhorar a performace do
// for criado abaixo, nesse caso vamos deixar com tamanho 20 no caso da pessoa
//digitar a mesma letra algumas vezes.
String digito, letrasDigitadas[] = new String[20];
while (forca == 1) {
int existePalavra = 0;
System.out.println("Digite a letra:");
digito = sc.next();
letrasDigitadas[contador] = digito;
/** for criado para verificar se a letra já foi digitada. */
for (int i = 0; i < letrasDigitadas.length; i++) {
if (letrasDigitadas[i] != null) {
if (letrasDigitadas[i].equals(digito)) {
existePalavra++;
}
}
}
/**Se a letra não foi digitada ainda verifica se está correta, caso contrario exibe a mensagem */
if (!(existePalavra > 1)) {
/**Faz o loop no array da palavra, que não estava sendo feito */
for (int x = 0; x < palavra.length; x++) {
/**Verifica se a letra está correta */
if (palavra[x].equals(digito)) {
System.out.println("Letra correta.");
vencer++;
break;
} else {
if (x == 4) {
System.out.println("Letra inexistente.");
perder++;
}
}
}
if (perder == 5) {
System.out.println("Você perdeu.");
System.exit(0);
} else if (vencer == 5) {
System.out.println("Voce venceu.");
System.exit(0);
}
} else {
System.out.println("Essa letra já foi digitada.");
}
contador++;
}
kara voce alem de usar os vetores tera que usar uma variavel inteira como contador
vamos se dizer que para dar forka a pessoa tem 7 tentativas correto !
intao usa a estrutura em java if e else se e senao
por exemplo enquanto ele digitar um valor char e nao estiver no vetor sua variavel contadora recebe o ela e mais 1
Exemplo" int cont=0;
import javax.swing.JOptionPane;
public class Forca {
/*Constante que representa o número 5.*/
private static final int CONS_05 = 5;
/*Constante que representa o número 7.*/
private static final int CONS_07 = 7;
/*Constante que representa o número 4.*/
private static final int CONS_04 = 4;
// String que recebe a mensagem digitada.
String msg;
// Array de Strings com 5 letras.
String letrasCorretas[] = new String[CONS_05];
// Array de Strings para as letras digitadas no caso de serem 7 tentativas.
String letrasDigitadas[] = new String[CONS_07];
/**
* Método que adiciona as cinco letras digitadas no array letrasDigitadas.
*/
void adicionaLetras() {
int i = 0;
int letra = 0;
while (i < CONS_05) {
msg = JOptionPane.showInputDialog("Digite a letra " + ++letra);
if (letrasCorretas.length <= CONS_05) {
letrasCorretas[i] = msg;
i++;
} else {
System.out.println("A palavra é de cinco letras.");
}
}
}
/**
* Método que recebe as tentativas digitadas e verifica se existe a letra
* digitada na palavra.
*/
void letrasDigitadas() {
int tentativa = 0;
int i = 0;
int acertos = 0;
int erros = 0;
while (i < CONS_07) {
msg = JOptionPane.showInputDialog("Digite uma letra. Essa é sua "
+ ++tentativa + " tentativa de 7.");
letrasDigitadas[i] = msg;
for (int x = 0; x < letrasCorretas.length; x++) {
if (letrasCorretas[x].equals(letrasDigitadas[i])) {
JOptionPane.showMessageDialog(null, "Letra Correta");
++acertos;
break;
} else {
if (x == CONS_04) {
JOptionPane.showMessageDialog(null, "Letra Incorreta");
++erros;
}
}
}
i++;
}
JOptionPane.showMessageDialog(null, "Você teve " + acertos + " acertos e " + erros + " erros.");
}
}
E a classe para execução da forca:
public class TesteForca {
public static void main(String[] args) {
//Instancia a classe.
Forca forca = new Forca();
//Método para adicionar as cinco letras.
forca.adicionaLetras();
//Método para as 7 tentativas.
forca.letrasDigitadas();
}
}
Eu fiz aqui bem simples mais atende aos seus requisitos. Um jogo de forca de 5 letras e a pessoa tem 7 tentativas como nosso amigo citou acima, se você quiser colocar mais palavras ou tentativas é só alterar o valor das constantes.
Para que uma constante que “representa o número 5”? Tu precisas é de uma constante que represente o tamanho da palavra e que pode ser 5 ou qualquer outro número.
E usando constantes, não deves ter isto:
Deves usar as mesmas constantes de maneira a que se eu agora quiser que as palavras sejam de 6 letras por exemplo ou se quiser dar 10 tentativas em vez de 7, tenha apenas de mudar o valor da constante e todo o código se mantenha coerente.
Nesse caso acho que você questinou a constante de 4, que na verdade eu criei esse if para que a mensagem “Letra Incorreta” não aparecesse a cada letra incorreta encontrada, entendeu ?
E quanto as mensagens utilizarem as constantes, eu concordo com você, realmente errei nesse ponto, obrigado pela correção…
Eu questionei todas as constantes. Eu sei que a constante de 5 é para o tamanho da palavra. Mas aí deves chamar de TAMANHO_PALAVRA ou algo assim e não CONS_05 ou CONS_07.
Imagina que agora querias ter uma palavra com 6 letras em vez de 5. Ficavas com CONS_05 = 6… Estranho, não?
Pessoal…
Valeu pelo empenho aí e tal… Mas o que eu quero é mais simples ainda, pq to no primeiro ano do curso.
Olha o código que eu fiz:
import java.util.Scanner;
public class forca {
static String palavra[] = {"c","h","a","v","e"};
public static void main ( String args [] ) {
Scanner sc = new Scanner(System.in);
int forca = 1, vencer = 0, perder = 0, contador = 0;
String digito, letrasDigitadas[] = new String [100];
while (forca == 1) {
System.out.println("Digite a letra:");
digito = sc.next();
letrasDigitadas[contador] = digito;
contador++;
if (!digito.equals("c") && !digito.equals("h") && !digito.equals("a") && !digito.equals("v") && !digito.equals("e")) {
System.out.println("Letra inexistente.");
perder++;
if (perder == 5) {
System.out.println("Voce perdeu."); System.exit(0);
}
} else {
System.out.println("Letra correta.");
vencer++;
if (vencer == 5) {
System.out.println("Voce venceu."); System.exit(0);
}
}
}
}
}
Aí só preciso adicionar a parada de:
se ele já digitou a letra “A”, ao digitar “A” denovo ele compara com cada posição do vetor letrasDigitadas pra exibir “letra já digitada” se já tiver o “A” no vetor.
Pq como “A” é uma letra correta se ele digitar A,A,A,A,A aparece “Voce venceu.” mas eu quero que ele digite C,H,A,V,E pra aparecer essa msg.
na verdade acho que está em outro computador, vou tentar procurar, se o topico voltar a funcionar, procuro ocasiao para postar, mas ja postei aqui no guj, procure por jogo da forca, que vai aparecer o post.
[quote=pmlm]Eu questionei todas as constantes. Eu sei que a constante de 5 é para o tamanho da palavra. Mas aí deves chamar de TAMANHO_PALAVRA ou algo assim e não CONS_05 ou CONS_07.
Imagina que agora querias ter uma palavra com 6 letras em vez de 5. Ficavas com CONS_05 = 6… Estranho, não?[/quote]
Agora eu entendi, realmente você tem razão, senão nesse caso eu teria que ficar alterando o nome das constantes…
[quote=kolling]Pessoal…
Valeu pelo empenho aí e tal… Mas o que eu quero é mais simples ainda, pq to no primeiro ano do curso.
Aí só preciso adicionar a parada de:
se ele já digitou a letra “A”, ao digitar “A” denovo ele compara com cada posição do vetor letrasDigitadas pra exibir “letra já digitada” se já tiver o “A” no vetor.
Pq como “A” é uma letra correta se ele digitar A,A,A,A,A aparece “Voce venceu.” mas eu quero que ele digite C,H,A,V,E pra aparecer essa msg.
Valeu abraços!
[/quote]
Então Kolling eu fiz do jeito que você queria só que com algumas alterações mas, expliquei tudo no código mesmo, ta tudo comentado o que eu fiz, espero que te ajude !
String palavra[] = { "c", "h", "a", "v", "e" };
Scanner sc = new Scanner(System.in);
int forca = 1, vencer = 0, perder = 0, contador = 0;
// Nesse caso o array não precisa ter o tamanho de 100, já que a pessoa se
// perder for = 5 ele perde e
// se vencer = 5, ele ganha, pode ser 10 para melhorar a performace do
// for criado abaixo, nesse caso vamos deixar com tamanho 20 no caso da pessoa
//digitar a mesma letra algumas vezes.
String digito, letrasDigitadas[] = new String[20];
while (forca == 1) {
int existePalavra = 0;
System.out.println("Digite a letra:");
digito = sc.next();
letrasDigitadas[contador] = digito;
/** for criado para verificar se a letra já foi digitada. */
for (int i = 0; i < letrasDigitadas.length; i++) {
if (letrasDigitadas[i] != null) {
if (letrasDigitadas[i].equals(digito)) {
existePalavra++;
}
}
}
/**Se a letra não foi digitada ainda verifica se está correta, caso contrario exibe a mensagem */
if (!(existePalavra > 1)) {
/**Faz o loop no array da palavra, que não estava sendo feito */
for (int x = 0; x < palavra.length; x++) {
/**Verifica se a letra está correta */
if (palavra[x].equals(digito)) {
System.out.println("Letra correta.");
vencer++;
break;
} else {
if (x == 4) {
System.out.println("Letra inexistente.");
perder++;
}
}
}
if (perder == 5) {
System.out.println("Você perdeu.");
System.exit(0);
} else if (vencer == 5) {
System.out.println("Voce venceu.");
System.exit(0);
}
} else {
System.out.println("Essa letra já foi digitada.");
}
contador++;
}
No if que é feita a verificação se x == 4, isso foi feito para que a mensagem não seja exibida varias vezes, apenas 1 vez, qualquer duvida é só perguntar, se isso resolveu o seu problema, edita o assunto do fórum com [RESOLVIDO] na frente