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读取ASP设定的COOKIE
Feb 15 Javascript
学习YUI.Ext 第二天
Mar 10 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
Node.js中使用socket创建私聊和公聊聊天室
Nov 19 Javascript
理解Javascript图片预加载
Feb 23 Javascript
jquery form表单获取内容以及绑定数据
Feb 24 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
简单实现bootstrap选项卡效果
Feb 08 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
Feb 14 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
2013/02/25 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
Python复制文件操作实例详解
2015/11/10 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
美国校园市场:OCM
2017/06/08 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
土木工程师岗位职责
2013/11/24 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
班级课外活动总结
2014/07/09 职场文书
培训通知书模板
2015/04/17 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python