贪吃蛇

这个贪吃蛇是在网上看到的一个例子,于是自己模仿着写了一个

html代码:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>贪吃蛇</title>
 5     <meta charset="UTF-8">
 6     <meta name="keywords" content="贪吃蛇">
 7     <meta name="Description" content="这是一个初学者用来学习的小游戏">
 8     <style type="text/css">
 9 /*     *{margin:0;} */
10     .map{
11         margin:100px auto;
12         height:600px;
13         width:900px;
14         background:#00D0FF;
15         border:10px solid #AFAEB2;
16         border-radius:8px;
17     }
18     </style>
19 </head>
20  
21 <body>
22 <div class="map">
23     <canvas id="canvas" height="600" width="900"></canvas>
24 </div>
25  
26 <script src="snake.js"> </script>
27 </body>
28 </html>

JavaScript代码:

  1  
  2     //获取绘制工具
  3     var c=document.getElementById("canvas");
  4     var ctx=c.getContext("2d");
  5  
  6     var snake =[];//定义一条蛇,画蛇的身体
  7     var snakeCount = 6;//初始化蛇的长度
  8     var foodx =0;
  9     var foody =0;
 10     var togo =0;
 11     function drawtable()//画地图的函数
 12     {
 13         for(var i=0;i<60;i++)//画竖线
 14         {
 15             ctx.strokeStyle="yellow";
 16             ctx.beginPath();
 17             ctx.moveTo(15*i,0);
 18             ctx.lineTo(15*i,600);
 19             ctx.closePath();
 20             ctx.stroke();
 21         }
 22         for(var j=0;j<40;j++)//画横线
 23         {
 24             ctx.strokeStyle="yellow";
 25             ctx.beginPath();
 26             ctx.moveTo(0,15*j);
 27             ctx.lineTo(900,15*j);
 28             ctx.closePath();
 29             ctx.stroke();
 30         }
 31         
 32         for(var k=0;k<snakeCount;k++)//画蛇的身体
 33             {
 34             ctx.fillStyle="black";
 35             if(k==snakeCount-1)
 36             {
 37                 ctx.fillStyle="red";//蛇头的颜色与身体区分开
 38             }
 39             ctx.fillRect(snake[k].x,snake[k].y,15,15);//前两个数是矩形的起始坐标,后两个数是矩形的长宽。
 40             
 41             }
 42             //绘制食物    
 43             ctx.fillStyle ="black";
 44             ctx.fillRect(foodx,foody,15,15);
 45         // ctx.fill();
 46     }
 47      
 48     function start()//定义蛇的坐标
 49     {
 50         //var snake =[];//定义一条蛇,画蛇的身体
 51         //var snakeCount = 6;//初始化蛇的长度
 52         //蛇总是从左上角出发
 53         for(var k=0;k<snakeCount;k++)
 54             {
 55                 snake[k]={x:k*15,y:0};    
 56             }
 57           drawtable();
 58           addfood();//在start中调用添加食物函数 
 59     }
 60  
 61     function addfood()
 62     {
 63     foodx = Math.floor(Math.random()*60)*15; //随机产生一个0-1之间的数
 64     foody = Math.floor(Math.random()*40)*15;
 65         
 66         for (var k=0;k<snake;k++)
 67         {
 68             if (foodx==snake[k].x&&foody==sanke[k].y)//防止产生的随机食物落在蛇身上
 69             {    
 70             addfood();
 71             }
 72         }
 73     }    
 74 
 75    function move()
 76    {
 77     switch (togo)
 78     {
 79     case 1: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y}); break;//向左走
 80     case 2: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y-15}); break;
 81     case 3: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y}); break;
 82     case 4: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y+15}); break;
 83     case 5: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y-15}); break;
 84     case 6: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y+15}); break;
 85     default: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y});
 86     }
 87     snake.shift();//删除数组第一个元素
 88        ctx.clearRect(0,0,900,600);//清除画布重新绘制
 89        isEat();
 90     isDead();
 91     drawtable();
 92    }             
 93    
 94    function keydown(e)
 95    {
 96    switch(e.keyCode)
 97         {
 98          case 37: togo=1; break;
 99          case 38: togo=2; break;
100          case 39: togo=3; break;
101          case 40: togo=4; break;
102          case 65: togo=5; break;
103          case 68: togo=6; break;
104         }
105    }
106    
107    function isEat()//吃到食物后长度加1
108    {
109     if(snake[snakeCount-1].x==foodx&&snake[snakeCount-1].y==foody)
110    {
111         addfood();
112         snakeCount++;
113         snake.unshift({x:-15,y:-15});
114    }
115    
116    }
117    
118    function isDead()
119    {
120     if (snake[snakeCount-1].x>885||snake[snakeCount-1].y>585||snake[snakeCount-1].x<0||snake[snakeCount-1].y<0)
121         {
122         alert("You are dead,GAME OVER!!!");
123         clearInterval(move);
124         //window.location.reload();
125         }
126    }
127    
128     document.onkeydown=function(e)
129 {
130     keydown(e);
131  
132 } 
133 window.onload = function()//调用函数
134 { 
135     start();
136     setInterval(move,100);
137 //    drawtable();
138 }
原文地址:https://www.cnblogs.com/yizhiran/p/12290904.html