/* 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));
}
}
}