Buscar este blog

domingo, 31 de marzo de 2013

Tetrix Clase Principal

Clase Principal del juego Gytetrix

A continuacion presento el codigo de la clase princiapal del juego gytetrix, es el alma del juego, donde se comunican todas las clases del tetrix y es la mas compleja y una de las mas extensas se utilizan varios tiempos y muchos vectores, disculpen el nombre de las variables son un poco desorganizadas.

package principaltetrix;

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.Timer;



public class Principaltetrix {

    public static void main(String[] args) {
        
        
        
            int a, k,max=6,min=1,fe,u,t,time=10000;
            
            String e;
            
            int [] fiche=new int [63];
            int vec[]=new int[63];
            int vec2[]=new int[63];
            int []mat =new int[63];
            int []res =new int[63];
            int []vec1 =new int[63];
            for(int fr=0;fr<63;fr++){
                mat[fr]=0;
                vec[fr]=0;
                vec1[fr]=0;
               
            }
             
           Fichas mificha=new Fichas();
           Aleatorio mialeatorio =new Aleatorio();
           Desplazar midesplazar=new Desplazar();
           Pantalla mipan =new Pantalla();
           
           Bajar mibajar=new Bajar();
           Parar miparar=new Parar ();
           Espacio miespacio=new Espacio ();
           Rotar mirotar =new Rotar();
           Action miaction =new Action();
           //mipan.main();
           mipan.setVisible(true);
          
            try {
            {
                
            Thread.currentThread().sleep(5000);
            }
           
           Thread.currentThread().sleep(0);
              }
           catch (InterruptedException ex) {
          Logger.getLogger(Principaltetrix.class.getName()).log(Level.SEVERE, null, ex);
           }
          
        
          
          int ge=0;
     for( u=0;u<30;u++){
       
        if(u<50){
          a=mialeatorio.ale();
      
           if(a==1){
           int []b =mificha.cuadro();
           
            for(int i=0;i<63;i++){
                  
            fiche[i]=b[i];
           
                }
            ge=ge+1;
           }
           if(a==2){
           int []b =mificha.line();
           
            for(int i=0;i<63;i++){
                  
            fiche[i]=b[i];
           
                }
            ge=ge+1;
           }
           if(a==3){
           int []b =mificha.piramide();
           
            for(int i=0;i<63;i++){
                  
            fiche[i]=b[i];
          
                }
            ge=ge+1;
           }
           if(a==4){
           int []b =mificha.ele();
           
            for(int i=0;i<63;i++){
                  
            fiche[i]=b[i];
          
                }
            ge=ge+1;
           }
           mipan.PUNTUACION(ge);
           
      try {
            {
                mat=miespacio.espace(vec);
                for(int i=0;i<63;i++){
                    if(vec1[i]==1 && mat[i]==1){
                    vec1[i]=1;
                    }
                    if(vec1[i]==0 && mat[i]==1){
                    vec1[i]=vec1[i]+mat[i];
                    }
                }
                u=miparar.seguirficha(vec1);
         if(u>0){
             u=55;
            mipan.aviso();
            
         }
                if(u<35){
               int seg=0,op=0,yt=0,lo=0,r=0,kf=0,d;
            for(int s=0;s<20;s++){
                
                seg=seg+1;
                if(seg==1){
                  d=0; 
                }
                else{
             d = mipan.ivan();
                }
              
               mipan.color(fiche,a);
              
                  
              if(d==3){
                   if(op==1){
                       yt=op+2;
                    }
                   if(op==2){
                       yt=op;
                    }
                  
                    if(op==3){
                       yt=1;
                    }
                     if(op==0){
                       yt=0;
                   }
                     
                   op=5;
                  
                  if(yt==4){
                       yt=0;
                   }
                   if(a==4){
                      res=mirotar.ele(res,yt);
                 }
                   yt=yt+1;
                 if(a==2){
                     if(lo==2){
                         lo=0;
                     }
                     
                       res=mirotar.rotarline(res,lo);
                       lo=lo+1;
                 }
                 
                 
                 if(kf==1){
                       r=kf+2;
                   }
                   if(kf==2){
                       r=kf;
                   }
                   if(kf==3){
                       r=1;
                   }
                     if(kf==0){
                       r=0;
                   }
                     
                   kf=5;
                 if(r==4){
                   r=0;
                     }
                 if(a==3){
                     
                    res=mirotar.pira(res,r);
                    r=r+1;
                 }
                 
                  
                    if(a==1){
                       res=mibajar.baja(fiche);
                 }
                  
              
              }
              
               if(d==4){
                   
                   if(yt==1){
                       op=yt+2;
                   }
                   if(yt==2){
                       op=yt;
                   }
                  if(yt==3){
                       op=1;
                   }
                  if(yt==0){
                       op=0;
                   }
                   yt=5;
                   if(op==4){
                       op=0;
                   }
                    if(a==4){
                      res=mirotar.ele1(res,op);
                    }
                    op=op+1;
                    
                    if(a==2){
                     if(lo==2){
                         lo=0;
                     }
                     
                   res=mirotar.rotarline(res,lo);
                   lo=lo+1;
                 }
                    if(r==4){
                         r=0;
                     }
                    if(r==1){
                       kf=r+2;
                   }
                   if(r==2){
                       kf=r;
                   }
                  if(r==3){
                       kf=1;
                   }
                     if(r==0){
                       kf=0;
                   }
                     
                   r=5;
                    if(kf==4){
                         kf=0;
                     }
                    if(a==3){
                     
                    res=mirotar.pira1(res,kf);  
                    kf=kf+1;
                 }
                   
                 if(a==1){
                       res=mibajar.baja(fiche);
                 }
                  
              
                  }
              
               
               
              if(d==2){
                res=midesplazar.izquierda(fiche);
               }
              if(d==1){
                res=midesplazar.derecha(fiche);
               }
              if(d==0){
                 res=mibajar.baja(fiche);
               }
              
             
            
               vec2=vec1;
             
             
              
              int sa;
             
               int se=miespacio.seguir(fiche,vec1);
              
              if(se==1){
              
                s=50; 
                  
              }
             if(se==0){
               fe=miparar.stop(fiche);
              
                if(fe==0){
                  
               for(int i=0;i<63;i++){
                  fiche[i]=res[i];
                  vec[i]=fiche[i];
                 
                  mipan.color(fiche,a);
                  Thread.currentThread().sleep(15);
                  mipan.vaciar(fiche,0);
                  
                     }
                  }
               
               if(fe==1){
                   for(int i=0;i<63;i++){
                
                  vec[i]=fiche[i];
                   
                 mipan.color(fiche,a);
                 Thread.currentThread().sleep(1);
                 mipan.vaciar(fiche,1);
             
                   }
                  }
                
                }
            }
            }
       }
           
           Thread.currentThread().sleep(10);
    }
      
          catch (InterruptedException ex) {
          Logger.getLogger(Principaltetrix.class.getName()).log(Level.SEVERE, null, ex);
           }
     } 
    }  
     
  }
    
}
 

sábado, 30 de marzo de 2013

Dominz asi va el proyecto...

Con la implementacion del mousedregged ya puedo mover las fichas de domino en un jframe de dimensiones 1300x699 es una ventana totalmente hecha a codigo sin utilizar el formulario JFrame y donde ya se encuentran ubicados los diferentes botones que componen un domino y donde yo selecciono una ficha y la muevo con el click sostenido hacia cualquier parte de mi JFrame aqui muestro una imagen donde ya he movido varias fichas con el mouse.

mouseDragged

En el dia de hoy, quiero compartir este codigo el cual permite mover un boton en una ventana manteniendo el click presionado y dirigiendo el boton hacia donde queremos, este truco lo necesito para mi proyecto dominz, donde se implementara cuando el jugador desee colocar fichas en la zona de juego seleccionandola y arrastrandola con el mouse, a continuacion el codigo. No olvidar que nuestra clase debe implementar la interfaz MouseMotionListener.

clase principal(main)


package moverobjeto;


public class MoverObjeto {

   
    public static void main(String[] args) {
       
       juego mijuego=new juego();
mijuego.ventana();
       
    }
}

clase de la ventana:


public class juego implements MouseMotionListener {
   
    public void ventana(){
     JFrame miventana =new JFrame ();

     JButton miboton=new JButton();

        miventana.setSize(400, 400);
        miventana.setLocationRelativeTo(null);
        miventana.setLayout(null);
        miventana.setResizable(false);
        miboton.setBounds(50, 50, 60, 80);
        miboton.addMouseMotionListener(this);
        miventana.add(miboton);
        miventana.setVisible(true);
    }

    @Override
    public void mouseDragged(MouseEvent e) {
      int x=e.getX();
        int y=e.getY();
        miboton.setLocation(x, y);
        miboton.repaint(x, y,miboton.getWidth(), miboton.getHeight());
       
    }

    @Override
    public void mouseMoved(MouseEvent e) {
     
    }

 
}


jueves, 28 de marzo de 2013

Gytetrix código fuente

Luego de presentar el proyecto  en clase se subirá el archivo del código fuente para estar a disposición de ustedes.

GYTetrix

Tetrix finalizado!!!!!

El proyecto tetrix ya hoy culmina, se adicionaron las rotaciones de las fichas hacia ambos lados, hacia el lado izquierdo y el lado derecho, ya se puede jugar en el con toda seguridad de estar jugando un tetrix de los que comúnmente solemos jugar, el tetrix Gytetrix cuenta con 4 opciones de ficha ; el cuadrado, la ele, la pirámide y la linea, cuenta con los movimientos de desplazamiento hacia la izquierda y hacia la derecha, permite hacer rotación de las figuras excepto el cuadrado, ya que este no necesita de dicha rotación  el programa brinda una puntacion, esta esta dada por el total de fichas en juego, entre mas fichas se acumulen en la zona de juego mas puntuación se tendrá  igualmente en un jlabel aparece un mensaje de "GAME OVER" si las fichas llegan hasta el borde superior de la zona de juego, y en la parte izquierda se encuentran los botones accionados por el mouse, se trato de implementar una interfaz gráfica hecha a mano pero se tienen inconvenientes a la hora de capturar algún valor que propicie un evento generado ya que no se tiene el conocimiento de como atraparlo y ademas las fuentes como la Internet no brindan las suficientes herramientas para aclarar las dudas.
se implementaron en el programa:

-9 clases:

      - clase principal
      - clase pantalla
      - clase rotar
      - clase desplazar(izq-der)
      - clase bajar
      - clase fichas
     - clase aleatorio
     - clase espacio disponible
     - clase parar

Lo mas complicado del programa fue el momento en que las fichas quedaran una encima de la otra, me gasto varias horas intentar solucionar el problema pero al fin se logro con la clase espacio disponible  la cual recibía como argumento un contador de fichas que iban quedando en la ventana en forma de vector, y hacia una comparación con otro vector pasado como argumento para determinar si este ya estaba dentro de la otra matriz, si era así  el movimiento se paraba y quedaban registradas sus posiciones para otra nueva ficha que entraba a la zona de juego.


nueva interfaz grafica del tetrix

Interfaz gráfica del tetrix sin utilizar el formulario JFrame




miércoles, 27 de marzo de 2013

Clase para bajar y desplazar fichas de tetrix


Esta clase utilizada dentro del juego tetrix permite, dar el movimiento a las fichas, ya sea hacia la izquierda, la derecha o simplemente hacia abajo, esta clase tiene 3 métodos  donde cada método realiza una función especifica y que cada uno es llamado de la clase principal cuando es necesaria su ayuda en el programa, todos los métodos reciben un vector como parámetro y devuelven un nuevo vector a la clase principal, este nuevo vector contiene las coordenadas o posiciones ya definidas con el movimiento correspondiente de la ficha y que se graficaran en la clase pantalla.

package principaltetrix;

public class Bajar {


    int vec[]=new int[56];
    int k;

   
    public int []baja(int[]vec1){
     
   
        for(int i=0;i<56;i++){
            if(vec1[i]==1){
                     k=i+7;
                     if(k<56){
                      vec[k]=vec1[i];
                     }
               }
        }
       
          return vec;
    }
   


public class Desplazar {
   
    public int []derecha(int[]vec1){
     
     
        for(int i=0;i<56;i++){
            if(vec1[i]==1){
                     k=i+1;
                     if(k<56){
                      vec[k]=vec1[i];
                     }    
               }
          }
       
          return vec;
    }

     public int []izquierda(int[]vec1){

   
        for(int i=0;i<56;i++){
            if(vec1[i]==1){
                     k=i-1;
                     if(k>=0){
                      vec[k]=vec1[i];
                     }
               }
         }
       
          return vec;
    }
   
   
   
}