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 相关文章推荐
javascript中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
javascript创建和存储cookie示例
Jan 07 Javascript
JQuery中的事件及动画用法实例
Jan 26 Javascript
JavaScript插件化开发教程 (三)
Jan 27 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
Dec 25 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 Javascript
解决vue-cli中stylus无法使用的问题方法
Jun 19 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 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 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
js代码实现轮播图
2020/05/04 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
详解vue 组件注册
2020/11/20 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
基于Python __dict__与dir()的区别详解
2017/10/30 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
python 解决函数返回return的问题
2020/12/05 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
老公给老婆的保证书
2014/04/28 职场文书
演讲稿的写法
2014/05/19 职场文书
岗位职责说明书模板
2014/07/30 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书