码迷,mamicode.com
首页 > Web开发 > 详细

html5面向对象做一个贪吃蛇小游戏

时间:2016-08-25 20:56:39      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

canvas加面向对象方式的贪吃蛇 2016-08-25

           这个小游戏可以增加对面向对象的理解,可以加强js逻辑能力,总之认真自己敲一两遍收获还是不少啊!!适合刚学canvas的同学练习!!

      废话不多说,直接来讲思路和代码.

      -----------------------------------------------------------------------------------------------------------------

      开发思路:首先要有蛇吃的食物,就是一个个canvas随机画出的方块,然后是蛇,蛇也是方块组成。于是我们构造一个函数,功能是产生食物和蛇的原材料,和处理一些关于方块的函数(后面会上代码)。其次是,开始游戏的函数,当页面加载完成后开始游戏,然后是当游戏开始是时候,我们要初始化一个画布和随机产生食物,接着是关于画蛇和控制蛇的构造函数。最后是当触发游戏结束的条件时候的游戏结束函数。首先搭建一个整体思路然后再细细入手,博主是这样写的,大神别笑话.

初始代码如下:

------

<script>
       var canvas=document.getElementById("canvas");
       var ctx=canvas.getContext(‘2d‘);
       var gridWidth=10;
       var foods=new Array(),snakes=new Array();//放食物和蛇的数组
       //原料初始化
       function Node(x,y,w){
       
       }

       //生成一个画布和食物
       function Farm(){
    
        }
       //画蛇
       function Snake(x,y,len,speed){
              }
       }
       //开始游戏
       function gameStart(){
          }
       gameStart();
       //结束游戏
       function gameover(){}
<script>

------

    接着,就是一个一个思考:首先是Node函数里面设置一些基本生成方块方法,由于,蛇和食物并不同,所以分成单独的2个函数,并且,蛇运动的时候要去掉尾部的方块,所以这里还要加一个去掉clear方法:

---   

 1          var t=this;
 2            t.x=x;
 3            t.y=y;
 4            t.w=w;
 5            //食物
 6            t.foodInit=function(){
 7                ctx.fillStyle=‘red‘;
 8                ctx.fillRect(x,y,w,w);
 9            }  
10            //
11            t.snakeInit=function(){
12                 ctx.fillStyle=‘black‘;
13                 ctx.strokeStyle=‘white‘;
14              ctx.fillRect(x,y,w,w);
15              ctx.strokeRect(x,y,w,w);
16                }
17            //清除蛇尾
18             t.clear=function(){
19             ctx.fillStyle=‘white‘;
20             ctx.strokeStyle=‘white‘;
21             ctx.fillRect(x,y,w,w);
22             ctx.strokeRect(x,y,w,w);
23            }

 

 

 

----

     接着是Fram函数里,要设置一个画布环境并且要随机产生食物:

---- 

 1     function Farm(){
 2            var t=this;
 3             ctx.fillStyle=‘white‘;
 4             ctx.fillRect(0,0,canvas.width,canvas.height);
 5          //随机生成食物
 6          t.addfood=function(){
 7              var x=parseInt(canvas.width/gridWidth*Math.random())*gridWidth;
 8              var y=parseInt(canvas.height/gridWidth*Math.random())*gridWidth;
 9              var food=new Node(x,y,gridWidth);
10              food.foodInit();
11              foods.push(food);
12          }
13        }

 

 

 

----

   写到这里,当你启动gameStar函数时候会看到一些食物随机产生在画布上,颜色改一下,会有不同的画布环境:

---    

1     //开始游戏
2    function gameStart(){
3       var farm=new Farm();
4       setInterval(farm.addfood,2000);
5    }
6    gameStart();

 ---

   现在到了最难的地方就是处理蛇,首先是画一条蛇并启动它和键盘事件取如下:

---

 1          function Snake(x,y,len,speed){
 2           var t=this;
 3           t.x=x;
 4           t.y=y;
 5           t.dir=‘R‘;
 6           //t.len=len;
 7           var nx=x;ny=y;
 8           t.init=function(){
 9               for (var i = 0; i <len; i++) {
10                   var tempNode=new Node(nx,ny,gridWidth);
11                   tempNode.snakeInit();
12                 nx-=gridWidth=10;
13                 snakes.push(tempNode);        
14               };
15               setInterval(t.move,speed)
16           }
17           
18           //取得键盘方向
19           document.onkeydown=function(e){
20                 var code=e.keyCode;
21             switch(code){
22                case 37:
23                  t.dir=‘L‘;
24                break;
25                case 38:
26                  t.dir=‘U‘;
27                break;
28                case 39:
29                   t.dir=‘R‘;
30                break;
31                case 40:
32                   t.dir=‘D‘;
33                break;
34             } 
35           }
}

 

html5面向对象做一个贪吃蛇小游戏

标签:

原文地址:http://www.cnblogs.com/panhe-xue/p/5808319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!