Autor Tema: ejemplo thread.sleep Java cómo limpiar consola pantalla simular movimiento misil  (Leído 20065 veces)

AokiKeith

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Bueno, necesito para un ejemplo del pseudocódigo pseint(lanzamiento de un misil visto por pantalla) a codigo java, pero se me ha dificultado y lo necesito urgente, si me pudiesen ayudar estaría agradecida c:

Este es el ejemplo: http://pseint.sourceforge.net/index.php?page=ejemplos.php&cual=Misil&mode=flexible

Y esto es lo que tengo:


Código: [Seleccionar]
package misil;

import java.io.*;

public class Misil {

public static void main(String args[]) throws IOException, InterruptedException {
String cohete[];
int estado[];
int i;
int j;
                int a;
System.out.println("Presione una tecla para iniciar el lanzamiento!");
System.in.read();
cohete=new String[9];
cohete[0]="   /|\\   ";
cohete[1]="   |B|   ";
cohete[2]="   |O|   ";
cohete[3]="   |M|   ";
cohete[4]="   |B|   ";
cohete[5]="  //|\\\\  ";
cohete[6]=" ******* ";
cohete[7]="* * * * *";
cohete[8]=" * * * * ";
for (i=1;i<=11;i++) {
System.out.println("");
for (j=1;j<=15;j++) {
System.out.println("");
}
for (j=1;j<=6;j++) {
System.out.println(cohete[j-1]);
}
System.out.println("");
                        a = 11-i;
System.out.println("Lanzamiento en "+a);
Thread.sleep(1*1000);
}
for (i=1;i<=15;i++) {
System.out.println("");
for (j=1;j<=15;j++) {
System.out.println("");
}
for (j=1;j<=8;j++) {
System.out.println(cohete[j-1]);
}
if (i>1) {
System.out.println(" * * * * ");
}
Thread.sleep((1/1)*1000);
}
estado=new int[6];
estado[0]=3;
estado[1]=2;
estado[2]=1;
estado[3]=2;
estado[4]=3;
estado[5]=4;
for (i=1;i<=10;i++) {
System.out.println("");
for (j=1;j<=6;j++) {
estado[j-1]=estado[j-1]-1;
switch (estado[j-1]) {
case 0:
cohete[j-1]="    +    ";
break;
case -1: case -5:
cohete[j-1]="   +X+   ";
break;
case -2: case -4:
cohete[j-1]="  +XXX+  ";
break;
case -3:
cohete[j-1]=" +XXXXX+ ";
break;
case -6:
cohete[j-1]="         ";
break;
}
System.out.println(cohete[j-1]);
}
Thread.sleep(2*1000);
}
}


}
« Última modificación: 05 de Diciembre 2014, 12:56 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola, se trata de un programa entretenido pero presenta algunos problemas.

El primer problema, es que necesitas limpiar la consola en la que se muestran resultados, no basta con introducir espacios en blanco porque esto hace muy difícil controlar dónde se muestra el dibujo. System.out.println(""); no sirve como equivalente a limpiar pantalla.

Limpiar la consola depende del entorno de desarrollo que estés utilizando. Yo lo he conseguido en BlueJ con la instrucción System.out.print('\u000C');

En otros entornos puede que funcione algunas de estas opciones:

a) Runtime.getRuntime().exec("cls");

b) System.out.print("\033[H\033[2J");
System.out.flush();

c) Otras opciones (depende del entorno)


Una vez consigas limpiar la consola, para simular el movimiento del cohete hacia arriba tienes que redibujarlo partiendo de una línea inferior y en cada redibujado pintarlo en una línea más arriba. Eso hay que controlarlo con una instrucción de este tipo: for (j=1;j<=15-i;j++) , ahí se introduce -1 para que en cada redibujado se dibuje un poco más arriba (el pseudocódigo parece que no contempla esto).

Con estas ideas e introduciendo pequeños cambios que puedes variar a tu gusto, he logrado que se muestre la cuenta atrás, el cohete despegue, explote y caiga (en BlueJ, para otros entornos habría que probarlo viendo cómo se puede limpiar la consola en ese entorno).

El código que me ha funcionado es este:

Código: [Seleccionar]
import java.io.*;

public class Misil {

    public static void main(String args[]) throws IOException, InterruptedException {
        String cohete[];
        int estado[];
        int i;
        int j;
        int k;
        int a;
        String humo = " * * * * *";

        System.out.print("Presione una tecla para iniciar el lanzamiento...");
        System.in.read();
        cohete=new String[9];
        cohete[0]="   /|\\   ";
        cohete[1]="   |B|   ";
        cohete[2]="   |O|   ";
        cohete[3]="   |M|   ";
        cohete[4]="   |B|   ";
        cohete[5]="  //|\\\\  ";
        cohete[6]=" ******* ";
        cohete[7]="* * * * *";
        cohete[8]=" * * * * ";
        for (i=1;i<=4;i++) {
            System.out.print('\u000C');
            for (j=1;j<=15;j++) {
                System.out.println("");
            }
            for (j=1;j<=6;j++) {
                System.out.println(cohete[j-1]);
            }
            System.out.println("");
            a = 4-i;
            System.out.println("Lanzamiento en "+a);
            Thread.sleep(1*1000);
        }

        for (i=1;i<=10;i++) {
            System.out.print('\u000C');
            for (j=1;j<=15-i;j++) {
                System.out.println("");
            }
            for (j=1;j<=8;j++) {
                System.out.println(cohete[j-1]);
            }
            if (i>1) {
                for (k=0; k<i; k++) {
                    System.out.println(" * * * * ");
                }
            }
            Thread.sleep((1/1)*1000);
        }

        estado=new int[6];
        estado[0]=3;
        estado[1]=2;
        estado[2]=1;
        estado[3]=2;
        estado[4]=3;
        estado[5]=4;
        for (i=1;i<=10;i++) {
            System.out.print('\u000C');
            for (j=1;j<=5+i;j++) {
                System.out.println("");
            }
            for (j=1;j<=6;j++) {
                estado[j-1]=estado[j-1]-1;
                switch (estado[j-1]) {
                    case 0:
                    cohete[j-1]="    +    ";
                    break;
                    case -1: case -5:
                    cohete[j-1]="   +X+   ";
                    break;
                    case -2: case -4:
                    cohete[j-1]="  +XXX+  ";
                    break;
                    case -3:
                    cohete[j-1]=" +XXXXX+ ";
                    break;
                    case -6:
                    cohete[j-1]="         ";
                    break;
                }
                System.out.println(cohete[j-1]);
            }
            Thread.sleep(1*800);
        }

    } //Cierre main

}


Pruébalo y dime si consigues hacerlo funcionar!!!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".