[JavaScript]一个25行代码的贪吃蛇程序

先mark,稍后研究,JS代码只有17行!

 1 <!DOCTYPE html>
 2 <html>
 3 <body>
 4 <canvas >Your browser does not support the HTML5 canvas tag.</canvas>
 5 <script>
 6 var ctx=document.getElementById("myCanvas").getContext("2d"),r = [{x:10,y:9},{x:10,y:8}],co=40,e=null;
 7 ctx.shadowBlur=20,ctx.shadowColor="black";
 8 setInterval(function(){
 9 if(check(r[0],0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24)return;
10 e!=null&&((co==40&&r[0].x==e.x&&r[0].y+1==e.y)||(co==38&&r[0].x==e.x&&r[0].y-1==e.y)||(co==37&&r[0].x-1==e.x&&r[0].y==e.y)||(co==39&&r[0].x+1==e.x&&r[0].y==e.y))?(r.unshift(e),e=null,r.unshift(r.pop())):(r.unshift(r.pop()));
11 (co==40 || co==38)?(r[0].x=r[1].x,r[0].y=r[1].y+(co==40?1:-1)):(r[0].x=r[1].x+(co==39?1:-1),r[0].y=r[1].y);
12 ctx.clearRect(0,0,240,240);
13 if(e)ctx.fillRect(e.x*10,e.y*10,10,10);
14 for(var i=0;i<r.length;i++)ctx.fillRect(r[i].x*10,r[i].y*10,10,10);
15 while(e==null || check(e))e={y:(Math.random()*24 >>>0),x:(Math.random()*24 >>>0)};
16 if(check(r[0],0) || r[0].x < 0 || r[0].x >= 24 || r[0].y < 0 || r[0].y >= 24)alert("game over\nYou get ["+(r.length-2)+"]");
17 },100);
18 document.onkeyup = function(event){co=event.keyCode>=37 && event.keyCode<=40 && (Math.abs(event.keyCode-co) != 2)?event.keyCode:co;}
19 function check(e,j){
20 for(var i=0;i<r.length;i++)if(j!=i && r[i].x==e.x && r[i].y==e.y)return true;
21 return false;
22 }
23 </script>
24 </body>
25 </html>

不得不说,HTML5的出现,为各种实现创造了很多便利啊!