javascript实现贪吃蛇游戏(娱乐版)


Posted in Javascript onAugust 17, 2020

本文实例为大家分享了javascript实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

一共三个对象map,snake,food,代表的含义如名字。snake和food其实就是数组,表示位置,map来画图、判断得分、失败等等,直接上代码,可直接运行。

<!doctype html>
<html>

<body>
 <canvas id="map" width="400" height="400" style="background:Black"></canvas>
 <h1>Score:</h1>
 <h2 id="score">0</h2>

 <script>
 //地图
 function Map() {
 this.field = document.getElementById("map").getContext("2d"); //画布
 this.draw = function (something) { //画蛇或者食物
 this.field.fillStyle = something.color;
 var position;
 for (position in something.positions) {
 this.field.fillRect(something.positions[position][0], something.positions[position][1], 20, 20);
 }
 }
 this.clear = function () { //清除画布
 this.field.clearRect(0, 0, 400, 400);
 }
 this.judge = function (snake, food) { //判断状态(得分、失败、普通)
 var snakeHeadX = snake.positions[0][0];
 var snakeHeadY = snake.positions[0][1];
 var foodX = food.positions[0][0];
 var foodY = food.positions[0][1];
 if ((snakeHeadX == foodX) && (snakeHeadY == foodY)) { //吃食物
 snake.positions.unshift([foodX, foodY]);
 food.positions[0] = [Math.floor(Math.random() * 20) * 20, Math.floor(Math.random() * 20) * 20];
 this.clear();
 this.draw(food);
 this.draw(snake);
 var score = document.getElementById('score');
 score.innerHTML = (Number(score.innerHTML)+1).toString();
 }
 else if ((snakeHeadX+20 > 400) || (snakeHeadX < 0) || (snakeHeadY+20 > 400) || (snakeHeadY < 0)) {
 alert('GIME OVER!'); //撞墙
 }
 else {
 this.clear();
 this.draw(food);
 this.draw(snake);
 }
 }
 }
 
 //蛇
 function Snake() {
 this.positions = [[40 + 20, 40], [40, 40], [40 - 20, 40]]; //蛇的躯干
 this.color = "Yellow";
 this.direction = [1,0]; //蛇头方向
 this.move = function () { //移动
 this.positions.unshift([this.positions[0][0] + this.direction[0] * 20, this.positions[0][1] + this.direction[1] * 20]);
 this.positions.pop();
 }
 this.obeyOrders = function (snake = this) { //等待键盘上下左右
 document.onkeydown = function (event) {
 var e = event || window.event || arguments.callee.caller.arguments[0];
 var order = e.keyCode;
 console.log(snake.direction);
 switch (order) {
 case 37:
 snake.direction[0] = -1;
 snake.direction[1] = 0;
 break;
 case 38:
 snake.direction[1] = -1;
 snake.direction[0] = 0;
 break;
 case 39:
 snake.direction[0] = 1;
 snake.direction[1] = 0;
 break;
 case 40:
 snake.direction[1] = 1;
 snake.direction[0] = 0;
 break;
 default:
 ;
 }
 };
 }
 }

 //食物
 function Food() {
 this.positions = [[Math.floor(Math.random() * 20) * 20, Math.floor(Math.random() * 20) * 20]]; //随机位置
 this.color = 'Red';
 }


 //开始执行
 (function () {

 var map = new Map();
 var snake = new Snake();
 var food = new Food();
 map.draw(snake);
 map.draw(food);
 snake.obeyOrders();
 var t=0;
 var interval = setInterval(function () { //每0.5s走一步
 map.judge(snake, food);
 snake.move();
 }, 500);
 })()
 </script>


</body>

</html>

效果如图

javascript实现贪吃蛇游戏(娱乐版)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 图片预加载 自动等比例缩放插件
Dec 25 Javascript
js function使用心得
May 10 Javascript
jquery获取焦点和失去焦点事件代码
Apr 21 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
JQuery中$.ajax()方法参数详解及应用
Dec 12 Javascript
jQuery中操控hidden、disable等无值属性的方法
Jan 06 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
js随机生成字母数字组合的字符串 随机动画数字
Sep 02 Javascript
Javascript 普通函数和构造函数的区别
Nov 05 Javascript
微信小程序实现写入读取缓存详解
Aug 30 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
关于JavaScript轮播图的实现
Nov 20 Javascript
three.js着色器材质的内置变量示例详解
Aug 16 #Javascript
Angular进行简单单元测试的实现方法实例
Aug 16 #Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 #Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 #Javascript
Vue使用axios引起的后台session不同操作
Aug 14 #Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 #Javascript
vue项目在线上服务器访问失败原因分析
Aug 14 #Javascript
You might like
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
php创建图像具体步骤
2017/03/13 PHP
JavaScript 变量作用域分析
2011/07/04 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
总结js函数相关知识点
2018/02/27 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
python运行时强制刷新缓冲区的方法
2019/01/14 Python
对python函数签名的方法详解
2019/01/22 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
法律专业实习鉴定
2013/12/22 职场文书
教职工代表大会主持词
2014/04/01 职场文书
合作协议书怎么写
2014/04/18 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
学生安全责任书范本
2014/07/24 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
店面出租协议书范本
2014/11/28 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书