> show canvas only <


/* built with Studio Sketchpad: 
 *   https://sketchpad.cc
 * 
 * observe the evolution of this sketch: 
 *   https://codigodelaimagen.sketchpad.cc/sp/pad/view/ro.QaQXSoYH9vx/rev.1906
 * 
 * authors: 
 *   esperanza
 *   Juan Antonio Ruz
 *   emilio gonzález villegas

 * license (unless otherwise specified): 
 *   creative commons attribution-share alike 3.0 license.
 *   https://creativecommons.org/licenses/by-sa/3.0/ 
 */ 



//voy a hacer el juego clásico de pingpong, para divertirme un poco
// que bueno!
//declaro variables
int d; //diámetro pelotita
int borde;
float posX, posY;
float incrX, incrY;
float vel;
float XObs1, YObs1, XObs2, YObs2, anchoObs, altoObs;

void setup(){
    size(600,400);
    //inicializo variables
    d=20;
    borde=30;
    posX = width/2;
    posY = height/2;
    incrX = random(-1,1);
    incrY = random(-1,1);
    vel=2;
    XObs1=borde+30;
    YObs1=height/2;
    XObs2=width-(borde+30);
    YObs2=height/2;
    anchoObs=15;
    altoObs=50;
    }

/*
lo del pingpong es con jugadores??
¿habrá más pelotas? y ¿dejará de ser pingpong?
¿quieres que probemos a extraer funciones para descargar código del metodo draw() ...?
¿esto va hacia los sketchs de REAS?
quizá esto te pueda facilitar el tema vectorial...
http://processingjs.org/reference/PVector
*/

void draw(){
    background(0);//dibujo el fondo
    //dibujo el borde
    rectMode(CENTER);
    noFill();
    stroke(255);
    strokeWeight(10);
    rect(width/2,height/2,width-2*borde,height-2*borde);
    // dibujo la linea de división
    fill(255);
    for(int i=height/20; i<height; i=i+20){
    noStroke();
    rect(width/2,i,10,10);
    }
            
    //actualizo posición pelotita con velocidad constante independientemente del ángulo de rebote
    posX = posX+incrX*vel/sqrt(sq(incrX)+sq(incrY));
    posY = posY+incrY*vel/sqrt(sq(incrX)+sq(incrY));
    
    //dibujo la pelota
    fill(255,255,0);
    ellipse(posX,posY,d,d);
    
  
   
    //dibujo los obstáculos
    rect(XObs1, YObs1, anchoObs, altoObs);
    rect(XObs2, YObs2, anchoObs, altoObs);
    
    //establezco los límites
    if(posX>width-(borde+d/2) || posX<borde+d/2){
        incrX=-incrX;
        //incrX = random(-1,1);
        }
    if(posY>height-(borde+d/2) || posY<borde+d/2){
        incrY=-incrY;
        //incrY = random(-1,1);
        }
    
    }
    
void keyPressed(){
      //actualizo posición de los obstáculos y sus límites

        //tecla "a" mueve el obstáculo de la izquierda hacia arriba
        if(keyCode==65){
            YObs1=YObs1-10;
            if(YObs1<(altoObs/2)+borde){
                YObs1=(altoObs/2)+borde;
                }
            }
             //tecla "z" mueve el obstáculo de la izquierda hacia abajo
        if(keyCode==90){
            YObs1=YObs1+10;
            if(YObs1>height-((altoObs/2)+borde)){
                YObs1=(height-((altoObs/2)+borde));
                }
            }    
            //tecla "k" mueve el obstáculo de la derecha hacia arriba
        if(keyCode==75){
            YObs2=YObs2-10;
            if(YObs2<(altoObs/2)+borde){
                YObs2=(altoObs/2)+borde;
                }
            }
             //tecla "m" mueve el obstáculo de la derecha hacia abajo
        if(keyCode==77){
            YObs2=YObs2+10;
            if(YObs2>height-((altoObs/2)+borde)){
                YObs2=(height-((altoObs/2)+borde));
                }
            }    
     }