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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
JavaScript 学习笔记一些小技巧
Mar 28 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
js脚本获取webform服务器控件的方法
May 16 Javascript
js实现背景图片感应鼠标变化的方法
Feb 28 Javascript
javascript日期格式化方法小结
Dec 17 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
js获取url页面id,也就是最后的数字文件名
Sep 25 Javascript
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
js获取div高度的代码
2008/08/09 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
python中enumerate函数遍历元素用法分析
2016/03/11 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
Python socket 套接字实现通信详解
2019/08/27 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
XML文档面试题
2015/08/05 面试题
远东集团网络工程师面试题
2014/10/20 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
运输服务质量承诺书
2014/03/27 职场文书
加强作风建设工作总结
2014/10/23 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
文明旅游倡议书
2015/04/28 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android