Ajuda para concluir o jogo da forca em java

Boa tarde gente, estou com umas duvidas para concluir o jogo da forca em java.

O programa deve verificar quando o jogador vence. O jogador terá 6 oportunidades para acertar a
palavra. O desenho deve ser formado a cada erro do jogador, começando pela cabeça e seguindo a
sequência: tronco, braço direito, braço esquerdo, perna direita e perna esquerda. A referência de
esquerda e direita deve ser a referência do boneco da forca.
Ao final da partida, o programa deve exibir uma mensagem de congratulações para o jogador
vencedor ou a mensagem “Você foi enforcado!”. Neste caso, o programa deve também apresentar
uma mensagem indicando qual era a palavra. Em qualquer um dos casos, apresentar ao final uma
mensagem perguntando se ele deseja jogar novamente. Se ele escolher não jogar novamente, sair
do programa enviando uma mensagem “Fim do Programa!”.
Dicas de implementação
Segue uma lista de dicas para implementação do projeto.
 A tela inicial deverá ter 3 opções:
 Opção 1: Inserir nova palavra;
 Opção 2: Jogar;
 Opção 3: Sair
 A opção 1 (Inserir nova palavra) será usada para alimentar o vetor/matriz com as palavras que
serão sorteadas para compor o Jogo da Forca.

Isso é oq eu fiz até agora

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

public class TrabalhoJogoDaForca {

public static void main(String[] args) {
	
	Scanner teclado = new Scanner(System.in);
	Random aleatorio = new Random();
	
	int opcao, tam, erros=0, acertos=0;
	char letra;
	boolean jogarNov = true;
	String[] palavras = {"Escorpiao", "Maratona", "Aritmetica", "Libertaçao", "Campo", "Esconder", "Programa", "Triplo", "Tambor", "Porcentagem"};
	String palavraNova, palavra, palavraAcertos="";
	
	System.out.println("-Opção 1: Inserir nova palavra");
	System.out.println("-Opção 2: Jogar");
	System.out.println("-Opção 3: Sair");
	System.out.println("Escolha uma opção: ");
	opcao = teclado.nextInt();
	
	switch(opcao)
	{
	case 1:
		System.out.println("Inserir nova palavra ");
		
		System.out.println("Informe uma palavra: ");
		palavraNova = teclado.next().toLowerCase();
		break;
	case 2:
		while(jogarNov == true)
		{	
		System.out.println("Jogar");
		
		System.out.println("Informe a palavra: ");
		palavra = teclado.next().toLowerCase();		
		tam = palavra.length();
		
		char charsAcertos[] = new char[tam];	
		for(int i=0; i<tam; i++)
		{
			charsAcertos[i] += '_';
		}
		
		boolean achou = false;
		while(erros<6 && acertos<tam)
		{
			if(erros==0)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                       ");
			System.out.println("|                       ");
			System.out.println("|                       ");
			}
		    else if(erros==1)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                      O");
			System.out.println("|                       ");
			System.out.println("|                       ");
			}
			else if(erros==2)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                      O");
			System.out.println("|                      |");
			System.out.println("|                       ");
			}
			else if(erros==3)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                      O");
			System.out.println("|                      |\\");
			System.out.println("|                       ");
			}
			else if(erros==4)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                      O");
			System.out.println("|                     /|\\");
			System.out.println("|                       ");
			}
			else if(erros==5)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                      O");
			System.out.println("|                     /|\\");
			System.out.println("|                       \\ ");
			}
			else if(erros==6)
			{
			System.out.println("------------------------");
			System.out.println("|----------------------|");
			System.out.println("|                      O");
			System.out.println("|                     /|\\");
			System.out.println("|                     / \\");
		    }	
			System.out.println("Digite uma letra: ");
			letra = teclado.next().toLowerCase().charAt(0);
			
		if(String.copyValueOf(charsAcertos).indexOf(letra) == -1)			
		{
			for (int i=0; i<tam; i++) 
			{
				if(palavra.charAt(i)==letra)
				{
					charsAcertos[i]=letra;
					achou = true;
					acertos++;
				}
			}
			if (!achou)
			{
				erros++;
			}
		}
	    System.out.println("Erros: "+erros);
	    
		for(int i=0; i<tam; i++)
		{
			System.out.print(charsAcertos[i]+" ");
		}
		achou = false;
		System.out.println();
		}
		if(erros==6)
		{
			System.out.println("Você foi enforcado!");
			System.out.println("A palavra era: " +palavra);
		}
		else
		{
			System.out.println("PARABÉNS, você acertou a palavra!");
		}
		System.out.println("Deseja Continuar S/N?");
		jogarNov = teclado.nextBoolean();
		
		if(jogarNov == true)
		{
			System.out.println();
		}
		else
		{
			System.out.println();
		}
		}
        break;
        case 3:
	    System.out.println("Sair");
	    break;		
        default:
	    System.out.println("Opção Inválida");
        }
        System.out.println("Fim do Programa!");

        teclado.close();
}

}

Ao invés de o jogador inserir a palavra na opçao 2 do menu, eu tenho que gerar uma palavra aleatoria q está armazenada nesse vetor de string

Caraca, você implementou tudo num único método?
Isso não se faz, fica muito difícil de entender e fazer manutenção.

Dei uma refatorada no seu código, veja:

import java.io.PrintStream;
import java.util.Random;
import java.util.Scanner;

public class TrabalhoJogoDaForca {

    private static final Scanner entrada = new Scanner(System.in);
    private static final PrintStream saida = System.out;

    private static final int OPCAO_INSERIR = 1;
    private static final int OPCAO_JOGAR = 2;
    private static final int OPCAO_SAIR = 3;

    public static void main(String[] args) {
        TrabalhoJogoDaForca programa = new TrabalhoJogoDaForca();
        programa.executar();
    }

    private String[] palavras = new String[0];

    private int erros = 0;
    private int acertos = 0;

    public void executar() {
        while (true) {
            int opcao = escolherOpcao();
            switch (opcao) {
                case OPCAO_INSERIR:
                    opcaoInserir();
                    break;
                case OPCAO_JOGAR:
                    opcaoJogar();
                    break;
                case OPCAO_SAIR:
                    opcaoSair();
                    break;
                default:
                    opcaoInvalida();
                    break;
            }
        }
    }

    private int escolherOpcao() {
        while (true) {
            saida.println("-Opção " + OPCAO_INSERIR + ": Inserir nova palavra");
            saida.println("-Opção " + OPCAO_JOGAR + ": Jogar");
            saida.println("-Opção " + OPCAO_SAIR + ": Sair");
            saida.print("Escolha uma opção: ");
            int opcao;
            try {
                opcao = Integer.parseInt(entrada.nextLine());
            } catch (NumberFormatException e) {
                saida.println("Opção inválida!");
                continue;
            }
            switch (opcao) {
                case OPCAO_INSERIR:
                case OPCAO_JOGAR:
                case OPCAO_SAIR:
                    return opcao;
                default:
                    saida.println("Opção inválida!");
                    continue;
            }
        }
    }

    private void mostraForca(int erros) {
        String forca = " ------------------------  \n" //
                + " |----------------------|  \n" //
                + " |                      A  \n" //
                + " |                     DBC \n" //
                + " |                     F E \n";//

        switch (erros) {
            case 0:
                forca = forca.replace('A', ' ').replace('B', ' ').replace('C', ' ').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                break;
            case 1:
                forca = forca.replace('A', 'O').replace('B', ' ').replace('C', ' ').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                break;
            case 2:
                forca = forca.replace('A', 'O').replace('B', '|').replace('C', ' ').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                break;
            case 3:
                forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                break;
            case 4:
                forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', '/').replace('E', ' ').replace('F', ' ');
                break;
            case 5:
                forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', '/').replace('E', '\\').replace('F', ' ');
                break;
            case 6:
                forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', '/').replace('E', '\\').replace('F', '/');
                break;
        }
        saida.println(forca);
    }

    private void opcaoInserir() {
        saida.println("Inserir nova palavra ");
        saida.print("Informe uma palavra: ");
        String palavraNova = entrada.nextLine().toLowerCase();

        int tamanho = palavras.length;
        String[] maisPalavras = new String[tamanho + 1];
        System.arraycopy(palavras, 0, maisPalavras, 0, tamanho);
        maisPalavras[tamanho] = palavraNova;
        palavras = maisPalavras;

        saida.println("Palavras cadastradas:");
        for (String palavra : palavras) {
            saida.println("-" + palavra);
        }
        saida.println();
    }

    private void opcaoInvalida() {
        saida.println("Opção Inválida");
    }

    private void opcaoJogar() {
        if (palavras.length == 0) {
            saida.println("Não há palavras cadastradas");
            return;
        }
        boolean continuar = true;
        while (continuar) {
            saida.println("Jogar");
            erros = 0;
            acertos = 0;
            int sorteada = new Random().nextInt(palavras.length);
            String palavra = palavras[sorteada];

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

            boolean achou = false;
            while (erros < 6 && acertos < tamanho) {
                mostraForca(erros);

                saida.print("Digite uma letra: ");
                char letra = entrada.nextLine().toLowerCase().charAt(0);

                if (String.valueOf(charsAcertos).indexOf(letra) == -1) {
                    for (int i = 0; i < tamanho; i++) {
                        if (palavra.charAt(i) == letra) {
                            charsAcertos[i] = letra;
                            achou = true;
                            acertos++;
                        }
                    }
                    if (!achou) {
                        erros++;
                    }
                }
                saida.println("Erros: " + erros);

                for (int i = 0; i < tamanho; i++) {
                    saida.print(charsAcertos[i] + " ");
                }
                saida.println();
                achou = false;
            }
            if (erros == 6) {
                mostraForca(erros);
                saida.println("Você foi enforcado!");
                saida.println("A palavra era: " + palavra);
            } else {
                saida.println("PARABÉNS, você acertou a palavra!");
            }

            saida.println("Deseja Continuar S/N?");
            continuar = "S".equalsIgnoreCase(entrada.nextLine());
            saida.println();
        }
    }

    private void opcaoSair() {
        saida.println("Sair");
        saida.println("Fim do Programa!");
        System.exit(0);
    }
}

Então mano, como estou no primeiro periodo da faculdade tenho q usar num unico metodo, estou aprendendo as estruturas basicas em java, estrutura condiconal, de loop e arrays.

Muito triste isso. :frowning:

Segue o monolito:

import java.io.PrintStream;
import java.util.Random;
import java.util.Scanner;

public class TrabalhoJogoDaForca {

    public static void main(String[] args) {
        final int OPCAO_INSERIR = 1;
        final int OPCAO_JOGAR = 2;
        final int OPCAO_SAIR = 3;
        final Scanner entrada = new Scanner(System.in);
        final PrintStream saida = System.out;
        String[] palavras = new String[0];
        int erros = 0;
        int acertos = 0;
        while (true) {
            int opcao;
            LER_OPCAO: while (true) {
                saida.println("-Opção " + OPCAO_INSERIR + ": Inserir nova palavra");
                saida.println("-Opção " + OPCAO_JOGAR + ": Jogar");
                saida.println("-Opção " + OPCAO_SAIR + ": Sair");
                saida.print("Escolha uma opção: ");
                try {
                    opcao = Integer.parseInt(entrada.nextLine());
                } catch (NumberFormatException e) {
                    saida.println("Opção inválida!");
                    continue LER_OPCAO;
                }
                switch (opcao) {
                    case OPCAO_INSERIR:
                    case OPCAO_JOGAR:
                    case OPCAO_SAIR:
                        break LER_OPCAO;
                    default:
                        saida.println("Opção inválida!");
                        continue LER_OPCAO;
                }
            }

            switch (opcao) {
                case OPCAO_INSERIR:
                    saida.println("Inserir nova palavra ");
                    saida.print("Informe uma palavra: ");
                    String palavraNova = entrada.nextLine().toLowerCase();

                    int tamanho = palavras.length;
                    String[] maisPalavras = new String[tamanho + 1];
                    System.arraycopy(palavras, 0, maisPalavras, 0, tamanho);
                    maisPalavras[tamanho] = palavraNova;
                    palavras = maisPalavras;

                    saida.println("Palavras cadastradas:");
                    for (String palavra : palavras) {
                        saida.println("-" + palavra);
                    }
                    saida.println();
                    break;
                case OPCAO_JOGAR:
                    if (palavras.length == 0) {
                        saida.println("Não há palavras cadastradas");
                        return;
                    }
                    boolean continuar = true;
                    while (continuar) {
                        saida.println("Jogar");
                        erros = 0;
                        acertos = 0;
                        int sorteada = new Random().nextInt(palavras.length);
                        String palavra = palavras[sorteada];

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

                        boolean achou = false;
                        while (erros <= 6 && acertos < tamanho) {
                            String forca = " ------------------------  \n" //
                                    + " |----------------------|  \n" //
                                    + " |                      A  \n" //
                                    + " |                     DBC \n" //
                                    + " |                     F E \n";//

                            switch (erros) {
                                case 0:
                                    forca = forca.replace('A', ' ').replace('B', ' ').replace('C', ' ').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                                    break;
                                case 1:
                                    forca = forca.replace('A', 'O').replace('B', ' ').replace('C', ' ').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                                    break;
                                case 2:
                                    forca = forca.replace('A', 'O').replace('B', '|').replace('C', ' ').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                                    break;
                                case 3:
                                    forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', ' ').replace('E', ' ').replace('F', ' ');
                                    break;
                                case 4:
                                    forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', '/').replace('E', ' ').replace('F', ' ');
                                    break;
                                case 5:
                                    forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', '/').replace('E', '\\').replace('F', ' ');
                                    break;
                                case 6:
                                    forca = forca.replace('A', 'O').replace('B', '|').replace('C', '\\').replace('D', '/').replace('E', '\\').replace('F', '/');
                                    break;
                            }
                            saida.println(forca);
                            if (erros == 6) {
                                break;
                            }

                            saida.print("Digite uma letra: ");
                            char letra = entrada.nextLine().toLowerCase().charAt(0);

                            if (String.valueOf(charsAcertos).indexOf(letra) == -1) {
                                for (int i = 0; i < tamanho; i++) {
                                    if (palavra.charAt(i) == letra) {
                                        charsAcertos[i] = letra;
                                        achou = true;
                                        acertos++;
                                    }
                                }
                                if (!achou) {
                                    erros++;
                                }
                            }
                            saida.println("Erros: " + erros);

                            for (int i = 0; i < tamanho; i++) {
                                saida.print(charsAcertos[i] + " ");
                            }
                            saida.println();
                            achou = false;
                        }
                        if (erros == 6) {
                            saida.println("Você foi enforcado!");
                            saida.println("A palavra era: " + palavra);
                        } else {
                            saida.println("PARABÉNS, você acertou a palavra!");
                        }

                        saida.println("Deseja Continuar S/N?");
                        continuar = "S".equalsIgnoreCase(entrada.nextLine());
                        saida.println();
                    }
                    break;
                case OPCAO_SAIR:
                    saida.println("Sair");
                    saida.println("Fim do Programa!");
                    saida.close();
                    entrada.close();
                    System.exit(0);
                    break;
                default:
                    saida.println("Opção Inválida");
                    break;
            }
        }
    }
}

Valeu mn, vai ajudar muito!

ola, eu coneguiria passar isso para uma Interface grafica?

Se tiver criatividade e experiência em desenhar telinhas, sim.

Eu to tentando aqui, mas ta dificil ;-;, poderia me ajudar?

aceita meu convite no teu insta :slight_smile:

vamos trocar algumas palavras! Staroski

Vai postando seu código e suas dúvidas no fórum.

Por favor, deixe de ser inconveniente.
Dúvidas eu respondo no fórum, não no Instagram.

Não quis ser abusivo não moço, é que por la é mais rapido e facil para mim, desculpa se me coloquei errado! é que estou bem atrasado com minhas atividades por causa disso… Ai tentei buscar uma alternativa mais viável!