PFont fontA; boolean pause; boolean loose; boolean init=true; // variabili navetta int xbase; int basewidth = 40; int baseheight = 10; int basevel = 20; // tempo int t = 0; // variabili proiettile float vxball = 2; float vyball = 6; float xball; float yball; float xball0; float yball0; float rball = 5; // punteggio int score; void setup() { pause = false; loose = false; score = 0; size(240, 300); noStroke(); fontA = loadFont("CourierNew36.vlw"); textFont(fontA, 12); xbase = width/2 - basewidth/2; xball0 = width/2; yball0 = height - 10 - baseheight - rball; } void draw() { if(init) { drawInit(); } else if(pause) { drawPause(); } else { fill(255); rect(10,10,width-20,height-20); fill(25); rect(10,8,width-20,6); fill(40); rect(xbase, height-20, basewidth, baseheight); drawBall(); } } void keyPressed() { if(keyCode == LEFT) { if(xbase>(basevel+10)) { xbase = xbase - basevel; } else xbase = 10; } else if(keyCode == RIGHT) { if(xbase<(width-10-basewidth-basevel)) { xbase = xbase + basevel; } else xbase = width-basewidth-10; } else if(key == 'p' && !loose) { pause = !pause; } else if(key == 'r' && loose) { init=false; setup(); } else if(key == 's' && loose) { String score_string; score_string = ""+score; link("http://web2.otto.to.it/abidibo/index.php?evt[processing-savePlayer]&score="+score_string); } else if(key == 'i') { init = false; } } void drawBall() { boolean collision; xball = xball0 + vxball*t; yball = yball0 - vyball*t; ellipse(xball, yball, rball, rball); fill(10); t = t+1; checkCollision(xball, yball, rball); } boolean checkCollision(float x, float y, float r) { // se la pallina impatta con la n // impatto parete destra if(x>(width-10-r)) { t=1; yball0=yball; xball0=xball; vxball=-vxball; return true; } // impatto parete sinistra if(x<(10+r)) { t=1; yball0=yball; xball0=xball; vxball=-vxball; return true; } // impatto navetta if(x>xbase && x<(xbase+basewidth) && y>(height- 10 - baseheight) && y<(height- 10 - baseheight + abs(vyball))) { t = 1; xball0 = xball; yball0 = yball; vyball = -vyball; return true; } // impatto parete superiore if(y<(10+rball+vyball+1)) { score = score + 1; t = 1; xball0 = xball; yball0 = yball; vyball = -vyball; float coin = random(-1,1); int sign; if(coin>0) sign=1; else sign = -1; vxball = vxball*random(0.5,1.8)*sign; if(vxball<0.1 && sign==-1) vxball = 1; return true; } // impatto parete inferiore sconfitta if(y>(height-10-baseheight+abs(vyball))) { t=0; xball0 = xball; yball0 = yball; drawLoose(); } return false; } void drawInit() { fill(0); text("Ciao", 20, 30); text("Controlli", 20, 50); text("frecce -> sinistra destra", 20, 70); text("i -> inizia", 20, 90); text("p -> pausa", 20, 110); } void drawPause() { fill(0); text("premi p per riprendere", 20, 30); } void drawLoose() { fill(0); text("Hai perso",20, 30); text("manigoldo", 20, 50); text("punteggio: "+score, 20, 70); text("premi s per salvare", 20, 90); text("premi r per rigiocare", 20, 110); loose = true; }