Ir ao conteúdo
  • Cadastre-se
Ronei2018

Java jogo da forca - decrementar

Recommended Posts

Boa tarde!!

 

Estou fazendo um trabalho da faculdade e me surgiu um problema: Em um jogo da forca preciso decrementar as letras digitadas erradamente pelo usuário. Na minha lógica isso acontece normalmente, mas caso a mesma letra seja digitada novamente, isso não deveria ocorrer e deveria aparecer uma mensagem de "Letra já Digitada". Poderiam me ajudar? Segue meu código:


 

package br.edu.fapi_prova;

import java.util.Scanner;

public class JogoDaForca {

    public void executaForca() {
        Scanner scanner = new Scanner(System.in);
        String palavra;
        int opcao = 0;

        System.out.println("Este é um jogo da forca. Deseja jogar? 1 - Sim || 2 - Não");
        opcao = scanner.nextInt();

        while (opcao == 1) {

            System.out.println("|------------------------------------|");
            System.out.println("|---------JOGO DA FORCA RONEI--------|");
            System.out.println("|------------------------------------|");
            System.out.println("");
            System.out.println("");

            System.out.println("Por favor, insira a palavra: ");
            palavra = scanner.next();
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            System.out.println("");
            int cont;
            int letra = palavra.length();
            int erros = 5;
            char trocar[] = new char[letra];
            for (cont = 0; cont < letra; cont++) {
                trocar[cont] = '_';
                System.out.print(trocar[cont] + " ");
            }

            String palpite;
            char adivinhando[] = new char[letra];
            char adivinhaPalavra[] = new char[letra];
            int acertos = palavra.length();
            
            do {
                System.out.print("\nDigite uma letra: ");
                palpite = scanner.next();

                if (palavra.contains(palpite)) {
                    for (cont = 0; cont < letra; cont++) {
                        adivinhando[cont] = palpite.toCharArray()[0];
                        adivinhaPalavra[cont] = palavra.toCharArray()[cont];
                        if (adivinhando[cont] == adivinhaPalavra[cont]) {
                            trocar[cont] = adivinhando[cont];
                            acertos--;
                        }
                        
                        System.out.println("");
                        System.out.println("");
                        System.out.print(trocar[cont] + " ");
                        
                    }

                } else if (!palavra.contains(palpite)) {
                    erros--;

                }

                System.out.println("\nChances Restantes: " + erros);
            } while (acertos > 0 && erros > 0);
            if (acertos == 0) {
                System.out.println("");
                System.out.println("Parabéns!! Você Ganhou.");
                System.out.println("");
            }

            if (erros == 0) {
                System.out.println("");
                System.out.println("Que pena, você perdeu.");
                System.out.println("");
            }

            System.out.println("Deseja jogar novamente? 1 - Sim || 2 - Não");
            opcao = scanner.nextInt();

        }
        
        System.out.println("");
        System.out.println("");
        System.out.println("Ok!! Volte outra hora!!");

    }
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia concatenar as letras que já foram digitadas em uma string, por exemplo:

 

String Digitadas = "";
char Letra = scanner.next().charAt(0);

if(Digitadas.contains(Character.toString(Letra)))
	System.out.println("Letra já digitada");
else
{
  	//Procedimento pra verificação.
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, iHollyZinhO disse:

Você poderia concatenar as letras que já foram digitadas em uma string, por exemplo:

 


String Digitadas = "";
char Letra = scanner.next().charAt(0);

if(Digitadas.contains(Character.toString(Letra)))
	System.out.println("Letra já digitada");
else
{
  	//Procedimento pra verificação.
}

 

Pior que não ta rolando não :/

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente usar .charAt(0) na leitura da String palpite ou use-a como char.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Ronei2018 Olá. Poderia criar uma lista, dessa forma:

List<Character> letrasUsadas = new ArrayList<>();

Definir a variável palpite como um char:

char palpite;

E aí no loop fazer o seguinte:

System.out.print("\nDigite uma letra: ");
palpite = scanner.next().charAt(0);

if (letrasUsadas.contains(palpite)) {
    System.out.println("\nERRO: Essa letra ja foi usada!");
    continue;
}
                
letrasUsadas.add(palpite);

Experimenta para ver se vai. Aqui ficou ok

adicionado 20 minutos depois

resumidamente, o jogo ficaria assim:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Aplicacao {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String palavra;
        int opcao = 0;
        int erros = 5;
        char palpite;
        boolean correto;

        List<Character> letrasUsadas = new ArrayList<>();

        System.out.println("Este é um jogo da forca. Deseja jogar? 1 - Sim || 2 - Não");
        opcao = scanner.nextInt();

        while (opcao == 1) {

            System.out.println("|------------------------------------|");
            System.out.println("|---------JOGO DA FORCA RONEI--------|");
            System.out.println("|------------------------------------|");
            System.out.println("");
            System.out.println("");

            System.out.print("Por favor, insira a palavra: ");
            palavra = scanner.next();

            int acertos = palavra.length();

            System.out.println("\n\n\n\n");
            System.out.println("\n\n");

            char trocar[] = new char[palavra.length()];

            for (int i = 0; i < palavra.length(); i++) {
                trocar[i] = '_';
            }

            do {

                for (int i = 0; i < palavra.length(); i++) {
                    System.out.print(trocar[i] + " ");
                }

                System.out.println();

                System.out.print("\nDigite uma letra: ");
                palpite = scanner.next().charAt(0);

                if (letrasUsadas.contains(palpite)) {
                    System.out.println("\nERRO: Essa letra ja foi usada!");
                    continue;
                }

                letrasUsadas.add(palpite);

                correto = false;
                for (int i = 0; i < palavra.length(); i++) {
                    if (palavra.charAt(i) == palpite) {
                        acertos--;
                        trocar[i] = palpite;
                        correto = true;
                    }
                }
                if(!correto) {
                    erros--;
                    System.out.println("\nChances Restantes: " + erros);
                }

            } while (acertos > 0 && erros > 0);

            if (acertos == 0) {
                System.out.println();
                System.out.println("Parabéns!! Você Ganhou.");
                System.out.println();
            }

            if (erros == 0) {
                System.out.println();
                System.out.println("Que pena, você perdeu.");
                System.out.println();
            }

            System.out.println("Deseja jogar novamente? 1 - Sim || 2 - Não");
            opcao = scanner.nextInt();

            letrasUsadas.clear();
        }

        System.out.println();
        System.out.println("\nOk!! Volte outra hora!!");
    }
}

Não sei se é a melhor coisa a fazer passar o código pronto :confused:

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Não havia conseguido a tempo e acabei entregando sem essa vcalidação. Testei agora e realmente funciona.. Obrigado =D

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×