-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrickbreaker.js
executable file
·10 lines (10 loc) · 3.83 KB
/
brickbreaker.js
1
2
3
4
5
6
7
8
9
10
var radius=4,half_paddle_width=25,paddle_width=50,paddle_height=10,left_wall=0,top_wall=0,right_wall=400,paddle_wall=385,page_center=200,speed_fast=15,speed_med=35,speed_slow=50,bpr=10,canvas=document.getElementById("myCanvas"),ctx=canvas.getContext("2d"),quit=!1,inPlay=!1,score=0,paddle_center=200,dirX=1,dirY=-1,incr=radius,ballY=paddle_wall-2*radius,ballX=page_center,speed=speed_med;
function exitCall(a){clearInterval(intervalId);a?ctx.fillText("You WON!!",page_center,page_center):ctx.fillText("You LOST :(",page_center,page_center);ctx.fillText("Your score is: "+score,page_center,page_center+50);quit=!0}
function movePaddle(a){ctx.save();ctx.fillStyle="grey";ctx.strokeStyle="white";paddle_center=a.screenX;inPlay?ctx.clearRect(left_wall,paddle_wall,right_wall,paddle_height):ctx.clearRect(left_wall,paddle_wall-2*radius,right_wall,paddle_height+2*radius);inPlay||makeCircle(ctx,paddle_center,paddle_wall-radius,radius);paddle_center<half_paddle_width?(ctx.fillRect(left_wall,paddle_wall,paddle_width,paddle_height),ctx.strokeRect(left_wall+radius,paddle_wall+radius,paddle_width-2*radius,paddle_height-2*
radius)):paddle_center>right_wall-half_paddle_width?(ctx.fillRect(right_wall-paddle_width,paddle_wall,paddle_width,paddle_height),ctx.strokeRect(right_wall-paddle_width+radius,paddle_wall+radius,paddle_width-2*radius,paddle_height-2*radius)):(ctx.fillRect(paddle_center-half_paddle_width,paddle_wall,paddle_width,paddle_height),ctx.strokeRect(paddle_center-half_paddle_width+radius,paddle_wall+radius,paddle_width-2*radius,paddle_height-2*radius));ctx.restore()}
function onKeyDown(a){!quit&&!inPlay&&32===a.keyCode&&(inPlay=!0,ctx.clearRect(0,200,400,150),intervalId=setInterval(moveBall,speed),ballX=paddle_center,ballY=paddle_wall-radius,dirX=0,dirY=-1)}
function moveBall(){if(bricks.length===num_dead_bricks)exitCall(!0);else{ballY<=radius-top_wall&&(dirY=1);ballX<=radius-left_wall&&(dirX=1);ballX>=right_wall-radius&&(dirX=-1);if(ballY>=paddle_wall-radius){if(quit)return;paddle_center>right_wall-half_paddle_width&&(paddle_center=right_wall-half_paddle_width);paddle_center<half_paddle_width-left_wall&&(paddle_center=half_paddle_width);if(ballX-paddle_center<half_paddle_width+radius&&paddle_center-ballX<half_paddle_width+radius)dirY=-1,ballX>paddle_center?
(incr=25*(ballX-paddle_center)/(speed+25),dirX=1):ballX<paddle_center?(incr=25*(paddle_center-ballX)/(speed+25),dirX=-1):incr=0;else{exitCall(!1);return}}brickHit();var a=ballY+dirY*radius,c=ballX+dirX*incr;delCircle(ctx,ballX,ballY,radius);makeCircle(ctx,c,a,radius);ballY=a;ballX=c;for(a=0;a<bricks.length;a++)bricks[a].draw()}}function brickHit(){for(var a=0;a<bricks.length;a++)if(!0===intersects(bricks[a])){bricks[a].remove();bricks[a]instanceof DeadBrick||bricks.splice(a,1);break}}
function intersects(a){return ballX+radius>=a.x&&ballX-radius<=a.x+a.width&&ballY-radius<=a.y+a.height&&ballY+radius>=a.y?(-1===dirY?1===dirX?ballY-radius<=a.y+a.height?dirY=1:dirX=-1:ballY-radius<=a.y+a.height?dirY=1:dirX=1:1===dirX?ballY+radius<=a.y?dirY=-1:dirX=-1:ballY+radius<=a.y?dirY=1:dirX=1,!0):!1}function makeCircle(a,c,d,b){a.save();a.fillStyle="black";a.fillRect(c-b,d-b,2*b,2*b);a.fill();a.restore()}function delCircle(a,c,d,b){a.clearRect(c-1.2*b,d-1*b,2.4*b,2*b)}
function run(){ctx.save();ctx.fillStyle="grey";ctx.strokeStyle="white";ctx.fillRect(page_center-half_paddle_width,paddle_wall,paddle_width,paddle_height);ctx.strokeRect(paddle_center-half_paddle_width+radius,paddle_wall+radius,paddle_width-2*radius,paddle_height-2*radius);ctx.restore();makeCircle(ctx,page_center,paddle_wall-radius,radius);canvas.addEventListener("keydown",onKeyDown,!1);ctx.font="20px Arial";ctx.textAlign="center";ctx.fillText("Random -> Level:Easy Speed:Medium.",page_center,250);
ctx.fillText("Press 'spacebar' to play.",page_center,300);var a=makeMap(10,bpr,rand_gen1);drawBricks(a);canvas.setAttribute("tabindex","0");canvas.focus();canvas2()}run();