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 Base类 包含基本的方法
Jul 22 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
Jun 27 Javascript
javascript读取Xml文件做一个二级联动菜单示例
Mar 17 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
JavaScript实现数字数组正序排列的方法
Apr 06 Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 Javascript
angular4 如何在全局设置路由跳转动画的方法
Aug 30 Javascript
js判断输入框不能为空格或null值的实现方法
Mar 02 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
Sep 10 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 Javascript
如何vue使用el-table遍历循环表头和表体数据
Apr 26 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
PHP的面向对象编程
2006/10/09 PHP
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
CI框架的安全性分析
2016/05/18 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
Apache如何部署django项目
2017/05/21 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
django 单表操作实例详解
2019/07/30 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
2014年社区学雷锋活动总结
2014/03/09 职场文书
计算机毕业生求职信
2014/06/10 职场文书
钱学森观后感
2015/06/04 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang