Help por favor, jogo da forca

Estou começando com programação, vi que é bom começar a tentar a resolver problemas como este, ou um jogo da velha, então resolvi começar com o jogo da forca, porque n envolve array multidimencional, estou com um duvida e n consegui resolver uma parte, que seria incrementar o erro, mas n estou conseguindo.

public static void main(String[] args) {

	Scanner scan = new Scanner(System.in);

	String[] palavra = { "arvore", "flor", "casa", "futebol" };

	Random random = new Random();

	int index = random.nextInt(4);

	String palavraSelecionado = palavra[index];
	char[] traco = new char[palavraSelecionado.length()];

	System.out.println(palavraSelecionado);
	for (int i = 0; i < palavraSelecionado.length(); i++) {
		traco[i] = '_';
		System.out.print(traco[i] + " ");
	}
	int acertos = 0;
	int erros = 0;
	while (acertos < palavraSelecionado.length()) {
		char letra = scan.next().charAt(0);

		for (int i = 0; i < palavraSelecionado.length(); i++) {

			if (palavraSelecionado.charAt(i) == letra) { // verifica se possuí a letra na palavra
				if (palavraSelecionado.charAt(i) == traco[i]) { // verifica se a letra informada ja foi digitada

					System.out.println("ja possui essa letra");
					break;
				} else {

					traco[i] = letra;
					acertos++;

				}

			}

			System.out.print(traco[i] + " ");

		}
		System.out.println();
		System.out.println("Erros " + erros);
		System.out.println("Acertos " + acertos);
	}

Incremente da mesma forma que está incrementando os acertos, antes do break.

if (palavraSelecionado.charAt(i) == traco[i]) {
    System.out.println("ja possui essa letra");
    erros++;
    break;
}

mas nessa parte eu pensei somente em validar se ja foi digitado a letra, tipo na palavra casa, eu digito ‘a’ ai entraria na palavra, ai dps eu digitaria ‘a’ dnv e mostraria essa mensagem de “ja possui essa letra” n se encaixaria em um erro…

Pois então, o que seria considerado erro?

quando eu digitasse uma letra que n tem na palavra, como a palavra “casa” e eu digitasse um “z”, ai seria um erro, pela logica que estou pensando.

Pelo que entendi a única condição que falta é o erro. Se não passar pela condição:

if (palavraSelecionado.charAt(i) == letra)

Automaticamente a letra fornecida está errada, correto? Então basta colocar uma condição para isso no final do loop.

while (acertos < palavraSelecionado.length()) {
        Character letra = scan.next().charAt(0);
        boolean isErro = true;
        for (int i = 0; i < palavraSelecionado.length(); i++) {
            if (palavraSelecionado.charAt(i) == letra) {
                isErro = false;
                if (palavraSelecionado.charAt(i) == traco[i]) {
                    System.out.println("ja possui essa letra");
                    break;
                } else {
                    traco[i] = letra;
                    acertos++;
                }
            }
            System.out.print(traco[i] + " ");
        }
        if (isErro) {
            erros++;
        }
        System.out.println();
        System.out.println("Erros " + erros);
        System.out.println("Acertos " + acertos);
    }

Cada vez que retornar no laço while, será criado a variável boolean “isErro” como true. Se entrar naquela condição que mencionei, automaticamente ele será false, pois a letra não é um erro, ela foi “usada”.
Ao sair do loop “for”, irá fazer a verificação do erro. Espero que seja isso, pois não pude testar.

1 curtida

okay man, vlw ai, obrigado mesmo