用html5中canvas标签写个贪吃蛇
2017-04-07 10:39
471 查看
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>沙舟狼客制作</title> <style type="text/css"> <!-- body{ margin:0 auto; background:#6699FF; width:960px; height:800px; } nav{ width:960px; height:50px; float:left; } canvas { border: thick solid #000000; width:500px; height:500px; float:left; } #score{ width:100px; height:500px; font-size:18px; font-weight:bold; float:left; } #score span{ color:#FF0000; } --> </style> </head> <body> <nav> 贪吃蛇(按键WSAD:分别是上下左右) </nav> <canvas id="canvas" width="500" height="500"> </canvas> <div id="score"> 得分:<span>0</span> </div> </body> </html>
<script> var ctx = document.getElementById("canvas").getContext("2d"); var scoreEl = document.getElementById("score"); //当前前第一结蛇头的位置 var x = 40; var y = 0; //速度 var speed = 10 ; //方向:1:up;2:down;3:left;4:right; var d = 4; //定义蛇身数组 var snakes = new Array(); //定义食物数组 var foods = new Array(); //记录分数 var score = 0; //snakes[0] = {x:x,y:y}; //初始化舍身长度 var len = 5; //初始化 function init(){ ctx.fillStyle = "#ff0000"; //画蛇神 for(var i = len-1;i>=0;i--){ snakes[len-1-i] = {x:i*10,y:0}; ctx.fillRect(snakes[len-1-i].x,snakes[len-1-i].y,10,10); } //花食物 foods[0] = {x:parseInt(Math.random()*490),y:parseInt(Math.random()*490)}; ctx.fillRect(foods[0].x,foods[0].y,10,10); } init(); print(); //键盘监听 function keydown(e){ switch(e.keyCode){ //上W case 87: if(d!=2){ d = 1; } break; //下S case 83: if(d!=1){ d = 2; } break; //左A case 65: if(d!=4){ d = 3; } break; //右D case 68: if(d!=3){ d = 4; } break; //测试 case 38: addSnake(); break; default: } } //画食物和社 function draw(_x,_y){ //alert("_x:"+_x+";_y:"+_y); ctx.clearRect(0,0,500,500); ctx.fillStyle="#996633"; ctx.fillRect(0,0,500,500); ctx.fillStyle="#FF0000"; //循环替代位置,从最后一个开始 for(var i = len-1;i>=1;i-- ){ //console.log(i); snakes[i].x = snakes[i-1].x; snakes[i].y = snakes[i-1].y; ctx.fillRect(snakes[i].x,snakes[i].y, 10, 10); } snakes[0].x = _x; snakes[0].y = _y; ctx.fillRect(_x, _y, 10, 10); ctx.fillStyle="#00FF00"; for(var i = 0;i<foods.length;i++){ ctx.fillRect(foods[i].x,foods[i].y,10,10); } //print(); } //1:up;2:down;3:left;4:right; function move(){ switch(d){ case 1: y = y - speed; if(y<0){ y = 490; } break; case 2: y = y + speed; if(y>490){ y = 0; } break; case 3: x = x-speed; if(x<0){ x = 490; } break; case 4: x = x + speed; if(x>490){ x = 0; } break; default: } draw(x,y); } function addSnake(){ snakes[len]= {x:snakes[len-1].x+10,y:snakes[len-1].y+10}; len = len + 1; } function createFood(){ var fx = parseInt(Math.random()*490); var fy = parseInt(Math.random()*490); if((Math.abs(fx-x)>=10)&&(Math.abs(fy-y)>=10)){ foods[foods.length] = {x:fx,y:fy}; return false; }else{ return true; } } function deleteFood(fIndex){ foods.splice(fIndex,1); } function checkHit(){ for(var i=0;i<foods.length;i++){ var fx = foods[i].x; var fy = foods[i].y; if((Math.abs(fx-x)<10)&&(Math.abs(fy-y)<10)){ addSnake(); deleteFood(i); while(createFood()){ } //createFood(); score +=10; scoreEl.innerHTML = "得分:<span>"+score+"</span>"; } } } setInterval("move()",50); setInterval("checkHit()",50); //setInterval("createFood()",5000); document.onkeydown = keydown; function print(){ var outString = ""; for(var i = 0;i<snakes.length;i++){ outString += i+":{x:"+snakes[i].x+",y:"+snakes[i].y+"};" } //alert(outString); console.log(outString); } </script>
代码注释很详细,希望对大家有所帮助,但是换行的<br/>标签出来,看着很不爽!
预览效果图:
大小: 23.7 KB
查看图片附件
相关文章推荐
- HTML5新标签<canvas>
- HTML5之Canvas标签简要学习
- HTML5新标签之Canvas
- 云标签,关键字图排版 html5 canvas版
- 使用HTML5的Canvas标签实现绘图板内拖拽元素
- [HTML5-Canvas] HTML5 <canvas> 标签
- HTML5中canvas使用技巧和布局标签介绍
- HTML5写了个贪吃蛇,1.0版。主要玩玩canvas画画和初体验Web存储-localStorage
- HTML5 的<canvas>标签
- HTML5的canvas标签
- [原创]基于html5新标签canvas写的一个小画板
- HTML5 canvas标签
- html5中canvas标签画图方法。
- HTML5中canvas标签加载图像的问题
- Html5新元素<canvas>标签画图注意事项
- 通过HTML5标签canvas绘制一个八卦图案
- 第四讲:使用html5中的canvas标签画出一个球在指定区域内的运动
- html5基础--canvas标签元素
- HTML5 canvas标签绘制正三角形 鼠标按下点为中间点,鼠标抬起点为其中一个顶点
- html5 贪吃蛇canvas小游戏