贪吃蛇插件
贪吃蛇插件
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; } #myCanvas{ display:block; margin:50px auto; position:relative; } #myCanvas.active:after{ content:'结束了'; position:absolute; top:0; left:0; bottom:0; right:0; margin:auto; background:rgba(0,0,0,.6); } .jf{ text-align:center; } </style> </head> <body> <div class="tcs"> <canvas id="myCanvas"></canvas> <div class="jf"> <p>得分:<span id="num"></span></p> <button id="cxks">重新开始</button> </div> </div> <script> var c = document.getElementById('myCanvas'); var ctx = c.getContext('2d'); c.style.background = '#000'; var gsize = 20; //格子大小 var cWIDTH = 800; //画布宽度 var cHEIGHT = 800; //画布高度 var X,Y; //食物坐标 var sX = cWIDTH / 2 - gsize; var sY = cHEIGHT / 2; //蛇头坐标 var sLeng = 3; //初始蛇身长度 var sData = []; //蛇的每节坐标 var fx = 39; //默认前行方向 37-左 38-上 39-右 40-下 var num = 0; //积分 var game = 0; var numHTML = document.getElementById('num'); var cxks = document.getElementById('cxks'); c.width = cWIDTH; c.height = cHEIGHT; function xyxian(){ //遍历竖线 for(var i=0;i< cWIDTH / gsize;i++){ ctx.beginPath(); ctx.strokeStyle = '#fff'; ctx.moveTo(i*gsize , 0); ctx.lineTo(i*gsize , cHEIGHT); ctx.stroke(); } for(var i=0;i< cHEIGHT / gsize;i++){ ctx.beginPath(); ctx.strokeStyle = '#fff'; ctx.moveTo(0 , i*gsize); ctx.lineTo(cWIDTH , i*gsize); ctx.stroke(); } } xyxian(); function zbX(){ var XB = Math.floor(Math.random()*cWIDTH / gsize); return XB * gsize } function zbY(){ var YB = Math.floor(Math.random()*cHEIGHT / gsize); return YB * gsize } for(var i=0;i<sLeng;i++){ sData[i] = [sX-i*gsize,sY]; } function Sn(){ ctx.beginPath(); ctx.fillStyle = 'yellow'; for(var i=0;i<sLeng;i++){ ctx.fillRect(sData[i][0],sData[i][1],gsize,gsize); ctx.fill(); } ctx.beginPath(); for(var i=0;i<sLeng;i++){ if(i == 0){ ctx.fillStyle = 'yellow'; }else{ ctx.fillStyle = 'green'; } ctx.fillRect(sData[i][0]+1,sData[i][1]+1,gsize-2,gsize-2); ctx.fill(); } } Sn() //随机出现食物 function mathDian(){ X = zbX(); Y = zbY(); return X,Y; } mathDian(); function food(){ ctx.beginPath(); ctx.fillStyle = 'red'; ctx.fillRect(X, Y , gsize , gsize); ctx.fill(); } food(); cxks.onclick = function(){ num = 0; numHTML.innerHTML = num; fx = 39; if(game == 1){ sLeng = 3; sX = cWIDTH / 2 - gsize; sY = cHEIGHT / 2; //蛇头坐标 for(var i=0;i<sLeng;i++){ sData[i] = [sX-i*gsize,sY]; } set = setInterval(dsn,500); document.onkeydown=function(event){ ctx.clearRect(0,0,c.width,c.height); food(); xyxian(); var e = event || window.event || arguments.callee.caller.arguments[0]; var lastData = sData[0]; fx = e.keyCode; switch(e.keyCode){ case 37: sData.unshift([lastData[0] - gsize , lastData[1] ]); break; case 38: sData.unshift([lastData[0] , lastData[1] - gsize]); break; case 39: sData.unshift([lastData[0] + gsize , lastData[1]]); break; case 40: sData.unshift([lastData[0] , lastData[1] + gsize]); break; } xp(); up(); }; game = 0; }else{ num = 0; numHTML.innerHTML = num; fx = 39; for(var i=0;i<sLeng;i++){ sLeng = 3; sX = cWIDTH / 2 - gsize; sY = cHEIGHT / 2; //蛇头坐标 for(var i=0;i<sLeng;i++){ sData[i] = [sX-i*gsize,sY]; } } } } function xp(){ if(sData[0][0] == X && sData[0][1] == Y){ mathDian(); food(); sLeng++; num += 1; numHTML.innerHTML = num; }else{ ctx.clearRect(sData[sLeng-1][0], sData[sLeng-1][1], gsize, gsize); sData.pop(); } Sn(); } document.onkeydown=function(event){ ctx.clearRect(0,0,c.width,c.height); food(); xyxian(); var e = event || window.event || arguments.callee.caller.arguments[0]; var lastData = sData[0]; fx = e.keyCode; switch(e.keyCode){ case 37: sData.unshift([lastData[0] - gsize , lastData[1] ]); break; case 38: sData.unshift([lastData[0] , lastData[1] - gsize]); break; case 39: sData.unshift([lastData[0] + gsize , lastData[1]]); break; case 40: sData.unshift([lastData[0] , lastData[1] + gsize]); break; } xp(); up(); }; function dsn(){ ctx.clearRect(0,0,c.width,c.height); food(); xyxian(); var lastData = sData[0]; switch(fx){ case 37: sData.unshift([lastData[0] - gsize , lastData[1] ]); break; case 38: sData.unshift([lastData[0] , lastData[1] - gsize]); break; case 39: sData.unshift([lastData[0] + gsize , lastData[1]]); break; case 40: sData.unshift([lastData[0] , lastData[1] + gsize]); break; } xp(); up(); } var set = setInterval(dsn,500) function up(){ if(sData[0][0] >= cWIDTH || sData[0][0] < 0 || sData[0][1] >= cHEIGHT || sData[0][1] < 0){ alert('你死了,得分'+num); clearInterval(set); document.onkeydown=function(event){ return false; } game = 1; } for(i in sData){ if(sData[i][0] == sData[0][0] && sData[i][1] == sData[0][1] && i != 0){ alert('你死了,得分'+num); clearInterval(set); document.onkeydown=function(event){ return false; } game = 1; } } } </script> </body> </html>