这个贪食蛇关键地方在于数组,它的长度增加其实是数组的增长,就是数组的向前追加等操作,核心就是数组的操作。
完整代码:
Your browser does not support the HTML5 canvas tag. //r数组表示蛇 ; co表示蛇前进的方向,默认向下 ; e表示食物 var ctx = document.getElementById("myCanvas").getContext("2d"), r = [{ x: 10, y: 9 }, { x: 10, y: 8 }], co = 40, e = null; /*为了避免按键太快,使定时器没有反应过来,出现bug*/ var offOn=true; /*这是关卡的开关*/ var offOn01=true; /*关卡倒计开始值*/ var num=3; //循环,间隔为200毫秒 var timer=setInterval(doMove, 200); function doMove() { //给蛇加上阴影效果 ctx.shadowBlur = 20, ctx.shadowColor = "black"; //游戏是否已经结束 if (check(r[0], 0) || r[0].x = 24 || r[0].y = 24) return; //如果有食物,则根据蛇前进的方向判断是否吃到了食物,并且将蛇数组中最后一个元素换到首部 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())); //根据方向,重新设定蛇数组首元素的坐标,从而进行移动 (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); //清空屏幕 ctx.clearRect(0, 0, 240, 240); //如果有食物,则绘制食物 if (e) ctx.fillRect(e.x * 10, e.y * 10, 10, 10); //绘制蛇 for (var i = 0; i = 24 || r[0].y = 24) alert("game over\n你获得:" + (r.length - 2) + "分"); /*设置一个关卡,就是分数到10分后进入下一关,只设置一个关卡*/ if((r.length-2)==10){ if(offOn01){ clearInterval(timer); offOn01=false; var timer0=setInterval(function(){ if(num = 37 && event.keyCode
可以直接复制上面代码看效果;
上面的核心代码:
//如果有食物,则根据蛇前进的方向判断是否吃到了食物,并且将蛇数组中最后一个元素换到首部 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())); //根据方向,重新设定蛇数组首元素的坐标,从而进行移动 (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);
这是贪食蛇的核心代码,就是数组长度添加,和数组里的值怎么改变。
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did101618