Código:
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.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 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