Problemas com jogo da forca - para faculdade

17 respostas
gustavosis

Pessoal,
comecei esse semestre a estudar java e o professor nos pediu pra fazer um programa de jogo da forca, mas não estou conseguindo, com os conhecimentos que tenho no momento, peço uma ajuda, para que possa ir desenvolvendo com a ajuda de voces. conforme as duvidas forem surgindo, vou postando aqui e com a ajuda do forum tenho certeza que vou conseguir fazer o programa e aprender, pois estou gostando muito desta linguagem. o professor quer um vetor de 100 palavras que sejam geradas aleatoriamente e apareçam na tela em forme de ******. conforme o jogador vai acertando as palavras, o * correspondente da lugar a palavra, se ele errar contabiliza um erro, maximo de 6 erros.
segue abaixo o que já consegui fazer.

private void btnPalavraMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnPalavraMouseClicked
// TODO add your handling code here:
        int erros = 0;
        int acertos = 0;
        int x = 4;
        char y = '*'; 
        String letra;
        String[] nomesForca = new String[4];
        nomesForca [0] = "MASSAGISTA";
        nomesForca [1] = "ESFOMEADO";
        nomesForca [2] = "FORTE";
        nomesForca [3] = "ZOOLOGICO";
        char [] sorteada = new char[nomesForca.length];
        char[] asterisc = new char[nomesForca.length];
     
       
        x= (int) (x * Math.random());
        lbPalavra.setText(nomesForca[x]);
        for (int i = 0; i < nomesForca[x].length(); i++){
            tarSaida.setText("*" );
            
        }

estou tentando fazer aqui no final que a palavra sorteada seja substituida por *, mas só aparece 1. Comecei com 4 vetores, para ficar mais simples. sei que falta muito, mas cheguei a esse ponto e já estou começando a danificar o codigo de tanto mexer, fiquei com receio de atrapalhar muito e não conseguir voltar depois. sei que tem muita coisa errada até no que está rodando, por isso conto com a ajuda de voces.

um abraço,

Gustavo

17 Respostas

ViniGodoy

Olá Gustavo, seja bem-vindo ao GUJ!

Algumas dicas:

1. Para sortear as palavras, ao invés do Math.random() use a classe Random, que tem o prático método nextInt. Vai deixar o seu código mais claro.

2. Monte os astericos num StringBuilder para só depois dar um setText no seu JTextField. Você estava dando várias vezes setText em um só asterisco, e não concatenando vários asteriscos numa String e depois atribuindo.

Abaixo segue um código de exemplo:
Random r = new Random();
   x= r.nextInt(nomesForca.length); //Pega um número entre 0 e nomesForca.length - 1
   lbPalavra.setText(nomesForca[x]);

   StringBuilder sb = new StringBuilder();
   for (int i = 0; i &lt nomesForca[x].length(); i++){
      sb.append("*");
   }
   tarSaida.setText(sb.toString());
gustavosis

Obrigado,

vou continuar daqui, qq duvida em outra parte do codigo posto novamente.

gustavosis

Estudei a lógica do código que me passou e tentei continuar fazendo da minha forma, para não complicar muito a minha cabeça, tendo que mudar todo o código, então esta assim até agora.

private void btnPalavraMouseClicked(java.awt.event.MouseEvent evt) {                                        
// TODO add your handling code here:
        int erros = 0;
        int acertos = 0;
        int x = 4;
        char letra;
        String[] nomesForca = new String[4];
        nomesForca [0] = "MASSAGISTA";
        nomesForca [1] = "ESFOMEADO";
        nomesForca [2] = "FORTE";
        nomesForca [3] = "ZOOLOGICO";
        char [] sorteada = new char[nomesForca.length];
     
       
        x= (int) (x * Math.random());
        sorteada = nomesForca[x]; //aqui está dando erro, pois é string passando para char, nao sei como fazer
        lbPalavra.setText(nomesForca[x]);
        for (int i = 0; i < nomesForca[x].length(); i++){
            tarSaida.append("*");
            
        }
        // esse while verifica se a quantidade de erros foi igual a 6, se for, perdeu
        // se a quantidade de acertos também for superior a palavra, venceu
        while (erros < 6 | acertos < nomesForca[x].length()){
            letra = (txtLetra.getText()); // aqui esta dando erro string passando para char, nao sei como fazer
            for (int i = 0; i < sorteada.length; i++){
                if (letra == sorteada[i]){
                    sorteada[i] = letra;
                    acertos++;}
                else{
                    erros++;
                }
                
                    
                }
            
            
        
        }    
    }

meu grande problema no momento é transformar string pra char, não sei como fazer…aguardo a ajuda dos amigos…
´

Gustavo.

gustavosis

consegui descobrir como passar de string para char, bendita internet…rsrsrs.

agora o codigo ficou assim…

x= (int) (x * Math.random());
        sorteada = nomesForca[x].toCharArray(); //aqui está dando erro, pois é string passando para char, nao sei como fazer
        lbPalavra.setText(nomesForca[x]);
        for (int i = 0; i < nomesForca[x].length(); i++){
            tarSaida.append("*");
            
        }
        // esse while verifica se a quantidade de erros foi igual a 6, se for, perdeu
        // se a quantidade de acertos for superior a palavra, venceu
        while (erros < 6 | acertos < nomesForca[x].length()){
            letra = txtLetra.getText().toCharArray(); // aqui esta dando erro string passando para char, nao sei como fazer
            for (int i = 0; i < sorteada.length; i++){
                if (letra[1] == sorteada[i]){
                    sorteada[i] = letra[1];
                    acertos++;}
                else{
                    erros++;
                }
                
                    
                }
            
            
        
        }    
    }

ta rodando, tudo certo…mas agora como faço para a medida que for acertando as palavras, possa ir substituindo elas em tarSaida ?

Estou fazendo esse evento todo dentro de um button, ou seja, eu clico no button para inicio do jogo, gera a palavra escondida e num TextField digito a letra que quero tentar acertar…isso está dentro do while, será que dessa forma, sem colocar outro button pra tentar acertar a palavra eu consigo fazer? duvidas…
aguardo auxilio dos amigos,

Gustavo.

thokk

é só vc criar um contador.

gustavosis

não entendi.
sou iniciante ainda, estou começando agora a ver java.
poderia me dizer como e aonde no meu código colocar esse contador?

tfsone

Começou a estudar Java agora?
Jogo da forca??? O.o

Que faculdade é essa??? Diz pra mim ir pra lá…
Na minha eu to vendo POO II agora e estamos aprendendo Fila, Pilha e Árvores…

To meio assim: :shock:

gustavosis

Pessoal, consegui chegar até aqui…não sei se vai realmente comparar a palavra, mas não está dando erro.

estou pensando em pegar o que for digitado no teclado e salvar na variavel letra, e depois comparar letra com sorteada[i], mas como faço pra pegar o que foi digitado no teclado?

segue o codigo:

private void btnPalavraMouseClicked(java.awt.event.MouseEvent evt) {                                        
// TODO add your handling code here:
        int erros = 0;
        int acertos = 0;
        int x = 10;
        char[] letra = new char [1];
        String[] nomesForca = new String[10];
        nomesForca [0] = "MASSAGISTA";
        nomesForca [1] = "ESFOMEADO";
        nomesForca [2] = "FORTE";
        nomesForca [3] = "ZOOLOGICO";
        nomesForca [4] = "TESTE";
        nomesForca [5] = "COMPUTAR";
        nomesForca [6] = "GATO";
        nomesForca [7] = "PIPOCA";
        nomesForca [8] = "SUPER";
        nomesForca [9] = "FURTADO";
        char [] sorteada = new char[nomesForca.length];
        x= (int) (x * Math.random());
        sorteada = nomesForca[x].toCharArray(); //aqui está dando erro, pois é string passando para char, nao sei como fazer
        lbPalavra.setText(nomesForca[x]);
        for (int i = 0; i < nomesForca[x].length(); i++){
            tarSaida.append("*");
            
        }
        // esse while verifica se a quantidade de erros foi igual a 6, se for, perdeu
        // se a quantidade de acertos for superior a palavra, venceu
        while (erros < 6 && acertos < nomesForca[x].length()){
            letra = txtLetra.getText().toCharArray(); // aqui esta dando erro string passando para char, nao sei como fazer
            for (int i = 0; i < sorteada.length; i++){
                if (letra[1] == sorteada[i]){
                    sorteada[i] = letra[1];
                    acertos++;
                }
                else{
                    erros++;
                }             
                 txtLetra.setText("");   
                }
            
            
        
        }    
    }

agradeço desde já a ajuda.

gustavosis

Pessoal, estou precisando muito de ajuda neste codigo.

ViniGodoy

Você precisa associar um keyListener a algum de seus componentes. No caso, pode ser ao painel onde o textfield está.

seuPainel.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { char letraPressionada = evt.getKeyChar(); //resto do código } }

D

PO nesse codigo se fosse pra ao inves d ter as palavras gravadas no jogo um outro jogador a pusessem para o outro descobrir como ficaria ???

ViniGodoy

Você teria que ler as palavras do teclado, e adiciona-las num array (ou num list), por exemplo:

String[] nomesForca = String[10];

Scanner in = new Scanner(system.in);
//Lê 10 palavras
for (int i = 0; i < palavras.length; i++) {
   System.out.println("Digite a palavra: ");
   nomesForca[i] = in.nextLine().toUpperCase();
}

Usei o comando toUpperCase() para ter certeza que as palavras ficarão em letras maiúsculas.

D

po e se eu kisesse q aparecesse na interface um “teclado” ( tovesse as letras tds) onde a pessoa clicasse nela para verificar na palavra …como seria ??

ViniGodoy

De novo o “po”.
Não sei o que significa a palavra “tovesse”.

E sua frase não tem concordância.

Mas, se vc quiser desenhar um teclado, tem 4 opções:

  1. Criar uma JTable com o layout de um teclado (visualmente fica feio, mas funciona);
  2. Adicionar vários botões no layout do teclado (também fica feio, mas também funciona);
  3. Desenhar o teclado usando Java 2D (fica bonito);
  4. Usar o Java 2D para colocar a imagem de um teclado (também fica bonito).
D

eh + o codigo como ficaria? naum faço ideia !! … e po para de corrigir as frases issu eh net.

D

tnaires

Não, isso aqui é um fórum onde as pessoas devem se expressar corretamente, ninguém aqui é obrigado a ficar fazendo as coisas pro seu agrado, tampouco ficar decifrando seus hieróglifos.
Não é a comunidade que tem que se adaptar a você, é você que tem que se adaptar à comunidade.

Criado 11 de abril de 2007
Ultima resposta 10 de ago. de 2008
Respostas 17
Participantes 6