HTML 5 背离贪吃蛇 写成了类似于屏幕校准

中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子。当然h5还是学一点好一点 

具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出现小球来 如果随机圆和绘制圆的圆心距=2*R 则撞到了。 
其中的问题有: 
① 怎么获取鼠标点击的坐标点 
解决办法 :用一个

包含canvas画布 而且将其宽度和高度设为一致的 同时调用div 的点击事件就可以获取到 此时canvas 中的坐标了 。
<div  onclick="draw_location(event)" style="float:left;width:600;height:900;border:1px solid #c3c3c3">
<!--onmousemove="draw_location(event)" 也可以动态读取鼠标到哪里就显示器坐标 -->
        <canvas id="canvas_Main" width="600" height="900"></canvas>
</div>
 js当中的代码就非常的简单了
function draw_location(e)
        {
            faixed_X=e.clientX;
            faixed_Y=e.clientY;
            if(number>0)
            {
                ClearCanvas();
                 if(confirm('确定绘制在这里吗?'))
                 {
                    draw_panl(faixed_X,faixed_Y);//此处为调用画圆方法
                    feel_ball();
                 }          
                number--;                   
            }else
            {
                alert("所选次数已用完 请点击下面的按钮");

            }   
            btnHide_Show(number);
        }

② 怎么求圆心距

 

js当中有一个开方的高阶函数: Math.sqrt();

既然图中涉及到平方 那就先来一个平方的方法

function  squre(num)
        {
            return num*num;
        }

//计算圆心距
        //x  y为活动圆心坐标 
        //半径已设定为 15  如需要要更改  以后加上
        function  cylinder_spacing(x,y,r)
        {
         var  result;
         var  temp=squre(faixed_X-x)+squre(faixed_Y-y)
         result=Math.sqrt(temp);
         if(result<=2*r)
         {
            goldnum=goldnum+100;
            //金额加100
            document.getElementById("xycoordinates").innerText=goldnum;
         }else
         {
            //提示没有中奖         
         }      
        }   

③随机圆

解决办法 
因为是随机的 而且还要时时的更新位置 当然就要用到定时器 setInterval( function(){}①,time②) 
①=》function(){ 代码片 } || 别处定义好的方法 name 
②=》毫秒 
定时器是一个全局变量 一处声明 处处就可以调用了

var panl=setInterval(draw_panl,300)// panl 为当前计时器的名字
//如果你要暂停这个计时器就要用到 clearInterval(③)
③=》计时器名字
//*****-- 一个页面中必须要给计时器命名字 当你停止之后又开始 时  如果不指定名字 则会导致计时器的时间嵌套出错 
间隔时间 越来越小---****
//暂停计时器
clearInterval(panl);
//开始计时器
panl=setInterval(functionName,time);

以上是自己写成了随机碰的代码  

还是完完整整的附上类似于屏幕校准的代码吧

HTML 部分

<!DOCTYPE html>
<html >
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>        
            <div  onclick="cnvs_getCoordinates(event)" style="float:left;width:600;height:900;border:1px solid #c3c3c3">
        <canvas id="canvas_Main" width="600" height="900"></canvas>
        
        </div>
        <label id="xycoordinates"></label>
        <div style=" clear: both" id="btnlist">            
            <li>
            <input type="button" value="100/1" id="gold1" onclick="get_chance(1)">
            <input type="button" value="300/2" id="gold2" onclick="get_chance(2)">
            <input type="button" value="500/3" id="gold3" onclick="get_chance(3)">
            <input type="button" value="1000/4" id="gold4" onclick="get_chance(4)">
        </li>
        </div >
        </body>
</html>

js部分

//类似于屏幕校准
    //   出现的问题是 : 
     var rand_X ;
     var  rand_Y;
     var goldnum=0;
     var lost_number=0;
     var chance=0;
    
    
    //获取可以丢失次数
        function get_chance(k)
        {        
            var  that=document.getElementById('btnlist');
            chance=k;
         if(chance>0)
            {                
                that.style.display="none";
                var  time=setInterval(draw_panl(),500);        
            }else
            {                
                that.style.display="";
            }
        }
    //-----------------------------------------------------------
    //var  time=setInterval(draw_panl(),500);
    //获取随机颜色
        function Get_Color()
        {
            var  color='#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).slice(-6);    
            return color;
        }
        //获取随机坐标 
        function   RandomCoords()
        {
         rand_X=Randinterval(15,585);
         rand_Y=Randinterval(15,885);
        }
        //平方
        function  squre(num)
        {
            return num*num;
        }
        //随机函数
         function  Randinterval(minval,maxval)
        {
            return  Math.floor(Math.random()*maxval+minval);    
        }
        //--------------------------------------------------------------------
        //画圆
        function draw_panl()
        {        
             RandomCoords();
            var c=document.getElementById("canvas_Main");
            var cxt=c.getContext("2d");    
            cxt.fillStyle=Get_Color(); 
            //可以加上 阴影
            cxt.shadowOffsetX = 5; // 阴影Y轴偏移
                 cxt.shadowOffsetY = 3; // 阴影X轴偏移
              cxt.shadowBlur = 5; // 模糊尺寸
              cxt.shadowColor =Get_Color(); // 颜色*/
            cxt.beginPath();
            cxt.arc(rand_X,rand_Y,25,0,Math.PI*2,true);
            cxt.closePath();
            cxt.fill();    
        }
        //清除画布
        function clear_panl ()
        {
            var c=document.getElementById("canvas_Main");
            var cxt=c.getContext("2d");
            cxt.clearRect(0,0,600,900);            
        }
        //获取鼠标坐标
        function cnvs_getCoordinates(e)
        {
            x=e.clientX;
            y=e.clientY;    
            cylinder_spacing(x,y);
        }
        //-------------- 我只是在PC上面这么做了 移动端暂时还没试验 调试的时候 也有用手机模式调试了一番--------------------------------
        //计算圆心距
        //x  y为活动圆心坐标 
        //半径已设定为 15  如需要请更改  如果真的写屏幕校准的话 那就简单多了  
     //想法 :自己知道canvas的大小=》继而知道坐标
      // 在四个边角先后绘制圆 根据圆心距来判断 你所要求的精度误差
     // 没有选中就在判断一次

function cylinder_spacing(x,y) { var result; var temp=squre(rand_X-x)+squre(rand_Y-y) result=Math.sqrt(temp); //在此处加上 没点中之后发生的事情 if(result<=20) { goldnum=goldnum+100; //金额加100 document.getElementById("xycoordinates").innerText=goldnum; clear_panl(); time=setInterval(draw_panl(),500); }else { lost_number++; clear_panl(); time=setInterval(draw_panl(),200); if(lost_number==chance&&lost_number!=0) { alert("丢失越多,则速度会越快 直到停止"); clear_panl(); //将该计时器停止 clearInterval(time); lost_number=0; get_chance(0); } } }

贪吃蛇的代码是我自己不能控制它的长度 就不把最后写废了的代码给大家看了, 免得自己下不来台。

 

自己的js功力不是很够 还在学习阶段 各位就担待着看。欢迎评说!

 

posted @ 2016-08-18 17:20  严芷云  阅读(302)  评论(0编辑  收藏  举报