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 相关文章推荐
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
函数window.open实现关闭所有的子窗口
Aug 03 Javascript
JavaScript中利用各种循环进行遍历的方式总结
Nov 10 Javascript
JavaScript检查子字符串是否在字符串中的方法
Feb 03 Javascript
js实现文字截断功能
Sep 14 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
jQuery 选择符详细介绍及整理
Dec 02 Javascript
vue axios 表单提交上传图片的实例
Mar 16 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
node+multer实现图片上传的示例代码
Feb 18 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 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
解析dedecms空间迁移步骤详解
2013/05/15 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
Javascript面向对象编程
2012/03/18 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
Python高效编程技巧
2013/01/07 Python
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
施工安全责任书
2014/04/14 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
环卫处个人工作总结
2015/03/04 职场文书
求职信格式范文
2015/03/19 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers