HTML5中canvas实现小球击打小方块游戏

来源:互联网 发布:淘宝刷流量收藏软件 编辑:程序博客网 时间:2024/04/26 05:31

游戏开发流程:

1、创建画布:

将画布放在div标签里面,这样可以控制画布居中的位置,在对div标签加上一些样式,利于观看
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.   <divid="main"> 
  2.        <!--将画布嵌在div块里面,使其可以居中--> 
  3. <canvasid="liuming_canvas"width="300px"height="500px"> 
  4. </canvas> 
  5.   </div> 

2、创建移动的小木块:

定义一个可以用于移动的小方块,该小方块包含如下的属性,坐标位置,小方块的长和宽,小方块移动的大小距离
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. var diamond = { 
  2. x : 100, 
  3. y : 485, 
  4. width : 100, 
  5. height : 15, 
  6. move : 10 

3、创建用于击打的小球:

定义一个用于移动和击打小方块的小球,该小球包含如下的属性,小球的做坐标位置,半径,在x轴和y轴的速度

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. var  ball_impact = { 
  2.     x : 150, 
  3. y : 465, 
  4. r : 10, 
  5.      vx : 200, 
  6.     vy : 200 

4、生成一系列的小方块:

生成一系列的小方块用于被小球击打,小球的生成主要是根据画布的大小和小方块的坐标与长

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.   var diamond_impact = []; 
  2.     diamond_impact.length = 0
  3.     var width_span = 25; // 任意两个小方块的横向间隔  
  4.     var height_span = 25;   //任意两个小方块的水平间隔  
  5.     for(var i =1 ; i<=10 ; i++){//控制每行输出的小方块 
  6. <span style="white-space:pre">  </span>   for(varj = 1 ; j< 10 ; j++){//输出每列的小方块  只有x轴和y轴的坐标不一样而已 
  7.     var diamond_impact_children = { 
  8.             x : width_span, 
  9.             y : height_span, 
  10.             width : 10, 
  11.             height : 10 
  12.     }; 
  13.     width_span += 30; 
  14.     diamond_impact.push(diamond_impact_children); //将得到的小方块放在 diamond_impact 中,已被以后使用 
  15.        height_span += 25; 
  16.     width_span = 25

5、编写移动小方块的移动方法:    

移动小方块的实现,首先需要监听获得键盘的事件,之后再根据获得的键盘事件来分别处理来向那个方向移动,在此处我分别定义了四个方向,目的是为了只在左右移动可能不能完全消灭小方块,

在移动的过程之中还要判断移动小方块的位置,以防止是否已经出界。在此处我分别定义了四个方法来处理各个方向的移动。                                                                                                                                                                                                                        

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.    //键盘事件,获取当前在那个方向运动 
  2.    var direction = ""
  3.     document.onkeydown =function (e) { 
  4.        if (e.keyCode == 37 ) direction = "left"
  5.        if (e.keyCode == 39 )direction = "right"
  6.        if (e.keyCode == 38 ) direction = "up"
  7. if (e.keyCode == 40 ) direction = "down"
  8.    } 
     
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.     //定义四个方法来重绘制方块的位置  分别有 左、右、上、下 
  2.     function move_right_diamond(){ 
  3. clear_diamond();//清除以前的方块 
  4.         init_canvas_background();//再次初始化画布  下同 
  5.         //重新绘制小方块的位置 
  6.         if(diamond.x + diamond.width >= canvas.width){ //判断方块是否已经到达最右端 
  7.             cxt.fillStyle ="#17F705"
  8.     cxt.fillRect(diamond.x,diamond.y,diamond.width,diamond.height); 
  9.         }else{ 
  10.             diamond.x += diamond.move; 
  11.         cxt.fillStyle ="#17F705"
  12.         cxt.fillRect(diamond.x,diamond.y,diamond.width,diamond.height); 
  13.         } 
  14.      } 
  15.      //其余方法类似   

6、编写小球移动的方法以及碰壁和接触移动小方块反弹的方法:  

反弹:小方块的反弹,主要改变其x轴和y轴方向的速度,由于我们定义的是匀速运动,为此我们只需要改变其速度的方向。

移动:根据小球的速度和指定的移动大小来计算出新的小球坐标,之后再绘制新的小球。

反弹图片实例:(对于触碰墙壁反弹类似,就不多说)

小球移动的代码:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. cxt.arc(ball_impact.x,ball_impact.y,ball_impact.r,0,Math.PI * 2,true); 
  2. cxt.closePath(); 
  3. cxt.fill(); 
  4. ball_impact.x += ball_impact.vx * cyc /1000;//改变其坐标的位置 
  5. ball_impact.y += ball_impact.vy * cyc /1000; 

7、小球击打小方块,小方块消失的方法:                      

击打:小球击打小方框,主要判断小球和小方块的坐标位置即可。注意此处将会分别判断y轴和x轴将小球的击打的小方块限定在一个区域里面。
小时:击中当前小方块之后改变其长宽,之后重绘小方块即可,由于当前的小方块的长宽都为0,即绘制之后的小方块没有。
图解击打的坐标变化:

8、判断游失败和成功的方法:

失败:是要小球的掉到最低端即小球的Y坐标大于画布的Y坐标  就是失败;
成功:计数判断是否消灭的小方块数是否和指定的小方块数相同。
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.    if(ball_impact.y + ball_impact.r >= canvas.height){ 
  2. cxt.fillStyle = "#FC0000"
  3. cxt.font = "bold 50px 微软雅黑"
  4. cxt.fillText("FAILURE!",30,250); 
  5. diamond.move = 0;//不能移动板块 
  6.    } 

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.    //判断是否与所有的小方块数相等 
  2.    if(count_sum == 90){ 
  3.     cxt.fillStyle = "#FCF205"
  4. <span style="white-space:pre">   </span>cxt.font ="bold 50px 微软雅黑"
  5.     cxt.fillText("SUCCESS!",20,250); 
  6.     diamond.move = 0;//不能移动板块 
  7. <spanstyle="white-space:pre">   </span>ball_impact.vx =0
  8.     ball_impact.vy =0
  9.    else{ 
  10.     count_sum = 0
  11.    } 

9、显示效果:


0 0
原创粉丝点击