html 5 cavans 简易祖玛

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
    *margin{padding:0;margin:0;}
    body{background:black;}
    #box1{width:600px;height:600px;background:white; margin:20px auto;}
    span{background:white;}
</style>
<script>
    window.onload = function(){
        var oC = document.getElementById('cl');
        var oGc = oC.getContext('2d');
        var yImage = new Image();
        yImage.src = 'person.png';
        var iRotate = 0;
        yImage.onload = function(){
            setInterval(function(){
                oGc.clearRect(0,0,oC.width,oC.height);
                oGc.beginPath();
                oGc.arc(300,200,200,-90*Math.PI/180,180*Math.PI/180,false);
                oGc.stroke();
                
                oGc.beginPath();
                oGc.arc(250,200,150,180*Math.PI/180,0,false);
                oGc.stroke();
                
                oGc.beginPath();
                oGc.arc(400,200,20,0,360*Math.PI/180,false);
                oGc.closePath();
                oGc.stroke();
    
                for(var i=0;i<ball.length;i++){
                    oGc.beginPath();
                    //oGc.moveTo(ball[i].x,ball[i].y);
                    oGc.arc(ball[i].x,ball[i].y,20,0,360*Math.PI/180,false);
                    oGc.closePath();
                    oGc.fill();
                }
                oGc.save();
                oGc.translate(300,200);
                oGc.rotate(180*Math.PI/180);
                oGc.rotate(iRotate);
                oGc.translate(-40,-40);
                oGc.drawImage(yImage,0,0);
                oGc.restore();
                
                for(var i=0;i<bullet.length;i++){
                    oGc.save();
                    oGc.beginPath();
                    oGc.fillStyle = 'red';
                    oGc.moveTo(bullet[i].x,bullet[i].y);
                    oGc.arc(bullet[i].x,bullet[i].y,20,0,360*Math.PI/180,false);
                    oGc.closePath();
                    oGc.fill();
                    oGc.restore();
                }    
            
            oGc.save();
            oGc.font = '60px impact';
            oGc.textBaseline = 'top';
            oGc.fillStyle = 'red';
            oGc.shadowOffsetX = 10;
            oGc.shadowOffsetY = 10;
            oGc.shadowColor = 'green';
            oGc.shadowBlur = 5;
            var w = oGc.measureText('简易祖玛').width;
            oGc.fillText('简易祖玛',(oC.width-w)/2,450);
            oGc.restore();
            },1000/60); //这个刷新1000/60最好
        }
        
        var ball = [];
        setInterval(function(){
            var ballData = {
                x:300,
                y:0,
                r:200,
                startX:300,
                startY:0,
                num:0
            };
            ball.push(ballData);
        },500);
        
        setInterval(function(){
            for(var i=0;i<ball.length;i++){
                ball[i].num++;
                if(ball[i].num == 270){
                    ball[i].r = 150;
                    ball[i].startX = 250;
                    ball[i].startY = 50;
                }
                if(ball[i].num == 270+180){
                    alert("游戏结束!");
                    window.location.reload();
                }
                ball[i].x = Math.sin(ball[i].num*Math.PI/180)*ball[i].r+ball[i].startX;
                ball[i].y = ball[i].r-Math.cos(ball[i].num*Math.PI/180)*ball[i].r+ball[i].startY;
            }
            
            for(var i=0;i<bullet.length;i++){
                bullet[i].x += bullet[i].sX;
                bullet[i].y += bullet[i].sY;
            }
            
            for(var i=0;i<ball.length;i++){
                for(var j=0;j<bullet.length;j++){
                    if(crash(ball[i].x,ball[i].y,bullet[j].x,bullet[j].y)){
                        ball.splice(i,1);
                        bullet.splice(j,1);
                        break;
                    }
                }
            }
        },30);
        oC.onmousemove = function(ev){
            var ev = ev || event;
            var disX = ev.clientX - oC.offsetLeft;
            var disY = ev.clientY - oC.offsetTop;
            var a = disX-300;
            var b = disY-200;
            var c = Math.sqrt(a*a+b*b); 
            if(a > 0 && b >0){
                //右上
                iRotate = Math.asin(b/c)+90*Math.PI/180;
            }else if(a > 0 ){
                //右下
                iRotate = Math.asin(a/c);
            }
            
            if(a < 0 && b > 0){
                //左下
                iRotate = -(Math.asin(b/c)+90*Math.PI/180);
            }else if(a < 0 ){
                //左上
                iRotate = Math.asin(a/c);
            }
        };
        
        var bullet = [];
        oC.onmousedown = function(ev){
            var ev = ev || event;
            var disX = ev.clientX - oC.offsetLeft;
            var disY = ev.clientY - oC.offsetTop;
            var a = disX-300;
            var b = disY-200;
            var c = Math.sqrt(a*a+b*b); 
            var speed = 5;
            var spX = speed*a/c;
            var spY = speed*b/c;
            bullet.push({
                x:300,
                y:200,
                sX:spX,
                sY:spY
            });
            
        };
        
        function crash(x1,y1,x2,y2){
            var x = x1-x2;
            var y = y1-y2;
            
            var c = Math.sqrt(x*x+y*y);
            if(c <40){
                return true;
            }else{
                return false;
            }
        }
        
    };
</script>
</head>

<body>
<div id="box1">
    <canvas id="cl" width="600" height="600">
        <span>浏览器不支持canvas</span>
    </canvas>
</div>
</body>
</html>