Mostrar mensaje por pantalla 'x' tiempo y borrar

Iniciado por 4PR3ND1Z, 19 Noviembre 2019, 20:17 PM

0 Miembros y 1 Visitante están viendo este tema.

4PR3ND1Z

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 (java) [Seleccionar]

public class JuegoMemoria {
private int[] numeros = new int[10];
private int[] numsUsu = new int[10];
public int cont = 1;
private int nivel;
public int tiempo = 0;

JuegoMemoria() {

}

public void espacioBlanco(int x) {

for(int i = 0; i < x; i++) {
System.out.println();
}
}

public void eleccionNivel() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

do {
System.out.println("Elige el nivel de dificultad:\n1.-Facil\n2.-Medio\n3.-Dificil");
try {
nivel = Integer.parseInt(br.readLine());
} catch(Exception e) {
e.printStackTrace();
}
} while(nivel < 1 && nivel > 3);

switch(nivel) {
case 1:
tiempo = cont * 5000;
break;
case 2:
tiempo = cont * 2500;
break;
case 3:
tiempo = cont * 1500;
break;
}

}

public void generarSerie() {
for(int i = 0; i < 10; i++) {
numeros[i] = (int) (Math.floor(Math.random() * 3 + 1));
numsUsu[i] = 0;
}
}

public void mostrarSerie() {
if(cont > 1) {
cont++;
}

for(int i = 0; i < cont ; i++) {
System.out.print(numeros[i] + " ");
}
}

public void compararSeries() {
int i = 0;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


System.out.println("Repite la serie: ");
while(i != cont) {
try {
numsUsu[i] = Integer.parseInt(br.readLine());
} catch(Exception e) {
e.printStackTrace();
}
if(numeros[i] == numsUsu[i]) {
i++;
} else {
System.out.println("El juego ha finalizado.");
i = cont;
}
}
}
}


Y en esta otra es la que contiene el main.
Código (java) [Seleccionar]

public class JuegoMemoriaPrueba {

public static void main(String[] args) {

JuegoMemoria jm = new JuegoMemoria();
Timer timer = new Timer();

TimerTask task = new TimerTask() {
int contador = 0;

@Override
public void run() {


jm.mostrarSerie();

if(jm.cont > 0) {
jm.espacioBlanco(10);
}

timer.cancel();

contador++;
}
};

System.out.println("\tSERIES NUMERICAS");
System.out.println("\t----------------");
System.out.println("\tPon a prueba tu memoria.\n");
jm.eleccionNivel();
jm.generarSerie();
do {
timer.schedule(task, 0, jm.tiempo);
jm.compararSeries();
} while(jm.cont < 9);

}

}


Gracias por cualquier tipo de ayuda o sugerencia.