elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  juego de adivinar palabras en consola con 3 dificultades
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: juego de adivinar palabras en consola con 3 dificultades  (Leído 3,565 veces)
sheiking

Desconectado Desconectado

Mensajes: 10


Ver Perfil
juego de adivinar palabras en consola con 3 dificultades
« en: 1 Octubre 2018, 04:33 am »

hola que tal estoy haciendo un programa que me adivine palabras y que tenga 3 dificultades pero no logro hacer que me lea las letras que escribo porque directamente me manda a la excepcion que puse en el codigo

esto es lo que llevo actualmente

package adivinapalabras;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


public class AdivinarPalabras {
public static BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
private static Set correctas;

String Facil[]= {"reir","hola","jugo","papa","pala","pasa","para","alma","nada","casa","mama","tele","mira","tela","bala","cera","tira"};
String Normal[]={"apretado", "avestruz","ceramica","estimulo","amarillo","eleccion","estrecho","invierno","chatarra","estrella"};
String Dificil[]={"indiscutible","participante","personalismo","perturbacion","contundencia","supervisamos","buscapleitos","vinculandose"};

public String generaPalabra(int Facil)
{
int n;
n= (int)(Math.random()*4);
if(Facil==0)
return Normal[n];

else
return Dificil[n];

}

public boolean checarLetra (char letra,String palabra )
{
boolean mensaje=false;
for(int i=0;i<palabra.length();i++)
{
if(letra==palabra.charAt(i))
{
mensaje = true;
break;
}
}
return mensaje;
}




public Set letrasPalabra(String palabra)
{
Set letras = new HashSet();
for (int i=0;i<palabra.length() ;i++)
{
if(palabra.charAt(i) != ' ')
{
letras.add(palabra.charAt(i));
}
}
return letras;
}

public String actualizaVisible(Set correctas, String palabra, String visible)
{
visible =""; boolean bandera = false;
Iterator it = correctas.iterator();
for(int i=0; i<palabra.length() ;i++)
{
while(it.hasNext())
{
char a = it.next().toString().charAt(0);
System.out.println(" "+a+" "+palabra.trim().charAt(i) );
if ( a == palabra.trim().charAt(i) )
{
visible += a; bandera = true;
break;
}
}
if (bandera == false)
{
visible += "_";
}
bandera=false; it = correctas.iterator();
}
return visible;
}





public static void main(String[] args) throws Exception {

System.out.println("Establezca el nivel de dificultad: ");
System.out.println("Facil(f)");
System.out.println("Normal(n)");
System.out.println("Dificil(d)");
String dificultad = entrada.readLine();


switch(dificultad)
{
case "f":
AdivinarPalabras Operacion = new AdivinarPalabras ();

Operacion.generaPalabra(1);

System.out.println("Palabra generada: ****");
System.out.println("teclea una letra de la palabra");
String letra = entrada.readLine();
char l=letra.charAt(0);
try
{
Operacion.checarLetra(l, letra);
Operacion.letrasPalabra(letra);
Operacion.actualizaVisible( correctas,letra,letra);
}
catch(Exception ex)
{
System.out.println("No introdujo una letra valida "+ex.getMessage());
}
case "n":
}
}
}
[/img][/img][/img][/img][/img][/img][/img][/img]


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: juego de adivinar palabras en consola con 3 dificultades
« Respuesta #1 en: 2 Octubre 2018, 01:16 am »

Hola,

no veo el log por lo visto es NPE nullPointerException

claro private static Set<String> correctas; a punta a null instancia la variable de clase, "clase" porque la tienes con static


Código
  1. private static Set<String> correctas = new HashSet<>(); //
usa operador diamante <> de generics



Código
  1. public String generaPalabra(int Facil)
  2. {
  3. int n;
  4. n= (int)(Math.random()*4);
  5. if(Facil==0)
  6. return Normal[n];
  7.  
  8. else
  9. return Dificil[n];
  10.  
  11. }

siempre dará falso porque se compara 1==0 que es falso retornando un valor random del array Difícil creo que mejor es así,

Código
  1. public String generaPalabra(final int facil) {
  2.        if (facil == 1) {
  3.            return Types.FACIL[SR.nextInt(Types.FACIL.length - 1)];
  4.        } else if (facil == 2) {
  5.            return Types.NORMAL[SR.nextInt(Types.NORMAL.length - 1)];
  6.        }
  7.        return Types.DIFICIL[SR.nextInt(Types.DIFICIL.length - 1)];
  8. }



donde
Código
  1. SR.nextInt()
para generar un numero aleatorio contenido en el largo del array fácil , y menos 1 para evitar

Código

facil tiene 17 elementos, si cae 18 daría error xq el array no es de ese tamaño pero con -1 nunca caera 18 XD

Código

método checarLetra creo que debería comparar aquí pero con la palabra que se genera de manera aleatoria con el método generaPalabra que la retorna

Código
  1. palabraGenerada = Operacion.generaPalabra(1);  // ver linea 90

si la palabra aleatoria es tela si se introduce X debería retornar false, porque x no esta en la palabra "tela"

Código
  1. public boolean checarLetra(char letra, String palabra) {
  2.        boolean mensaje = false;
  3.        for (int i = 0; i < palabra.length(); i++) {
  4.            if (letra == palabra.charAt(i)) {
  5.                mensaje = true;
  6.                break;
  7.            }
  8.        }
  9.        return mensaje;
  10. }

xq si lo dejas como lo tienes siempre dará true ya que compará siempre el carácter introducido con la palabra que tecleas



Aquí como parámetro dices palabra e introduces una letra ? XD o quizás dices, que cada letra correcta sea añadida al Set ?

Código
  1. public Set letrasPalabra(String palabra)
  2. {
  3. Set letras = new HashSet();
  4. for (int i=0;i<palabra.length() ;i++)
  5. {
  6. if(palabra.charAt(i) != ' ')
  7. {
  8. letras.add(palabra.charAt(i));
  9. }
  10. }
  11. return letras;
  12. }

Que deseas que haga actualizaVisible me imagino que si la letra introducida esta contenida en la palabra generada, que se reemplace el asterisco por la letra algo así  ?




Código
  1. package adivinapalabras;
  2.  
  3. public final class Types {
  4.  
  5.    public static final String FACIL[] = {"reir", "hola", "jugo", "papa", "pala", "pasa",
  6.            "para", "alma", "nada", "casa", "mama", "tele",
  7.            "mira", "tela", "bala", "cera", "tira"};
  8.  
  9.    public static final String NORMAL[] = {"apretado", "avestruz", "ceramica",
  10.            "estimulo", "amarillo", "eleccion", "estrecho",
  11.            "invierno", "chatarra", "estrella"};
  12.  
  13.    public  static final String DIFICIL[] = {"indiscutible", "participante", "personalismo",
  14.            "perturbacion", "contundencia", "supervisamos", "buscapleitos",
  15.            "vinculandose"};
  16. }
  17.  
  18.  


Código
  1. package adivinapalabras;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5. import java.security.SecureRandom;
  6. import java.util.HashSet;
  7. import java.util.Iterator;
  8. import java.util.Random;
  9. import java.util.Set;
  10.  
  11. public class AdivinarPalabras {
  12.  
  13.    public static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
  14.    private static Set<String> correctas = new HashSet<>();
  15.    private static final SecureRandom SR = new SecureRandom();
  16.  
  17.    private static String palabraGenerada = "";
  18.  
  19.  
  20.    public String generaPalabra(final int facil) {
  21.        //int n = (int) (Math.random() * 4); no hace falta
  22.        if (facil == 1) {
  23.            return Types.FACIL[SR.nextInt(Types.FACIL.length - 1)];
  24.        } else if (facil == 2) {
  25.            return Types.NORMAL[SR.nextInt(Types.NORMAL.length - 1)];
  26.        }
  27.        return Types.DIFICIL[SR.nextInt(Types.DIFICIL.length - 1)];
  28.    }
  29.  
  30.    public boolean checarLetra(char letra, String palabra) {
  31.        boolean mensaje = false;
  32.        for (int i = 0; i < palabra.length(); i++) {
  33.            if (letra == palabra.charAt(i)) {
  34.                mensaje = true;
  35.                break;
  36.            }
  37.        }
  38.        return mensaje;
  39.    }
  40.  
  41.  
  42.    public Set<String> letrasPalabra(String palabra) {
  43.        //Set letras = new HashSet(); no hace falta
  44.        for (int i = 0; i < palabra.length(); i++) {
  45.            if (palabra.charAt(i) != ' ') {
  46.                correctas.add(String.valueOf(palabra.charAt(i)));
  47.            }
  48.        }
  49.        return correctas;
  50.    }
  51.  
  52.    public String actualizaVisible(Set<String> correctas, String palabra, String visible) {
  53.        visible = "";
  54.        boolean bandera = false;
  55.        Iterator it = correctas.iterator();
  56.        for (int i = 0; i < palabra.length(); i++) {
  57.            while (it.hasNext()) {
  58.                char a = it.next().toString().charAt(0);
  59.                System.out.println("palabra " + a + " " + palabra.trim().charAt(i));
  60.                if (a == palabra.trim().charAt(i)) {
  61.                    visible += a;
  62.                    bandera = true;
  63.                    break;
  64.                }
  65.            }
  66.            if (bandera == false) {
  67.                visible += "_";
  68.            }
  69.            bandera = false;
  70.            it = correctas.iterator();
  71.        }
  72.        return visible;
  73.    }
  74.  
  75.  
  76.    public static void main(String[] args) throws Exception {
  77.  
  78.        System.out.println("Establezca el nivel de dificultad: ");
  79.        System.out.println("Facil(f)");
  80.        System.out.println("Normal(n)");
  81.        System.out.println("Dificil(d)");
  82.        String dificultad = entrada.readLine();
  83.  
  84.  
  85.        switch (dificultad) {
  86.            case "f":
  87.                AdivinarPalabras Operacion = new AdivinarPalabras();
  88.                try {
  89.  
  90.                    palabraGenerada = Operacion.generaPalabra(1);
  91.                    System.out.println("Palabra generada: ****" + palabraGenerada);
  92.                    System.out.println("teclea una letra de la palabra");
  93.                    String letra = entrada.readLine();
  94.                    char l = letra.charAt(0);
  95.  
  96.                    Operacion.checarLetra(l, palabraGenerada);
  97.                     Operacion.letrasPalabra(palabraGenerada);
  98.                    Operacion.actualizaVisible(correctas, letra, letra);
  99.  
  100.                } catch (Exception ex) {
  101.                    ex.printStackTrace(); // usado para ver la pila de error generada
  102.                    System.out.println("No introdujo una letra valida " + ex.getMessage());
  103.                }
  104.            case "n":
  105.        }
  106.    }
  107.  
  108. }
  109.  


« Última modificación: 2 Octubre 2018, 07:42 am por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como se llama este juego y de que consola es?
Juegos y Consolas
mubimeiquer 4 3,070 Último mensaje 16 Noviembre 2008, 23:38 pm
por Burnhack
Juego de palabras C++ (Sencillo)
Programación C/C++
Danyel_Casvill 0 17,657 Último mensaje 23 Abril 2013, 03:17 am
por Danyel_Casvill
Base juego en C (consola)
Programación C/C++
v4char 0 1,182 Último mensaje 18 Noviembre 2015, 22:14 pm
por v4char
Ayuda con juego de adivinar palabras
Programación C/C++
Beginner Web 3 2,505 Último mensaje 18 Junio 2018, 21:49 pm
por Rak_Tortuga
ayuda con recursividad juego de adivinar animales
Java
sheiking 0 2,622 Último mensaje 1 Abril 2019, 18:30 pm
por sheiking
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines