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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Mostrar mensaje por pantalla 'x' tiempo y borrar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mostrar mensaje por pantalla 'x' tiempo y borrar  (Leído 1,590 veces)
4PR3ND1Z

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Mostrar mensaje por pantalla 'x' tiempo y borrar
« en: 19 Noviembre 2019, 20:17 pm »

Buenas noches. Tengo que crear un programa/juego de memoria que vaya mostrando una serie numérica de hasta 10 números comprendidos entre el 1 y el 3 a medida que el usuario vaya acertando estos. La serie se muestra un determinado tiempo que variará en función del nivel que haya elegido el usuario y posteriormente deberá desaparecer para pedirle al usuario que repita esa secuencia.

Eso es lo que me está trayendo de cabeza hasta tal punto de estar perdiendo interés por continuar y es que no me gusta dejar programas incompletos o imperfectos.

Bien, al principio traté de hacerlo con un par de bucles for anidados para que me repitiesen el número 'x' veces (en función del nivel) con su respectivo salto de línea. Finalmente daba unos cuantos saltos de línea para "eliminar" cualquier pista de la serie de la consola y pedía al usuario la repetición de esta.

¿Y cuál es el problema? Que descubrí por ahí la librería Timer y ahora no quiero volver atrás. Me llevó tiempo encontrar una solución por mi cuenta pero me está llevando más tiempo finalizar el programa con el Timer.

Por lo que tengo entendido, lo que hace mi objeto Timer a través del método schedule, es repetir una tarea cada 'x' tiempo en ms.

El tema es que yo necesito que el programa siga su curso cuando empleo timer.cancel() y que me compare la serie creada por el ordenador con la que introduce el usuario y esto último no se da, directamente se queda trabado.

Espero haberme explicado con claridad y gracias por vuestro tiempo.

Esta es la clase JuegoMemoria donde creo el objeto.
Código
  1. public class JuegoMemoria {
  2. private int[] numeros = new int[10];
  3. private int[] numsUsu = new int[10];
  4. public int cont = 1;
  5. private int nivel;
  6. public int tiempo = 0;
  7.  
  8. JuegoMemoria() {
  9.  
  10. }
  11.  
  12. public void espacioBlanco(int x) {
  13.  
  14. for(int i = 0; i < x; i++) {
  15. System.out.println();
  16. }
  17. }
  18.  
  19. public void eleccionNivel() {
  20.  
  21. do {
  22. System.out.println("Elige el nivel de dificultad:\n1.-Facil\n2.-Medio\n3.-Dificil");
  23. try {
  24. nivel = Integer.parseInt(br.readLine());
  25. } catch(Exception e) {
  26. e.printStackTrace();
  27. }
  28. } while(nivel < 1 && nivel > 3);
  29.  
  30. switch(nivel) {
  31. case 1:
  32. tiempo = cont * 5000;
  33. break;
  34. case 2:
  35. tiempo = cont * 2500;
  36. break;
  37. case 3:
  38. tiempo = cont * 1500;
  39. break;
  40. }
  41.  
  42. }
  43.  
  44. public void generarSerie() {
  45. for(int i = 0; i < 10; i++) {
  46. numeros[i] = (int) (Math.floor(Math.random() * 3 + 1));
  47. numsUsu[i] = 0;
  48. }
  49. }
  50.  
  51. public void mostrarSerie() {
  52. if(cont > 1) {
  53. cont++;
  54. }
  55.  
  56. for(int i = 0; i < cont ; i++) {
  57. System.out.print(numeros[i] + " ");
  58. }
  59. }
  60.  
  61. public void compararSeries() {
  62. int i = 0;
  63.  
  64.  
  65.  
  66. System.out.println("Repite la serie: ");
  67. while(i != cont) {
  68. try {
  69. numsUsu[i] = Integer.parseInt(br.readLine());
  70. } catch(Exception e) {
  71. e.printStackTrace();
  72. }
  73. if(numeros[i] == numsUsu[i]) {
  74. i++;
  75. } else {
  76. System.out.println("El juego ha finalizado.");
  77. i = cont;
  78. }
  79. }
  80. }
  81. }
  82.  

Y en esta otra es la que contiene el main.
Código
  1. public class JuegoMemoriaPrueba {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. JuegoMemoria jm = new JuegoMemoria();
  6. Timer timer = new Timer();
  7.  
  8. TimerTask task = new TimerTask() {
  9. int contador = 0;
  10.  
  11. @Override
  12. public void run() {
  13.  
  14.  
  15. jm.mostrarSerie();
  16.  
  17. if(jm.cont > 0) {
  18. jm.espacioBlanco(10);
  19. }
  20.  
  21. timer.cancel();
  22.  
  23. contador++;
  24. }
  25. };
  26.  
  27. System.out.println("\tSERIES NUMERICAS");
  28. System.out.println("\t----------------");
  29. System.out.println("\tPon a prueba tu memoria.\n");
  30. jm.eleccionNivel();
  31. jm.generarSerie();
  32. do {
  33. timer.schedule(task, 0, jm.tiempo);
  34. jm.compararSeries();
  35. } while(jm.cont < 9);
  36.  
  37. }
  38.  
  39. }
  40.  

Gracias por cualquier tipo de ayuda o sugerencia.


« Última modificación: 20 Noviembre 2019, 21:02 pm por 4PR3ND1Z » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
mostrar mensaje con el net send al cerrar un programa
Ejercicios
averno1927 0 3,348 Último mensaje 25 Junio 2007, 17:38 pm
por averno1927
Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Bases de Datos
Cioouw 3 11,742 Último mensaje 26 Abril 2010, 16:25 pm
por Cioouw
API para mostrar mensaje en Delphi
Ingeniería Inversa
gastonp 2 4,007 Último mensaje 15 Julio 2010, 15:42 pm
por gastonp
Mostrar mensaje en ventana C++
Programación C/C++
Kaxperday 4 4,705 Último mensaje 3 Noviembre 2015, 10:04 am
por class_OpenGL
Whatsapp borrar mensaje en ambos terminales pasado el tiempo « 1 2 »
Dudas Generales
Talisa 11 7,661 Último mensaje 24 Julio 2021, 15:15 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines