canvas贪吃蛇
来源:互联网 发布:监理工程师软件app 编辑:程序博客网 时间:2024/06/07 09:35
canvas贪吃蛇
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> body{ text-align: center; } #canvas{ box-shadow: 0 5px 40px black; } </style></head><body> <canvas id="canvas" width="800" height="500"></canvas></body><!--<script src="snake.js"></script>--><script> var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); //获取画板 var snake = { head:null, //蛇头 snakeArray:null ,//整蛇数组、包括蛇头 direction:"right"//蛇的运动方向,后期根据键盘来定 }; initSnake() ;//初始化 drawSnake() ;//绘制到页面上 var foot = randomCreateFoot(); //得到食物 draw(foot); //让蛇动起来 var t = setInterval(function () { context.clearRect(0,0,canvas.width,canvas.height); moveSnake() ;//移动蛇 drawSnake() ;//绘制到页面上 draw(foot) ; },500); //蛇移动 function moveSnake() { /* 蛇移动原理: * (1)创建一段,放到蛇头的位置。 * (2)将蛇头的位置,往前推进20px,到底往哪个方向推进,就需要根据当前按键盘的方向了。 * (3)如果吃到了食物,就不删除最后一节,否则删除删除最后一节 */ var snakeArray = snake.snakeArray; var modiy = createSectionObj(snake.head.x,snake.head.y,20,20,"gray"); snakeArray.splice(1,0,modiy); //修改蛇头 switch (snake.direction){ case "up" :{ snake.head.y = snake.head.y - 20; break; } case "down" :{ snake.head.y = snake.head.y + 20; break; } case "left" :{ snake.head.x = snake.head.x - 20; break; } case "right" :{ snake.head.x = snake.head.x + 20; break; } } if(isEat()){ foot = randomCreateFoot(); }else { snakeArray.pop(); } if(isGameOver()){ clearInterval(t); // setTimeout(function () { // context.clearRect(0,0,canvas.width,canvas.height); // },500); alert("game Over :"+snakeArray.length); } } //随机出现食物 function randomCreateFoot() { /* * 蛇的一块一块是宽度和高度是20,所以我们将canvas的宽度和高度分成多块, * 食物随机出现在某一块上 * * 既然是随机出现食物,有可能出现的位置刚好是在蛇身上。 * 所以,如果出现在蛇身上,需要重新生成 * * */ var widthRange = canvas.width / 20 - 1; var heightRange = canvas.height / 20 - 1; var x = Math.round(Math.random() * widthRange) * 20; var y = Math.round(Math.random() * heightRange) * 20; return createSectionObj(x,y,20,20,"yellow"); } //初始化 -默认蛇的长度是4 function initSnake() { var snakeArray = []; //数组的第一个作为蛇头 for(var i = 0;i < 4;i++){ var sectionObj = createSectionObj(20*i,0,20,20,"gray"); snakeArray.unshift(sectionObj); } //蛇头的颜色是红色的 var head = snakeArray[0]; head.color = "red"; //将两个后面常用的东西定为属性,方便后面调用 snake.head= head; snake.snakeArray = snakeArray; } //创建一节蛇对象 function createSectionObj(x,y,w,h,color) { return { x:x, y:y, w:w, h:h, color:color } } //判断是否吃到食物 function isEat() { if(foot.x == snake.head.x && foot.y == snake.head.y){ return true; }else { return false; } } //绘制蛇 function drawSnake() { var snakeArray = snake.snakeArray; for(var i = 0;i< snakeArray.length;i++){ var section = snakeArray[i]; draw(section) } } //绘制一节蛇 function draw(section) { context.beginPath(); context.fillStyle = section.color; context.rect(section.x,section.y,section.w,section.h); context.fill(); context.stroke(); } //判断游戏是否结束 function isGameOver() { /* * (1)头碰到墙壁 * (2)头碰到自己 * */ var canvasWidth = canvas.width; var canvasHeigh = canvas.height; var head = snake.head; if(head.x < 0 || head.y < 0 || head.x > canvasWidth || head.y > canvasHeigh ){ return true; } for (var i = 1;i<snake.snakeArray.length;i++){ var section = snake.snakeArray[i]; if(section.x == head.x && section.y == head.y){ return true; } } return false; } //根据键盘事件,判断蛇头的方向 document.addEventListener("keydown",function (e) { var keycode = e.keyCode; /* 40:下, * 38:上, * 37:左, * 39:右; */ //注意:如果原来蛇头是往右,不能直接向左,不能直接掉头 if(keycode == 40 && snake.direction != "up"){ snake.direction = "down"; }else if(keycode == 38 && snake.direction !="down"){ snake.direction = "up"; }else if(keycode == 39 && snake.direction !="left"){ snake.direction = "right"; }else if(keycode == 37 && snake.direction !="right"){ snake.direction = "left"; } e.preventDefault(); });</script></html>
阅读全文
0 0
- canvas的贪吃蛇
- HTML5+Canvas贪吃蛇
- Canvas贪吃蛇
- Canvas 贪吃蛇
- canvas贪吃蛇
- canvas贪吃蛇
- html5 贪吃蛇canvas小游戏
- 贪吃蛇 HTML5 Canvas代码
- 用canvas写贪吃蛇
- 贪吃蛇(canvas+javaScript)
- canvas+js 贪吃蛇实现
- canvas标签应用 简单"贪吃蛇"游戏
- HTML5 Canvas实现贪吃蛇(一)
- HTML5 Canvas实现贪吃蛇(二)
- 利用Canvas+js实现贪吃蛇(1)
- 利用Canvas+js实现贪吃蛇(2)
- 利用Canvas+js实现贪吃蛇(3)
- 利用Canvas+js实现贪吃蛇(4)
- Python实现微信好友签名词云的构建(itchat、jieba、wordcloud)
- 【图像处理】Python-Image 基本的图像处理操作
- 找出无序数组最小的K个数(基于快排,效率高)
- C++虚继承的概念
- Java——Collections工具类
- canvas贪吃蛇
- java设计模式(五)——适配器模式
- org.apache.commons.beanutils.ConversionException: No value specified for 'Date'
- Linu中configure/makefile的文章
- 并查集
- HYSBZ
- 10月4日 c语言 兔子繁殖问题:(Fibonacci 数列问题)
- Merge Sort(归并排序)
- 文章标题