Foros del Web » Programación para mayores de 30 ;) » Java »

¿Como introducir piezas? Juego "básico" en Java

Estas en el tema de ¿Como introducir piezas? Juego "básico" en Java en el foro de Java en Foros del Web. Buenas tardes a todos, este es mi primer mensaje en el foro Y querría pedir un poco de ayuda u orientación porque llevo varios días ...
  #1 (permalink)  
Antiguo 15/12/2014, 12:58
 
Fecha de Ingreso: octubre-2014
Mensajes: 1
Antigüedad: 9 años, 5 meses
Puntos: 0
Pregunta ¿Como introducir piezas? Juego "básico" en Java

Buenas tardes a todos, este es mi primer mensaje en el foro
Y querría pedir un poco de ayuda u orientación porque llevo varios días bloqueado con un asunto.
Les cuento, tengo que hacer un tetris básico a base de carácteres.

El objetivo del trabajo es crear un programa que implemente el conocido
juego del Tetris. El juego está formado por un tablero de 8x8 casillas, en el cual
se van posicionando piezas. Todas las piezas caben dentro de un cuadrado
3x3. La representación de las diferentes piezas dependerá de si el símbolo a
dibujar es un espacio en blanco o un *. Son 6 piezas las tipicas del tetris excluyendo al cuadrado.
Si todas las casillas de alguna de las filas del tablero están ocupadas, ésta se
vaciaría y las casillas posicionadas por encima de esa fila, pasarán a ocupar la
fila inferior.
Una vez que no haya huecos libres en el tablero para posicionar una nueva
pieza, el juego se da por finalizado. Se considerará que no hay un hueco libre,
si la pieza no cabe en su totalidad dentro del tablero.

laa parte básica tendrá que simular una partida de Tetris en la cual se van a
posicionar x (el valor será introducido como argumento al lanzar la aplicación)
piezas. Las x piezas serán elegidas de manera aleatoria. Las piezas se
deberán ir posicionando de izquierda a derecha en la fila más baja del tablero
que contenga espacio suficiente para que esa pieza quepa. Por pantalla se irá
mostrando el estado del tablero de la siguiente manera:
1. Estado del tablero (al inicio estará vacío),
2. número de piezas que se han colocado,
3. el mensaje “Pulse Enter”, que permitirá dejar la ejecución de la
simulación en espera, hasta que el usuario pulse la tecla ‘Enter’.
4. Una vez pulsada una tecla, se mostrar á la nueva pieza seleccionada a
colocar en el tablero y se volverá a repetir todo el proceso.
El juego finalizará cuando no haya más piezas para posicionar o no quepan
en el tablero.

El problema es que no entiendo como meter la pieza en el tablero y no sé me ocurre absolutamente nada, mi conocimiento es bastante básico de java y el profesor que tengo no sabe explicar.

Esto es lo que de momento tengo hecho:
Clase Partida:
Código Java:
Ver original
  1. import java.util.Scanner;
  2.  
  3. public class Partida extends Tablero{
  4.  
  5. //Método para introducir "enter"
  6.    
  7. public String funcionEnter(){
  8.     String enter = "";
  9.     Scanner leeCadena = new Scanner (System.in);
  10.     String tecla = "";
  11.     System.out.println("<Pulse enter>");
  12.     enter = leeCadena.nextLine();
  13.     return enter;
  14. }
  15.    
  16. public static void main(String[] args) {
  17.         int c=0;
  18.         String tecla="";
  19.        
  20.         do{
  21.         //Pieza elegida
  22.         Piezas p_elegida = new Piezas();
  23.         p_elegida.asignarPiezas();
  24.        
  25.         //Tablero
  26.         Tablero obj_tablero = new Tablero();
  27.         obj_tablero.creacionTablero();
  28.        
  29.  
  30.        
  31.         //Contador de piezas
  32.         System.out.println("Piezas = " +c);
  33.         c++;
  34.        
  35.         //Tecla enter
  36.         Partida enter = new Partida();
  37.         tecla = enter.funcionEnter();
  38.        
  39.         }while(tecla != "\n");
  40.     }
  41.  
  42. }

Clase Tablero:
Código Java:
Ver original
  1. import java.util.Scanner;
  2.  
  3. public class Tablero extends Casillas{
  4.     Tablero() {}
  5.     private int i;
  6.     private char matrizTablero [];
  7.  
  8. //método que imprime el tablero vacío
  9. public void creacionTablero(){
  10.     this.matrizTablero= new char[8];
  11.     this.i=0;
  12.     int filas=0;
  13.     Casillas obj_casilla = new Casillas();
  14.     obj_casilla.setCasilla('-');
  15.    
  16.     for(filas=0;filas<8;filas++){
  17.         for(i=0;i<matrizTablero.length;i++){
  18.             matrizTablero[i]=obj_casilla.getCasilla();
  19.             System.out.print(matrizTablero[i]+" ");
  20.         }
  21.         System.out.println();
  22.     }
  23.        
  24.     }
  25. }

Clase Piezas:
Código Java:
Ver original
  1. public class Piezas {
  2.    
  3. public Piezas() {}
  4. //atributos
  5. private int i;
  6. private int j;
  7. private char m1[][];
  8. private char m2[][];
  9. private char m3[][];
  10. private char m4[][];
  11. private char m5[][];
  12. private char m6[][];
  13.  
  14. //métodos
  15. public void pieza1(){
  16.     this.i=0;
  17.     this.j=0;
  18.     this.m1 = new char [3][3];
  19.    
  20.     for(i=0;i<m1.length;i++){
  21.         for(j=0;j<m1.length;j++){
  22.             if(i<3 && j==0){
  23.                 m1[i][j]='*';
  24.             }
  25.             else{
  26.                 m1[i][j]=' ';
  27.             }
  28.             System.out.print(m1[i][j]+" ");
  29.         }
  30.         System.out.println();
  31.     }
  32. }
  33.  
  34. public void pieza2(){
  35.     this.i=0;
  36.     this.j=0;
  37.     this.m2 = new char [3][3];
  38.    
  39.     for(i=0;i<m2.length;i++){
  40.         for(j=0;j<m2.length;j++){
  41.             if((i==1 && j==0)||(i==2 && j<3)){
  42.                 m2[i][j]='*';
  43.             }
  44.             else{
  45.                 m2[i][j]=' ';
  46.             }
  47.             System.out.print(m2[i][j]+" ");
  48.         }
  49.         System.out.println();
  50.     }
  51. }
  52.  
  53. public void pieza3(){
  54.     this.i=0;
  55.     this.j=0;
  56.     this.m3 = new char [3][3];
  57.    
  58.     for(i=0;i<m3.length;i++){
  59.         for(j=0;j<m3.length;j++){
  60.                     if((i==1 && j==2)||(i==2 && j<3)){
  61.                         m3[i][j]='*';
  62.                     }
  63.                     else{
  64.                         m3[i][j]=' ';
  65.                     }
  66.                     System.out.print(m3[i][j]+" ");
  67.                 }
  68.                 System.out.println();
  69.     }
  70. }
  71.  
  72. public void pieza4(){
  73.     this.i=0;
  74.     this.j=0;
  75.     this.m4 = new char [3][3];
  76.    
  77.     for(i=0;i<m4.length;i++){
  78.         for(j=0;j<m4.length;j++){
  79.             if((i==1 && j==1)||(i==2 && j<3)){
  80.                 m4[i][j]='*';
  81.             }
  82.             else{
  83.                 m4[i][j]=' ';
  84.             }
  85.             System.out.print(m4[i][j]+" ");
  86.         }
  87.         System.out.println();
  88.     }
  89. }
  90.  
  91. public void pieza5(){
  92.     this.i=0;
  93.     this.j=0;
  94.     this.m5 = new char [3][3];
  95.    
  96.     for(i=0;i<m5.length;i++){
  97.         for(j=0;j<m5.length;j++){
  98.             if((i==1 && j>0)||(i==2 && j<2)){
  99.                 m5[i][j]='*';
  100.             }
  101.             else{
  102.                 m5[i][j]=' ';
  103.             }
  104.             System.out.print(m5[i][j]+" ");
  105.         }
  106.         System.out.println();
  107.     }
  108. }
  109.  
  110. public void pieza6(){
  111.     this.i=0;
  112.     this.j=0;
  113.     this.m6 = new char [3][3];
  114.    
  115.     for(i=0;i<m6.length;i++){
  116.         for(j=0;j<m6.length;j++){
  117.             if((i==1 && j<2)||(i==2 && j>0)){
  118.                 m6[i][j]='*';
  119.             }
  120.             else{
  121.                 m6[i][j]=' ';
  122.             }
  123.             System.out.print(m6[i][j]+" ");
  124.         }
  125.         System.out.println();
  126.     }
  127.  
  128. }
  129.  
  130. public void asignarPiezas() {
  131.     int n = 0;
  132.     n = (int) Math.floor(Math.random()*6+1);
  133.    
  134.     //System.out.println(n);
  135.    
  136.     switch(n){
  137.     case 1:
  138.         Piezas p1 = new Piezas();
  139.         p1.pieza1();
  140.         break;
  141.     case 2:
  142.         Piezas p2 = new Piezas();
  143.         p2.pieza2();
  144.         break;
  145.     case 3:
  146.         Piezas p3 = new Piezas();
  147.         p3.pieza3();
  148.         break;
  149.     case 4:
  150.         Piezas p4 = new Piezas();
  151.         p4.pieza4();
  152.         break;
  153.     case 5:
  154.         Piezas p5 = new Piezas();
  155.         p5.pieza5();
  156.         break;
  157.     case 6:
  158.         Piezas p6 = new Piezas();
  159.         p6.pieza6();
  160.         break;
  161.     }
  162.    
  163. }
  164. }
  165.  
  166. /*
  167. public static void main(String[] args) {
  168.     Piezas p_elegida = new Piezas();
  169.     p_elegida.asignarPiezas();
  170. }
  171. }
  172. */
Clase Casillas:
Código Java:
Ver original
  1. public class Casillas {
  2.  
  3. private char casilla;
  4.  
  5. Casillas(){
  6. }
  7.  
  8. public char getCasilla() {
  9.     return casilla;
  10. }
  11.  
  12. public void setCasilla(char casilla){
  13.     this.casilla=casilla;
  14. }
  15.  
  16.  
  17.  
  18. }

¿Me podrían echar una mano?

Un saludo
  #2 (permalink)  
Antiguo 17/12/2014, 11:36
 
Fecha de Ingreso: diciembre-2014
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: ¿Como introducir piezas? Juego "básico" en Java

if (estudias) println sabes hacerlo else eres tonto
  #3 (permalink)  
Antiguo 17/12/2014, 23:29
Avatar de floppy-dj  
Fecha de Ingreso: diciembre-2006
Ubicación: Huelva
Mensajes: 25
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: ¿Como introducir piezas? Juego "básico" en Java

No se si he entendido muy bien los requisitos del programa, pero para hacer un tetris, yo lo que haría seria crear un tablero haciendo un array bidimensional de 8x8, cada pieza para mí seria un array bidimensional de 3x3.
una vez que una pieza entra al tablero, va pintando hasta que encuentre que no puede bajar mas (se comprueba si la pieza se ha quedado entera dentro), y empezaría a entrar la otra pieza, una vez que la pieza se queda colocada se comprueba si se queda alguna linea horizontal completa para eliminarla y si es así, mueves todos los caracteres hacia abajo (machacando esa linea completada con la superior).


yo empezaría con algo como esto:


Tablero
Código:
public class Tablero {

    private int i;
    private int j;
    private char matrizTablero[][];
    private int x = 8, y = 8;//Tamaño del tablero

//método que imprime el tablero vacío
    public void creacionTablero() {
        this.matrizTablero = new char[x][y];
        this.i = 0;
        this.j = 0;

        for (i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                this.matrizTablero[i][j] = '-';
            }
        }
    }

    public void mostrartablero() {
        for (int k = 0; k < 20; k++) {/////////////////ESTE BUCLE ES PARA QUE DE LA SENSACION////////////////////
            System.out.println("");   ////////////////////DE QUE SE HA MOVIDO LA PIEZA///////////////////////////
        }                             ////REALMENTE PINTA 20 RENGLONES EN BLANCO Y VUELVE A PINTAR EL TABLERO////

        for (i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                System.out.print(this.matrizTablero[i][j]);
            }
            System.out.println("");
        }
    }

    public void meterpieza(Pieza pieza) {
        //aqui tienes que pensar como hacerlo
    }
}

Pieza
Código:
public class Pieza {

    private int i;
    private int j;
    private char m[][];

    public Pieza asignarPieza() {
        int n = 0;
        n = (int) Math.floor(Math.random() * 6 + 1);
        this.i = 0;
        this.j = 0;
        this.m = new char[3][3];
        //System.out.println(n);
        switch (n) {
            case 1:
                for (i = 0; i < m.length; i++) {
                    for (j = 0; j < m.length; j++) {
                        if (i < 3 && j == 0) {
                            m[i][j] = '*';
                        } else {
                            m[i][j] = ' ';
                        }
                    }
                }
                break;
            case 2:
                for (i = 0; i < m.length; i++) {
                    for (j = 0; j < m.length; j++) {
                        if ((i == 1 && j == 0) || (i == 2 && j < 3)) {
                            m[i][j] = '*';
                        } else {
                            m[i][j] = ' ';
                        }
                    }
                }
                break;
            case 3:
                //rellena con tu codigo
            case 4:
                //rellena con tu codigo
            case 5:
                //rellena con tu codigo
            case 6:
                //rellena con tu codigo
        }

        return this;

    }
}

Partida
Código:
public class Partida{
    
    public static void main(String[] args) {
        Tablero t = new Tablero();
        t.creacionTablero();
        t.mostrartablero();
        funcionEnter();
        
        Pieza pieza;
        
        do {
            pieza=new Pieza();
            pieza.asignarPieza();
            t.meterpieza(pieza);
            t.mostrartablero();
        } while (funcionEnter());

    }

    private static boolean funcionEnter() {
        Scanner leeCadena = new Scanner(System.in);
        System.out.println("<Pulse enter>");
        leeCadena.nextLine();
        return true;
    }

}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:44.