• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Johny86

Jogo da forca

15 mensagens neste tópico

oi td bem?

alguem tem o jogo da forca?

ja o comecei a fazer tal como criar as palavras, tirar a sorte a palavra, contar o numero de palavras, divisao das letras das palavras

mas precisava da parte de mostrar as palavras nos tracinhos, corresponder cada traço a cada letra da palvra.

se alguem me ajudar agradecia!

cumprimentos,

johny86

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro dava jeito que colocasses acentos no teu português, sempre ajuda a perceber :(

Depois podias ser mais explicito? O que é que tens feito, ou melhor, de que forma o tens feito, e onde é que precisas de ajuda para "mostrar as palavras nos tracinhos"? Tem de ser graficamente? Que componentes estás a usar? É uma aplicação ou uma Applet?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

   char[] palavra = {'_', 'e', z, 'i', 'n', 'h', 'o'};

    public void actualizarPalavra(int posicao, char letra) {
        palavra[posicao] = letra;
    }

se chamares o método com os parâmetros:

    actualizarPalavra(0, 'Z');

ficas com a palavra Zezinho.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro dava jeito que colocasses acentos no teu português, sempre ajuda a perceber :(

Depois podias ser mais explicito? O que é que tens feito, ou melhor, de que forma o tens feito, e onde é que precisas de ajuda para "mostrar as palavras nos tracinhos"? Tem de ser graficamente? Que componentes estás a usar? É uma aplicação ou uma Applet?

Tou a utilizar arrays para armanezar as palavras.

ja agora n tou a utilizar applets, e so visto na console do programa (eclipse).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

alguem sabe como se coloca a letra em cada "tracinho"?

aki esta o codigo:

package JogoDaForca;

import java.util.Random;
import java.util.Scanner; 

public class JogoDaForca {

static int PosicaoLetra(char letra, String PalavraProcura )

{

int j =0;
for (j=0; j< PalavraProcura.length(); j++)

if (PalavraProcura.charAt(j)== letra)
		return(j);

return(-1);



	}//PosicaoLetra
//------------------------------------------------------------MAIN--------------------------------------------------------------

public static void main(String[] args) {

//-----------------------------------------------------INICIALIZAR---------------------------------------------------------------		
String Palavras[] = new String [21];

Palavras[0]="porto"; Palavras[1]="benfica"; Palavras[2]="sporting"; Palavras[3]="portugal"; Palavras[4]="europa"; Palavras[5]="gato"; Palavras[6]="tartaruga"; Palavras[7]="chave";
Palavras[8]="esfera"; Palavras[9]="cadeira"; Palavras[10]="ficha"; Palavras[11]="chefe"; Palavras[12]="empregado"; Palavras[13]="rosa"; Palavras[14]="papoila"; Palavras[15]="saco";
Palavras[16]="porta"; Palavras[17]="natal"; Palavras[18]="indiscutivelmente"; Palavras[19]="universalidades"; Palavras[20]="constitucionalmente";

char traço='_';
char letra;
//---------------------------------------------------TIRAR A SORTE---------------------------------------------------------------*/
Random g = new Random();

int i= g.nextInt(21);



String PalavraAdivinhar=Palavras[i];
String Grande=PalavraAdivinhar.toUpperCase();
System.out.println("Palavra é "+Grande);

//--------------------------------------------CONTAR O NUMERO DE PALAVRAS--------------------------------------------------------

int TamanhoDaPalavra = PalavraAdivinhar.length();


System.out.println("O tamanho de "+PalavraAdivinhar+" é de "+TamanhoDaPalavra+" caracteres");
//System.out.println("A letra ta na posicao" +PalavraProcura);

//------------------------------------------------Ele pede a palavra e diz a posiçao-------------------------------------------------------------

System.out.println("Indique a letra que quer?");
letra=Le.umChar();

for (int n=0 ; n < PalavraAdivinhar.length() ; n++)

System.out.print(" "+traço);
System.out.println();



int posicao = PosicaoLetra(letra,PalavraAdivinhar);

if(posicao==-1)
System.out.println("Letra não existe");
else
System.out.println("A posição de "+letra+" é "+(posicao+1));

//if(PalavraAdivinhar.contains(letra)){



}


}//main





0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui está uma versão rápida do jogo. Alterei o teu código um pouco, que é bastante parecido, com o do Johny86 ;)

package org.sergiolopes.kof20012.JogoDaForca;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class JogoDaForca {
    
    private static final char TRACO = '_';
    private static final char LETRA = '*';
    
    /**
     * Nome de metodos e variaveis e' sempre em minuscula!
     */
    static int posicaoLetra(char letra, String palavraProcura ) {
        for(int j = 0; j < palavraProcura.length(); j++) {
            if(palavraProcura.charAt(j) == letra)
                return j;
        }
        
        return -1;
    }//PosicaoLetra
    
    private static char lerLetra() throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader( System.in ));
        return bf.readLine().charAt(0);
    }
    
//------------------------------------------------------------MAIN--------------------------------------------------------------
    
    public static void main(String[] args) {
        /* 'Inicializar' nao e' uma palavra portuguesa! */
//-----------------------------------------------------INICIAR---------------------------------------------------------------
        /**
         * Novamente, nomes de variaveis e metodos sao em minuscula.
         * O vector com as palavras pode ser declarado e iniciado de uma so vez.
         *//*
        String Palavras[] = new String [21];
            
        Palavras[0]="porto"; Palavras[1]="benfica"; Palavras[2]="sporting"; Palavras[3]="portugal"; Palavras[4]="europa"; Palavras[5]="gato"; Palavras[6]="tartaruga"; Palavras[7]="chave";
        Palavras[8]="esfera"; Palavras[9]="cadeira"; Palavras[10]="ficha"; Palavras[11]="chefe"; Palavras[12]="empregado"; Palavras[13]="rosa"; Palavras[14]="papoila"; Palavras[15]="saco";
        Palavras[16]="porta"; Palavras[17]="natal"; Palavras[18]="indiscutivelmente"; Palavras[19]="universalidades"; Palavras[20]="constitucionalmente";*/
        
        String[] palavras = new String[]{"porto", "benfica", "sporting", "portugal", "europa", "gato", "tartaruga", "chave", "esfera", "cadeira",
        "ficha", "chefe", "empregado", "rosa", "papoila", "saco", "porta", "natal", "indiscutivelmente",
        "universalidades", "constitucionalmente"};
        /**
         * Se estas variaveis sao sempre iguais, para qualquer instancia da classe entao porque e' que nao sao estaticas?
         * Nos nomes das variaveis nao se usam caracteres acentuados, cedilhas, etc...
         *//*
        char traço='_';
        char letra;*/
//---------------------------------------------------TIRAR A SORTE---------------------------------------------------------------*/
        /**
         *O nome das variaveis deve mostrar o que elas guardam.
         */
        Random aleatorio = new Random();
        /**
         * Podemos evitar o uso desta variavel, i, e passar a palavra logo para letra grande.
         * Podemos tambem reutilizar a variavel que guarda a plavra a adivinhar
         * Vamos tambem usar o tamanho do vector de palavras para que, se alteramos o numero de palavras, nao tenhamos de
         * fazer mais alteracoes.
         *//*
        int i= aleatorio.nextInt(21);
            
            
        String PalavraAdivinhar=Palavras[i];
        String Grande=PalavraAdivinhar.toUpperCase();
        System.out.println("Palavra é "+Grande);
          */
        String palavraAdivinhar = palavras[aleatorio.nextInt(palavras.length)].toUpperCase();
        
//--------------------------------------------CONTAR O NUMERO DE PALAVRAS--------------------------------------------------------
        
        /**
         * Novamente a capitalizacao das variaveis esta errada.
         */
        int tamanhoDaPalavra = palavraAdivinhar.length();
        
        System.out.println("O tamanho de " + palavraAdivinhar + " é de " + tamanhoDaPalavra + " caracteres");
//System.out.println("A letra ta na posicao" +PalavraProcura);
        
//------------------------------------------------Ele pede a palavra e diz a posiçao-------------------------------------------------------------
        /**
         * Vamos repensar este sistema....
         *//*
        System.out.println("Indique a letra que quer?");
        letra = Le.umChar();
            
        for (int n=0 ; n < PalavraAdivinhar.length() ; n++)
            
            System.out.print(" "+traço);
        System.out.println();
            
            
            
        int posicao = PosicaoLetra(letra,PalavraAdivinhar);
            
        if(posicao==-1)
            System.out.println("Letra não existe");
        else
            System.out.println("A posição de "+letra+" é "+(posicao+1));
            
//if(PalavraAdivinhar.contains(letra)){
            
            
            
    }*/
        /*Variaveis usar*/
        char letra = '\0';
        
        /**
         *Estrutura que vai guardar o progresso do utilizador.
         */
        char[] palavraTemp = new char[tamanhoDaPalavra];
        for(int z = 0; z < tamanhoDaPalavra; z++) {
            palavraTemp[z] = TRACO;
        }
        
        try {
            /**
             * Tendo em conta que as letras estao em maisculas, a letra para terminar
             * sera o 'q' minusculo.
             */
            while(letra != 'q') {
                System.out.println(String.valueOf(palavraTemp));
                System.out.println("Por favor introduza uma letra: ");
                letra = lerLetra();
                
                /**
                 * Podiamos testar de varias maneiras, vamos simplesmente percorrer a palavra.
                 */
                for(int z = 0; z < tamanhoDaPalavra; z ++) {
                    if(palavraAdivinhar.charAt(z) == letra) {
                        palavraTemp[z] = letra;
                    }
                }
                
                //System.out.println(String.valueOf(palavraTemp));
            }
            
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        //System.out.println(letra);        
    }//main
}

O código foi criado sem ter grandes testes mas penso que mostra mais ou menos como guardar a palavra e como ir mostando os espaços.

Coloquei também uma versão "mais limpa" em anexo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok ja deu resultado mas fiquei com duvidas em certas partes o k e que o codigo faz:

System.out.println(String.valueOf(palavraTemp));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"palavraTemp" é um vector, se o tentares imprimir directamente o que acontece é que ele não é impresso correctamente, a função 'valueOf()' transforma esse vector de chars, numa string que pode ser impressa correctamente.

Verifica o manual de Java, na classe String tens uma explicação talvez melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado. por ultimo

char[] palavraTemp = new char[tamanhoDaPalavra];

quiseste criar o palavraTemp para que?

ja vi que se imprimir da um caracter estranho

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

essa variável é a representação em vector de caracteres da palavra que foi escolhida, se não a usares tens de mandar sempre a manipular Strings, o que não dá muito jeito. Se a tentares imprimir, mostra-te o endereço de memória, para isso é que tens de usar o método da classe String que transforma vectores de caracteres numa String.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
private static char lerLetra() throws IOException

            {        BufferedReader bf = new BufferedReader(new InputStreamReader( System.in ));

                      return bf.readLine().charAt(0);    }

nao é mais fácil assim:

import java.util.scanner;
private static char lerLetra() throws IOException 
{
Scanner sca = new Scanner(System.in);
String a= sca.next();
return a.charAt(0);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais fácil? Não passa pela mesma coisa? Afinal como é que a classe Scanner está implementada? ;)

Neste caso penso que seja apenas uma questão de gosto ou hábito, por hábito trabalho mais com buffers directamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

uma ultima coisa k me ta a dar volta á cabeça

é como reinicializo uma string.

durante o jogo qdo vou a repetir-lo ele fica com o mm erros k fiquei no jogo anterior, por exemplo no jogo anteiror acertei a palavra mas errei 3 letras, ao começar fico com 3 erros em vez de iniciar com 0 erros, tal como a string com as letras fica la as letras ja usadas tb.

a variavel erros e um inteiro

as letras tao dentro duma string

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

erros=0;

letras="";

ficas com a variável de erros a zero com uma string vazia, se pretendes devolver a string a um estado incial, tens de ter mais uma variável que guarde esse estado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

que mais parvo que pareça eu tinha feito isso, mas devo ter posto no local errado.

obrigado e cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora