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