/**
* a arkanoid clone by guru
*
use the mouse to play
*/
int px, py;
int vx, vy;
boolean paused = true;
boolean done = true;
int[][] stones;
void setup() {
noCursor();
size(300,300);
smooth();
px = width/2;
py = height/2;
vx = int(random( -8, 8 ));
vy = -2;
stones = new int[7][4];
for( int x = 0; x < 7; x++) {
for( int y = 0; y < 4; y++ ) {
stones[x][y] = y + 1;
}
}
textFont( loadFont( "Verdana-Bold-48.vlw" ));
}
void draw() {
background(50);
stroke(255);
strokeWeight(3);
// update postion of the ball
if (!paused) update();
// draw all stones that are not removed yet
// check if all are gone
done = true;
for( int x = 0; x < 7; x++) {
for( int y = 0; y < 4; y++ ) {
if ( stones[x][y] > 0 ) {
done = false;
fill( 128 + 10 * stones[x][y] );
rect( 10 + x * 40, 10 + y * 20, 40, 20 );
}
}
}
// no stone remaining - display yippie message
if ( done ) {
paused = true;
fill(255);
textSize( 48 );
text( "JIPPIE!", 50, 200 );
}
// display text if paused
if ( paused ) {
textSize( 16 );
fill(128);
text( "press mousebutton to continue", 10, 250 );
}
fill(128);
// draw ball
ellipse(px,py,20,20);
// draw paddle
rect( mouseX - 35, 270, 70, 20 );
}
void update() {
// check if ball dropped out of the lower border
if ( py + vy > height - 10 ) {
px = width/2;
py = height/2;
vx = int(random( -8, 8 ));
vy = -2;
paused = true;
}
// check if the ball hits a block
for( int x = 0; x < 7; x++) {
for( int y = 0; y < 4; y++ ) {
if ( stones[x][y] > 0 ) {
if ( px + vx + 10 > 10 + x * 40 && px + vx - 10 < 10 + x * 40 + 40 &&
py + vy + 10 > 10 + y * 20 && py + vy - 10 < 10 + y * 20 + 20 ) {
stones[x][y] = 0;
// change the velocity in y direction if the block has been hit
// on the bottom or on the top
if ( px + 10 > 10 + x * 40 && px - 10 < 10 + x * 40 + 40 ) vy = -vy;
// change the velocity in the x direction if the block has been hit on the side
if ( py + 10 > 10 + y * 20 && py - 10 < 10 + y * 20 + 20 ) vx = -vx;
}
}
}
}
// change the direction if the ball hits a wall
if (px + vx < 10 || px + vx > width - 10) {
vx = -vx;
}
if (py + vy < 10 || py + vy > height - 10) {
vy = -vy;
}
// check if the paddle was hit
if ( py + vy >= 266 && px >= mouseX - 35 && px <= mouseX +35 ) {
vy = -vy;
vx = int(map( px - mouseX, -35, 35, -8, 8 ));
}
// calculate new postion
px += vx;
py += vy;
}
void mousePressed() {
paused = !paused;
if (done) {
for( int x = 0; x < 7; x++) {
for( int y = 0; y < 4; y++ ) {
stones[x][y] = y + 1;
}
}
done = false;
px = width/2;
py = height/2;
vx = int(random( -8, 8 ));
vy = -2;
}
}