Ajuda com jogo da forca em Java

1 resposta
C

Boa noite, sou iniciante no curso de informática, e tenho um problema para desenvolver meu jogo da forca.
Eu preciso fazer com que as letras que o usuário digitou, apareçam ao lado da mensagem “letras selecionadas”,
gostaria de ver oque poderia ser feito e qual a ideia de vocês(mais experientes que eu , para conseguir completar o jogo).

aí vai o codigo :

import java.awt.*;

public class FORCA_ORIGINAL extends java.applet.Applet {

// LETRAS A SEREM SORTEADAS

String[] listaPalavras ={PETROLEO, PESTANA, PESTILENTO, PETELECO,

REBOQUE, CADAFALSO, CADEIRA, COLA, REBENTO, DEFUMADO,

DISCURSO, ELETRODOMESTICO, ELETRONICA, ENGRENAGEM,

ESFOMEADO, FERRALHEIRO, FERROVIA, FERTIL, FORTALEZA,

FORTIFICANTE, OFICINA, ORNAMENTO, PALAVRA, PREOCUPACAO,

RADIOLOGIA, RADIOGRAFIA, GRANJA, GRANULADO, INDUZIDO,

IMBATIVEL, INDUSTRIA, INTERNACIONAL, LABIRINTO,

LOBISOMEM, LOCOMOTIVA, TESOURA, MASSAGISTA, MATADOURO,

MOCHILA, NOROESTE, NITROGLICERINA, HELICOPTERO,

CAPITALISMO, SOFTWARE, ENGENHARIA, NOROESTE, AUTENTICO,

LINUX, PROCESSADOR, QUARENTENA, MEDICINA, HOLOCAUSTO,

RADIOGRAFIA, XAROPE, ZAROLHO, ZOOLOGICO, HEREDITARIO,

EXTASE, EXTRAVIO, DUODENO, ECOLOGISTA, TURISMO,

TRAFICANTE, CONSELHO, BAIXISTA, AVESTRUZ, QUIMICA,

BOTANICA, RESPECTIVO, SAXOFONE, TABERNA, OCULTO,

TRIGONOMETRIA, ZODIACO, JUSTAPOSTO, HIDRAULICO, HEXAGONO,

MINEIRO, FRENETICO, EXPLOSIVEL, EXORCISTA, MINISTERIO,TENIS,

GOLEIRA,NARIZ,CABELO,RELOGIO,MINUTOS,CARRO,

ROSA,JANEIRO,BAIXO,MAGRO,QUADRADO,CIRCULO,MATEMATICA,

QUÍMICA,REMEDIO,OCULOS,RAINHA,CHAVEIRO,PAISAGEM,FLORESTA,AMAZONIA,

INGLES,INGLATERRA,PROGRAMA,MEDICINA,ARQUITETURA,CENOURA,COELHO,

GIRAFA,PESCOÇO,OVELHA,PEIXE,ESCOLA };

// LETRAS DO ALFABETO

char[] letrasAlfabeto = { A, B, C, D, E, F, G, H, I, J,

K, L, M, N, O, P, Q, R, S, T, U, V, W,

X, Y, Z };

// CHAR PARA IDENTIFICAR LETRAS QUE NÃO FORAM SELECIONADAS

char[] letrasNaoSelecionadas = new char[26];
// CHAR PARA IDENTIFICAR A PALAVRA SORTEADA
char[] palavra;
// CHAR PARA IDENTIFICAR A LETRA ADIVINHADA COM SUA POSIÇÃO NA PALAVRA
char[] letrasAdivinhadas_X_Posicao;
// INT PARA IDENTIFICAR AS TENTATIVAS ERRADAS
int tentativasErradas;
// INT PARA IDENTIFICAR AS TENTATIVAS TOTAIS
int cont = 0;
// INT PARA IDENTIFICAR A MAIOR PONTUAÇÃO NO CASO DE VITÓRIA
int pontuação = 999;
// INT PARA MOSTRAR A MAIOR PONTUAÇÃO NO CASO DE DERROTA
int pont = 0;
//INT PARA MOSTRAR QUANTAS LETRAS ERROU
int erradas = 0;
//INT PARA MOSTRAR QUANTAS LETRAS ACERTOU
int acertadas = 0;
// STRING PARA IDENTIFICAR O RESULTADO (VITÓRIA OU DERROTA)
String resultado;
// INT PARA CONTAR AS TENTATIVAS RESTANTES
int tentativasRestantes = 6;
// BOOLEAN PARA INICIAR UM NOVO JOGO
boolean novoJogo = false;

// FONTES UTILIZADAS PARA AS LETRAS E PARA A MENSAGEM AO FINAL DO JOGO
Font letras = new Font("SansSerif", Font.BOLD, 24);
Font mensagens = new Font("SansSerif", Font.BOLD, 24);

public void start() {// PARTE 1
	// MÉTODO QUE INICIA O JOGO
	// INICIALIZA VETOR DAS letrasNaoSelecionadas CONTENDO INICIALMENTE
	// TODAS AS LETRAS DISPONIVEIS
	// FOR QUE IDENTIFICA TODAS AS LETRAS NÃO SELECIONADAS, E QUE COMO
	// NÃO HOUVE NENHUM PALPITE AINDA, IDENTIFICA TODAS AS LETRAS
	// COMO NÃO SELECIONADAS
	for (int i = 0; i < letrasNaoSelecionadas.length; i++)
		letrasNaoSelecionadas[i] = letrasAlfabeto[i];

	// SORTEIA A PALAVRA DO JOGO 
	palavra = sorteiaPalavra();

	// ZERA O CONTADOR DE TENTATIVAS A CADA NOVO JOGO
	cont = 0;
	// INICIALIZA VETOR DAS LETRAS JÁ ADIVINHADAS COM TODAS AS POSIÇÕES
	// IGUAL A ZERO
	letrasAdivinhadas_X_Posicao = new char[palavra.length];
	// FOR QUE ZERA AS LETRAS ADIVINHADAS PARA INICIAR O JOGO
	for (int i = 0; i < letrasAdivinhadas_X_Posicao.length; i++)
		letrasAdivinhadas_X_Posicao[i] = '0';

	// INICIALIZA VARIAVEL REFERENTE AO NUMERO DE TENTATIVAS DO USUARIO
	tentativasErradas = 0;
	tentativasRestantes = 6;

	// INICIALIZA VARIAVEIS A SAIDE DE FIM DE UM JOGO
	novoJogo = false;
	resultado = "";

	// CHAMADA AO METODO PAINT NECESSÁRIA PARA O REINICIO DO JOGO
	repaint();
}

// PARTE 1.1 DESENHA TELA DO JOGO
public void paint(Graphics g) {
	// SELECIONA A COR DO FUNDO
	setBackground(Color.black);
	setSize(900,600);
	// SELECIONA FONTE PADRÃO PARA O DESENHO DA TELA
	g.setFont(letras);

	// DESENHA FORCA
	g.setColor(Color.white);
	g.fillRect(20, 20, 110, 10);
	g.fillRect(20, 20, 10, 185);
	g.fillRect(122, 30, 8, 22);
	g.fillRect(10, 195, 30, 10);

	// DESENHA CABEÇA , NARIZ, OLHOS E BOCA
	// QUANDO O USUARIO ERRAR 1 LETRA
	if (tentativasErradas > 0) {
		g.fillRect(113, 52, 25, 28);
		g.fillRect(122, 80, 8, 7);
		g.setColor(Color.black);
		g.fillRect(118, 58, 4, 5);
		g.fillRect(129, 58, 4, 5);
		g.fillRect(121, 70, 9, 4);
		g.setColor(Color.white);
	}

	// DESENHA CORPO
	// QUANDO O USUARIO ERRAR 2 LETRAS
	if (tentativasErradas > 1)
		g.fillRect(106, 87, 39, 50);

	// DESENHA BRAÇO ESQUERDO
	// QUANDO O USUARIO ERRAR 3 LETRAS
	if (tentativasErradas > 2) {
		g.fillRect(102, 87, 6, 6);
		g.fillRect(98, 93, 12, 6);
		g.fillRect(92, 99, 12, 6);
		g.fillRect(87, 105, 11, 10);
		g.fillRect(92, 115, 12, 6);
		g.fillRect(98, 121, 12, 6);
	}

	// DESENHA BRAÇO DIREITO
	// QUANDO O USUARIO ERRAR 4 LETRAS
	if (tentativasErradas > 3) {
		g.fillRect(141, 87, 6, 6);
		g.fillRect(142, 93, 12, 6);
		g.fillRect(147, 99, 12, 6);
		g.fillRect(152, 105, 11, 10);
		g.fillRect(147, 115, 12, 6);
		g.fillRect(142, 121, 12, 6);
	}

	// DESENHA PERNA ESQUERDA
	// QUANDO O USUARIO ERRAR 5 LETRAS
	if (tentativasErradas > 4) {
		g.fillRect(106, 137, 14, 13);
		g.fillRect(106, 150, 10, 10);
		g.fillRect(106, 160, 7, 10);
		g.fillRect(100, 170, 13, 5);
	}

	// DESENHA PERNA DIREITA
	// QUANDO O USUARIO ERRAR A 6 E ULTIMA LETRA
	if (tentativasErradas > 5) {
		g.fillRect(131, 137, 14, 13);
		g.fillRect(135, 150, 10, 13);
		g.fillRect(138, 160, 7, 10);
		g.fillRect(138, 170, 13, 5);
	}
	// DESENHA TRAÇOS REFERENTES AS LETRAS DA PALAVRA ESCONDIDA E AS LETRAS
	// ENCONTRADAS EM SUAS RESPECTIVAS POSIÇÕES
	for (int i = 0; i < palavra.length; i++) {
		if (letrasAdivinhadas_X_Posicao[i] != '0')
			g.drawString(String.valueOf(letrasAdivinhadas_X_Posicao[i]),
					191 + i * 40, 52);
		g.fillRect(190 + i * 40, 58, 20, 4);
	}

	// DESENHA LETRAS AINDA NÃO SELECIONADAS
	int x_LetrasNaoUtilizadas = 190;
	// DECLARA INT 'I' PARA SERVIR NOS "FOR'S"
	int i;
	// DECLARA QUE SE A LETRA NÃO SELECIONADA FOR DIFERENTE DE 0
	// DESENHA-LA NO ESPAÇO DA FORCA
	for (i = 0; i < letrasNaoSelecionadas.length / 2; i++) {
		if (letrasNaoSelecionadas[i] != '0')
			g.drawString(String.valueOf(letrasNaoSelecionadas[i]),
					x_LetrasNaoUtilizadas, 137);
		x_LetrasNaoUtilizadas += 25;
	}
	for (x_LetrasNaoUtilizadas = 190; i < letrasNaoSelecionadas.length; i++) {
		if (letrasNaoSelecionadas[i] != '0')
			g.drawString(String.valueOf(letrasNaoSelecionadas[i]),
					x_LetrasNaoUtilizadas, 160);
		x_LetrasNaoUtilizadas += 25;
	}

	// DESENHA MENSAGEM DE PRESSIONAMENTO DE TECLA
	g.setFont(mensagens);
	g.setColor(Color.white);
	g.drawString("  FORCA : CHRISTIANETTI E THOMAS ", 150, 20);
	g.drawString("VOCÊ DIGITOU  "+cont+ " LETRAS.", 150, 280);
	g.drawString ("VOCÊ AINDA TEM "+tentativasRestantes+ " TENTATIVAS.", 150,300);
	g.drawString("VOCÊ ACERTOU  "+acertadas+ " LETRAS.", 150, 320);
	g.drawString(" LETRAS SELECIONADAS:", 150, 380);
	
	// DESENHA MENSAGEM RELATIVA AO FIM DO JOGO (VITÓRIA OU DERROTA)
	g.drawString(resultado, 200, 220);

	// DESENHA MENSAGEM QUESTIONANDO A ENTRADA DE UM NOVO JOGO
	if (novoJogo)
		g.drawString("Iniciar novo jogo ? (S/N)", 260, 250);
}

// PARTE 2

// SORTEIA PALAVRA EM JOGO ENTRE AQUELAS DA LISTA
public char[] sorteiaPalavra() {
	// DECLARA O INT QUE MOSTRARA O INDICE DA PALAVRA SORTEADA
	int indicePalavra;
	// DECLARA A STRING QUE MOSTRARA A PALAVRA SORTEADA
	// ATRAVÉS DO INDICE
	String palavraSorteada;

	// SORTEIA INDICE DA PALAVRA CONTIDA NO ARRAY listaPalavras
	indicePalavra = (int) (Math.random() * listaPalavras.length);

	// SELECIONA A PALAVRA CORRESPONDENTE AO INDICE SORTEADO NO ARRAY DE
	// PALAVRAS
	palavraSorteada = listaPalavras[indicePalavra];

	// RETORNA PALAVRA SORTEADA
	return palavraSorteada.toCharArray();
}

// PARTE 3

// CAPTURA TECLAS PRESSIONADAS
public boolean keyDown(Event evt, int key) {
	// IF PARA O PRESSIONAMENTO DA TECLA 'S' INDICANDO PEDIDO DE NOVO JOGO
	if (novoJogo && (key == 83 | key == 115)) {
		start();
		// CONTABILIZA '1' PARA A VARIAVEL REFERENTE A PONTUAÇÃO NO CASO DE
		// DERROTA
		pont++;
		return true;
	}  
	// CAPTURA TECLAS NO DECORRER DE UMA SEÇÃO DE JOGO
	// SE A LETRA FOR MAIÚSCULA, RETORNA TECLA
	if (key >= 65 && key <= 90) {
		verificaPalpite((char) key);
		cont++;
		return true;

	}

	// SE A LETRA FOR MINUSCULA, CONVERTE PARA MAIÚSCULA E RETORNA TECLA
	if (key >= 97 && key <= 122) {
		verificaPalpite((char) (key - 32));
		cont++;
		
		return true;
	}
	// SE O PRESSIONAMENTO DA TECLA FOR INVALIDO
	return false;
}

	//                         PARTE 4      
	//VERIFICA SE O PALPIRE CORRETO OU INCORRETO E REALIZA AS AÇÕES REFERENTES
	public void verificaPalpite(char letra_teclada) {
		//REMOVE A LETRA DO VETOR DE LETRAS NÃO UTILIZADAS
		boolean achouLetra = false;
		int indiceBusca = 0;
		while (!achouLetra && indiceBusca < letrasNaoSelecionadas.length) {
			if (letrasNaoSelecionadas[indiceBusca] == letra_teclada) {
				letrasNaoSelecionadas[indiceBusca] = '0';
				achouLetra = true;
			}
			indiceBusca++;
		}

		// CASO A LETRA NÃO SEJA ENCONTRADA, O QUE INDICA QUE ESTA JA FOI
		// UTILIZADA, O MÉTODO É ABORTADO
		if (!achouLetra)
			return;

		// VERIFICA PALPITE PERCORRENDO O VETOR CORRESPONDENTE AS LETRAS DA PALAVRA
		boolean palpiteCorreto = false;
		for (int i = 0; i < palavra.length; i++) {
			if (palavra[i] == letra_teclada) {
				letrasAdivinhadas_X_Posicao[i] = letra_teclada;
				
				palpiteCorreto = true;	
				acertadas ++;
			}
		}

		// CASO O PALPITE SEJA ERRADO, INCREMENTA CONTADOR DE TENTATIVAS ERRADAS
		if (palpiteCorreto == false) {
			tentativasErradas++;
			tentativasRestantes --;
			
		}

		
		// INVOCA MÉTODO QUE VERIFICA TÉRMINO DO JOGO
		verificaFimJogo();

		// REDESENHA TELA COM NOVAS CONFIGURAÇÕES
		repaint();
	}
	//                      PARTE 5             
	//VERIFICA FIM DO JOGO, VITORIA OU DERROTA E RETORNA O RESULTADO
	public void verificaFimJogo() {
		// CHECA DERROTA
		if (tentativasErradas == 6) {
			pont --;
			erradas ++;
			// MENSAGENS
			resultado = " VOCÊ PERDEU!";
			resultado = " VOCÊ JÁ PERDEU " + erradas + " VEZ(ES).";
			if(pont >= 1){
				resultado = "MAIOR PONTUAÇÃO É: "+ pontuação+ " tentativas.";
			}
			novoJogo = true;
		}
		// CHECA VITÓRIA
		else {
			boolean temZero = false;
			// FOR QUE VERIFICA SE TODAS AS LETRAS DA PALAVRA SORTEADA FOI
			// DESCOBERTA 
			for (int i = 0; i < letrasAdivinhadas_X_Posicao.length; i++)
				if (letrasAdivinhadas_X_Posicao[i] == '0')
					temZero = true;
			if (!temZero) {
				// MENSAGEM
				resultado = "PARABENS GAROTIN' !!";
				resultado = "Voce descobriu a palavra em "+ cont + " tentativas!" ;
					// MENSAGEM DE NOVO RECORDE
					if(pontuação > cont ){
						pontuação = cont;
						resultado = "VOCÊ ATINGIU A MAIOR PONTUAÇÃO: "+ pontuação+ " tentativas.";
						
					
				}
			
				
				novoJogo = true;
			}
		}
	}
}

1 Resposta

ViniGodoy

Quando se é iniciante em alguma coisa, como um fórum, lê-se com atenção as regras desse mesmo fórum.
Lá você teria lido esse artigo:

Que te explica:

  1. Que não se deve abrir tópicos usando títulos somente com letras maiúsculas;
  2. Como usar a tag code para deixar seu código formatado;
  3. Que o fórum de Java Básico é para dúvidas de Java Básico, não de interface gráfica;
  4. Que você deve ser específico quanto ao seu problema, não postar seu código todo.
Criado 26 de novembro de 2012
Ultima resposta 26 de nov. de 2012
Respostas 1
Participantes 2