Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/01/2011, 18:24
Phil3911
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Duda basica Vectores

Pues estoy tratando de almacenar arrays de una dimension en un vector, en los cuales alamaceno las coordenadas (x,y) de donde deberia dibujarse cada cuadro para formar una figura (trato de crear un juego de la serpiente basico), en J2ME para celulares, tengo el siguiente codigo:

Código:
canvas=new Canvas(){

            protected void paint(Graphics g){
                ancho=getWidth();
                alto=getHeight();
                Hcuadros=(ancho-(ancho/5+1))/5;
                Vcuadros=(alto-(alto/5+1))/5;
                System.out.println("Cuadros H:"+Hcuadros+"\nCuadros V:"+Vcuadros+"\nancho="+ancho);
                Array_paredes=new boolean[Hcuadros][Vcuadros];

                System.out.println("Capacidad del vector: "+Vector_snake.capacity());
                
                //pintamos la pantalla
                g.setColor(255, 255, 255);
                g.fillRect(0, 0, ancho, alto);
                g.setColor(0,0,0);
                int InicioX=(ancho-(Hcuadros+1+Hcuadros*5))/2;
                int InicioY=(alto-(Vcuadros+1+Vcuadros*5))/2;
                int a=InicioX,b=InicioY,x,y;

                if(Vector_snake.isEmpty()){
                  //System.out.println("Pinta 1a vez");
                    for(x=0;x<5;x++){
                        int[] Array={Hcuadros/2-x,Vcuadros/2};
                        Vector_snake.addElement(Array);
                    }
                }
                    
                for(y=0;y<Vcuadros;y++){                   
                    for(x=0;x<Hcuadros;x++){
                        if((y==0)||(y==(Vcuadros-1))){
                            g.fillRect(a,b,5,5);
                        }
                        else if((x==0)||(x==(Hcuadros-1))){
                            g.fillRect(a,b,5,5);
                        }
                        a+=6;
                    }
                    b+=6;
                    a=InicioX;
                }

                System.out.println("----------Al repintar------------");
                for(x=0;x<5;x++){
                    int s[]=(int[])Vector_snake.elementAt(x); 
                    g.fillRect(s[0]*6+InicioX,s[1]*6+InicioY,5,5);
                    System.out.println("ElementAt: "+x+" [0]= "+s[0]);
                    System.out.println("ElementAt: "+x+" [1]= "+s[1]);
                }
            }

            protected void keyPressed(int keyCode){
                int arriba=getKeyCode(UP);
                int abajo=getKeyCode(DOWN);
                int izquierda=getKeyCode(LEFT);
                int derecha=getKeyCode(RIGHT);

                if(keyCode==arriba){
                    
                    System.out.println("----------Al dar click------------");
                        for(int x=4;x>0;x--){
                             int z[]=(int[])Vector_snake.elementAt(x-1);
                             Vector_snake.removeElementAt(x);
                             Vector_snake.insertElementAt(z, x);
                             int s[]=(int[])Vector_snake.elementAt(x);
                                System.out.println("ElementAt: "+x+" [0]= "+s[0]);
                                System.out.println("ElementAt: "+x+" [1]= "+s[1]);
                     
                        }
                    int temp[]=(int[])Vector_snake.elementAt(0);
                    temp[1]=temp[1]-1;
                    Vector_snake.removeElementAt(0);
                    Vector_snake.insertElementAt(temp, 0);
                    System.out.println("ElementAt: "+0+" [0]= "+temp[0]);
                    System.out.println("ElementAt: "+0+" [1]= "+temp[1]);
                                         
                    repaint();
                }

            }
        };
al iniciar me dibuja bien la la serpiente donde deberia, pero al hacer click para que se mueva un cuadro hacia arriba, mi logica es que las posiciones de cada cuadro que forma la serpiente se recorran en los arrays almacenados en el vector, asi la posicion 4 del vector tendra las coordenadas anteriores del vector 3, etc, pero al redibujarla pantalla con repaint() parece como si me modificar el contenido de los arrays sin razon aparente.

----------Al dar click------------
ElementAt: 4 [0]= 16
ElementAt: 4 [1]= 24
ElementAt: 3 [0]= 17
ElementAt: 3 [1]= 24
ElementAt: 2 [0]= 18
ElementAt: 2 [1]= 24
ElementAt: 1 [0]= 19
ElementAt: 1 [1]= 24
ElementAt: 0 [0]= 19
ElementAt: 0 [1]= 23

----------Al repintar------------
ElementAt: 0 [0]= 19
ElementAt: 0 [1]= 23
ElementAt: 1 [0]= 19
ElementAt: 1 [1]= 23 <------------ deberia ser 24 pero sin razon aparente al entrar al repaint() le resta 1 ????? o mas bien parece que copia el contenido del vector anterior el 0
ElementAt: 2 [0]= 18
ElementAt: 2 [1]= 24
ElementAt: 3 [0]= 17
ElementAt: 3 [1]= 24
ElementAt: 4 [0]= 16
ElementAt: 4 [1]= 24

Al dar click nuevamente:

----------Al dar click------------
ElementAt: 4 [0]= 17
ElementAt: 4 [1]= 24
ElementAt: 3 [0]= 18
ElementAt: 3 [1]= 24
ElementAt: 2 [0]= 19
ElementAt: 2 [1]= 23
ElementAt: 1 [0]= 19
ElementAt: 1 [1]= 23
ElementAt: 0 [0]= 19
ElementAt: 0 [1]= 22
Cuadros H:38
Cuadros V:48
ancho=240
Capacidad del vector: 5
----------Al repintar------------
ElementAt: 0 [0]= 19
ElementAt: 0 [1]= 22
ElementAt: 1 [0]= 19
ElementAt: 1 [1]= 22
ElementAt: 2 [0]= 19
ElementAt: 2 [1]= 22 <--------------- Se ve que esta copiando los mismos valores
ElementAt: 3 [0]= 18
ElementAt: 3 [1]= 24
ElementAt: 4 [0]= 17
ElementAt: 4 [1]= 24


Espero que alguien me diga que estoy haciendo mal porque por mas que le doy vueltas no encuentro algun error