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