jueves, 15 de julio de 2010

Problemas con Runnable

Hola maestro y compañeros, tengo un problema al querer implementar el Runnable a mi programa anterior para que el circulo se moviera automatico cada vez que el usuario oprime una tecla de dirección. Para cada tecla puse una variable booleana, y dentro del while del bloque run () puse if para cada caso de la tecla. Implementé el Runnable dentro de mi clase principal, ¿se tiene que crear otra clase como en el ejemplo que se vió en clase del controlador?, tal vez ahi esté el problema pero aún así el programa no quiso mover en automático :(


Aquí está lo que quise implementar cuando se oprime una tecla, en este caso es la tecla direccional arriba, es lo mismo con las otras teclas, solo que cambian los valores de las variables booleanas
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_UP:
System.out.println("Arriba");
this.corriendo=true;
this.corriendo1=true;
this.corriendo2=false;
this.corriendo3=false;
this.corriendo4=false;

break;

Gracias por la atención

miércoles, 7 de julio de 2010

PROGRAMA EVITAR OBSTACULOS O LABERINTO

Bueno este es el programa anterior ya corregido, el jugador puede dibujar sus propias líneas como obstáculos y cuando el círculo toca esas líneas se reinicia el juego. Le puse 4 variables que son el punto de comparación entre el círculo y los puntos iniciales y finales de cada línea, que son:
private double compa;
private double compi;
private double compo;
private double compu;

Dentro del ciclo while se usa esas variables para comparar la distancia del círculo a una línea específica.
while(i.hasNext()){
Linea l = i.next();
gr.draw(new Line2D.Double(l.xs*ancho, l.ys*altura,l.xf*ancho,l.yf*altura));
compa =l.xs-(this.x);
compi =l.ys-(this.y);
compo =l.xf-(this.x);
compu =l.yf-(this.y);

Ya una vez establecidos esos valores se recurre a las condiciones de que sean menor de los puntos "x" y "y" del círculo:



if((l.xs< l.xf ||l. ys< l.yf){ // Se establece si la línea se dibuja de izquierda a derecha o de arriba hacia abajo
if(compa<0)&&(compo>0)){ //este if es para líneas horizontales
if(compi<0.05&&compi>-0.01){
this.reset();
System.out.println("TOCASTE UNA LÍNEA!!! D:");
}
}else if(compi<0&&compu>0){ //Este if es para líneas verticales
if(compa<0.05>-0.01){
reset();
System.out.println("TOCASTE UNA LÍNEA!!! D:");
}

}
}


if(l.xs>l.xf||l.ys>l.yf){ // Se establece si la línea se dibuja de derecha a izquierda o de abajo hacia arriba
if(compo<0&&compa>0){
//este if es para líneas horizontales
if(compi<0.05&&compi>-0.01){
this.reset();
System.out.println("TOCASTE UNA LÍNEA!!! D:");
}
}else if(compu<0&&compi>0){
//Este if es para líneas verticales
if(compa<0.05>-0.01){
reset();
System.out.println("TOCASTE UNA LÍNEA!!! D:");
}
}



Hay 2 if's importantes que son cuando la línea se dibuja de izquierda a derecha o viceversa, o también de arriba hacia abajo o viceversa, así que el jugador podrá dibujar las líneas como desee, pero tendrán que ser líneas rectas.
Bueno aquí el código para descargar y disfruten haciendo laberintos y tratar d
e pasarlos =)



http://www.mediafire.com/?arz55nuhilz




jueves, 1 de julio de 2010

nuevo laberinto

Este programa es el mismo juego que presenté la vez pasada, sólo que ahora incluí lo uqe me recomendó la doctora que era que el jugador dibujé las líneas de las paredes del laberinto, una vez que dibuja las líneas en el código puse que cuando utilize el iterator cheque las coordenadas del círculo, y sí son iguales que regrese el círculo al inicio.

Iterator i= this.lineas.iterator();
while(i.hasNext()){
Linea l = i.next();
gr.draw(new Line2D.Double(l.xs*ancho, l.ys*altura,l.xf*ancho,l.yf*altura));
if(this.x*anchol.xs*ancho){
if(this.y*anchol.ys*altura){
this.reset();
}
}
}
pero hay un problema, a veces si ejecuta la acción, pero cuando se quiere volver a jugar ya no impide que el circulito no pase a través de las líneas, no sé si sea alguna variable que se queda con un valor anterior.
Pueden bajar y checar el código de este link http://www.mediafire.com/?dydywrifyyn
:)