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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Java / 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.
2  Programación / Programación C/C++ / Problemas para rellenar la matriz en: 28 Febrero 2019, 09:42 am
Buenos días. El problema me surge a la hora de rellenar la matriz puesto que me pide dos veces que ingrese los datos. Os adjunto el ejercicio entero por si alguien quisiera echarle una ojeada.

Citar
/* 15. Desarrollar una función que determine si una matriz es simétrica o no.

Una matriz es simétrica: A = A^t

- La matriz debe ser cuadrada.
- Aij = Aji

|2   5   9|                       |2   5   9|
|5   8   -1|          ->          |5   8   -1|
|9   -1   10|                     |9   -1   10|

*/

#include <iostream>
#include <stdlib.h>

using namespace std;

void pedirDatos();
void matrizCuadrada(int, int);
void rellenarMatriz(int m[][10], int, int);
void mostrarMatriz(int m[][10], int, int);
void matrizSimetrica(int m[][10], int, int);

int m[10][10], nFil, nCol;

int main(){
   
   pedirDatos();
   matrizCuadrada(nFil, nCol);
   cout<<"\n";
   rellenarMatriz(m, nFil, nCol);
   mostrarMatriz(m, nFil, nCol);
   matrizSimetrica(m, nFil, nCol);
   cout<<"\n\n";
   
   system("pause");
   return 0;
}

void pedirDatos(){
   
   cout<<"Introduce el numero de filas de la matriz: ";
   cin>>nFil;
   cout<<"\nIntroduce el numero de columnas de la matriz: ";
   cin>>nCol;
}

void matrizCuadrada(int nFil, int nCol){
   
   if(nFil != nCol){
      cout<<"\nLa matriz debe ser cuadrada (ej. 4x4)";
      cout<<"\n\n";
      pedirDatos();
   }
   else rellenarMatriz(m, nFil, nCol);
}

void rellenarMatriz(int m[][10], int nFil, int nCol){
   
   for(int i=0; i<nFil; i++){
      for(int j=0; j<nCol; j++){
         cout<<"Introduce un numero para |"<<i<<"| |"<<j<<"|: ";
         cin>>m[j];
      }
   }
}

void mostrarMatriz(int m[][10], int nFil, int nCol){
   
   cout<<"\n\nLa matriz queda compuesta de la siguiente manera: ";
   for(int i=0; i<nFil; i++){
      cout<<"\n";
      for(int j=0; j<nCol; j++){
         cout<<"|"<<m[j]<<"|";
      }
   }
}

void matrizSimetrica(int m[][10], int nFil, int nCol){
   int cont = 0;
   
   for(int i=0; i<nFil; i++){
      for(int j=0; j<nCol; j++){
         if(m[j] == m[j]){
            cont++;
         }
      }
   }
   
   if(cont == (nFil * nCol)){
      cout<<"\nLa matriz es simetrica.";
   }
   else{
      cout<<"\nLa matriz no es simetrica.";
   }
}

Gracias por tu tiempo.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines