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的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
Dec 14 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
JavaScript中匿名、命名函数的性能测试
Sep 04 Javascript
深入分析node.js的异步API和其局限性
Sep 05 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
Jan 31 Javascript
layui table设置前台过滤转义等方法
Aug 17 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
简单说说如何使用vue-router插件的方法
Apr 08 Javascript
react MPA 多页配置详解
Oct 18 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 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
一个程序下载的管理程序(一)
2006/10/09 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
PHP中常用的转义函数
2014/02/28 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
详谈PHP编码转换问题
2015/07/28 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
JS 建立对象的方法
2007/04/21 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
Python占用的内存优化教程
2019/07/28 Python
快速创建python 虚拟环境
2020/11/28 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
实现向右循环移位
2014/07/31 面试题
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
就业推荐表自我鉴定
2013/10/29 职场文书
春节晚会主持词
2014/03/24 职场文书
英语教师个人工作总结
2015/02/09 职场文书