[RESOLVIDO] Ajuda para Finalizar Jogo Da Forca em JAVA

Olá pessoal. Sou bem leigo em programação e estou aprendendo ainda a programar. Queria pedir ajuda para fazer um jogo da forca. Comecei com este código mas o professor não quer que eu digite a palavra e depois adivinhe. Ele quer que eu sorteie palavras da minha String usando a função Random. Então queria saber como substituo essa logica em meu código.

O QUE FIZ:

import java.util.Scanner;

public class Testedejogo {

    public static void main(String[] args) {
        
        Scanner teclado = new Scanner(System.in);

        System.out.println("Digite uma palavra: ");
        String palavras = teclado.next();
        char[] traco = new char[palavras.length()];
        for (int i = 0; i < palavras.length(); i++) {
          traco[i] = '_';
        }


        int tamPalavra = palavras.length();
        int tentativas = 6;

        while(tamPalavra >0 && tentativas >0 ){
            System.out.println();
            for ( int i = 0; i < palavras.length(); i++) {
              System.out.print(" " + traco[i] + " ");
            }
            System.out.println();

            System.out.println("Você tem " +tentativas+ " chances de adivinhar");
            System.out.println("Digite uma letra: ");
            //teclado.nextLine();
            char letras = teclado.next().charAt(0);
            boolean iscorrect = false;
            for (int i = 0; i < traco.length; i++) {
                if(palavras.charAt(i) == letras)
                {
                    traco[i] = letras;
                    tamPalavra--;
                    iscorrect = true;
                }
            }

            if(!iscorrect)
                tentativas--;
        }

        if(tamPalavra == 0)
            System.out.println("PARABENS!Você ACERTOU! :)");
        else System.out.println("Infelizmente Você Perdeu :(");

    }

}

Crie um array com as palavras:

String[] palavras = {"palavra1", "palavra2", "palavra3"};

Crie um random para obter qual palavra será sorteada para ser jogada:

int index = new Random().nextInt();

Selecione a palavra a ser jogada usando o index no array:

String palavraSelecionada = palavras[index];
```

Com a palavra selecionada, a lógica do seu código continua a mesma.

obs.: Pesquise como obter o index do random apenas no range das palavras disponíveis.

Daria para utilizar o Math.random() no qual ele devolve um numero aleatório no range de 0 e 0.9999… então o resultado que der você multiplica pela quantidade de posições que você tem dentro do vetor, um porém é que como o Math.random() nunca vai retornar 1 se você tem 5 palavras dentro do vetor você terá que fazer o resultado do Math.random()*6.

String [] vetor = {"a","b","c","d"};
int i = (int) (Math.random()*5);
1 curtida

lucastody obrigado pela dica. Implementei no meu codigo e dei uma pesquisada sobre o quevocê sugeriu mas meu código apresentou erros. Você poderia me ajudar a corrigir?

package testedejogo;

import java.util.Random;
import java.util.Scanner;

public class Testedejogo {

public static void main(String[] args) {
    
    Scanner teclado = new Scanner(System.in);

    String[] palavras = {"borboleta", "cachorro", "passarinho", "flor"};
    Random aleatorio = new Random ();
    int index = new Random().nextInt(4);
    
    String palavraSelecionada = palavras[index];
    
    char[] traco = new char[palavras.length()];
    for (int i = 0; i < palavras.length(); i++) {
      traco[i] = '_';
    }


    int palavraSelecionada = palavras.length();
    int tentativas = 6;

    while(palavraSelecionada >0 && tentativas >0 ){
        System.out.println();
        for ( int i = 0; i < palavras.length(); i++) {
          System.out.print(" " + traco[i] + " ");
        }
        System.out.println();

        System.out.println("Você tem " +tentativas+ " chances de adivinhar");
        System.out.println("Digite uma letra: ");
        //teclado.nextLine();
        char letras = teclado.next().charAt(0);
        boolean iscorrect = false;
        for (int i = 0; i < traco.length; i++) {
            if(palavras.charAt(i) == letras)
            {
                traco[i] = letras;
                palavraSelecionada--;
                iscorrect = true;
            }
        }

        if(!iscorrect)
            tentativas--;
    }

    if(palavraSelecionada == 0)
        System.out.println("PARABENS!Você ACERTOU! :)");
    else System.out.println("Infelizmente Você Perdeu :(");

}

}

lucas vlw cara, mas infelizmente não posso usar o math.random

Ha, my bad kkk não tinha lido o problema direito.

int palavraSelecionada = palavras.length();

Você inicializou 2 variáveis com o mesmo nome uma sendo string e outra sendo int.

> if(palavras.charAt(i) == letras)
>             {
>                 traco[i] = letras;
>                 palavraSelecionada--;
>                 iscorrect = true;
>             }

E nessa parte aqui você está tentando tirar um char de um vetor mas para conseguir fazer isso você primeiro tem que dizer qual posição dele que você quer retirar um char e depois você pode executar um charAt ex:

if (palavras[0].charAt(i) == letras) {
                    traco[i] = letras;
                    palavraSelecionada--;
                    iscorrect = true;
                }

Vlw pela dica.

Copilei o codigo, ele roudou mas não está funcionando como o esperado.
Ele não está colocando a quantidade de traços total de cada palavra. E ele tambem apenas sorteia a palavra “borboleta”, não muda para outra. Vou colocar a compilação primeiro e depois o codigo completo em seguida.

run:


Você tem 6 chances de adivinhar
Digite uma letra:
o

_ o _ _
Você tem 6 chances de adivinhar
Digite uma letra:
f

_ o _ _
Você tem 5 chances de adivinhar
Digite uma letra:
l

_ o _ _
Você tem 4 chances de adivinhar
Digite uma letra:
p

_ o _ _
Você tem 3 chances de adivinhar
Digite uma letra:
a

_ o _ _
Você tem 2 chances de adivinhar
Digite uma letra:
c

_ o _ _
Você tem 1 chances de adivinhar
Digite uma letra:
b

b o _ b // ele só está pegando as 4 primeiras letras, perceba que ele considerou como ganho “borb” e não "borboleta"
Você tem 1 chances de adivinhar
Digite uma letra:
r
PARABENS!Você ACERTOU! :slight_smile:
CONSTRUÍDO COM SUCESSO (tempo total: 29 segundos)

ATUALIZAÇÃO

Pessoal fiz algumas imprementações e descobri mais um erro. Ele sorteia uma palavra mas nao usa ela
na forca. Ele só usa a palavra “borboleta”. Vejam o que acontece quando a pessoa erra a palavra, a correta nao condiz com a que esta na forca.

run:


Você tem 6 chances de adivinhar
A palavra tem 4 letras restantes
Digite uma letra:
c
.
.
.
_ _ r _
Você tem 1 chances de adivinhar
A palavra tem 3 letras restantes
Digite uma letra:
e
Infelizmente Você Perdeu :frowning:
A palavra era passarinho
CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

Main

package joguinhodaforca;

import java.util.Random;
import java.util.Scanner;

public class Joguinhodaforca {

public static void main(String[] args) {
    
    Scanner teclado = new Scanner(System.in);

    String[] palavras = {"borboleta", "cachorro", "passarinho", "flor"};
    Random aleatorio = new Random ();
    int index = new Random().nextInt(3);
    
    String palavraSelecionada = palavras[index];
    
    char[] traco = new char[palavras.length];        
    for (int i = 0; i < palavras.length; i++) {
      traco[i] = '_';
    }


    int palavraString = palavras.length;
    int tentativas = 6;

    while(palavraString >0 && tentativas >0 ){
        System.out.println();
        for ( int i = 0; i < palavras.length; i++) {
          System.out.print(" " + traco[i] + " ");
        }
        System.out.println();

        
        System.out.println("Você tem " +tentativas+ " chances de adivinhar");
        System.out.println("A palavra tem " +palavraString+ " letras restantes");
        System.out.println("Digite uma letra: ");
        //teclado.nextLine();
        char letras = teclado.next().charAt(0);
        boolean iscorrect = false;
        for (int i = 0; i < traco.length; i++) {
            
            if (palavras[0].charAt(i) == letras) {
                traco[i] = letras;
                palavraString--;
                iscorrect = true;
            }
        }

        if(!iscorrect)
            tentativas--;
    }

    if(palavraString == 0){
        System.out.println("PARABENS!Você ACERTOU! :)");
                }
    else {
        System.out.println("Infelizmente Você Perdeu :(");
        System.out.println("A palavra era " +palavraSelecionada);            
    }
    }

}
public static void main(String[] args) {

        Scanner teclado = new Scanner(System.in);

        String[] palavras = {"borboleta", "cachorro", "passarinho", "flor"};
        Random aleatorio = new Random();
        int index = new Random().nextInt(3);
        System.out.println(index);
        String palavraSelecionada = palavras[index];

        char[] traco = new char[palavraSelecionada.length()];
        for (int i = 0; i < palavraSelecionada.length(); i++) {
            traco[i] = '_';
        }

        int palavraString = palavras[index].length();
        int tentativas = 6;

        while (palavraString > 0 && tentativas > 0) {
            System.out.println();
            for (int i = 0; i < palavraSelecionada.length(); i++) {
                System.out.print(" " + traco[i] + " ");
            }
            System.out.println();

            System.out.println("Você tem " + tentativas + " chances de adivinhar");
            System.out.println("A palavra tem " + palavraString + " letras restantes");
            System.out.println("Digite uma letra: ");
            //teclado.nextLine();
            char letras = teclado.next().charAt(0);
            boolean iscorrect = false;
            for (int i = 0; i < traco.length; i++) {

                if (palavras[index].charAt(i) == letras) {
                    traco[i] = letras;
                    palavraString--;
                    iscorrect = true;
                }
            }

            if (!iscorrect) {
                tentativas--;
            }
        }

        if (palavraString == 0) {
            System.out.println("PARABENS!Você ACERTOU! :)");
        } else {
            System.out.println("Infelizmente Você Perdeu :(");
            System.out.println("A palavra era " + palavraSelecionada);
        }
    }

Bom dei uma arrumada é o que percebi foi alguns erros simples por exemplo algumas vezes você chamou a variável errada no lugar certo, da uma comparada na correção que eu fiz com o seu código qualquer duvida com alguma parte do código que eu alterei só pergunta aí.

Cara muito obrigado pela ajuda. Você me salvou. Deu 100% certo agora.