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函数
Sep 08 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
Dec 12 Javascript
jquery each的几种常用的使用方法示例
Jan 21 Javascript
JavaScript AJAX之惰性载入函数
Aug 27 Javascript
Javascript常用字符串判断函数代码分享
Dec 08 Javascript
jQuery与getJson结合的用法实例
Aug 07 Javascript
JS实现图片高亮展示效果实例
Nov 24 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
基于ajax与msmq技术的消息推送功能实现代码
Dec 26 Javascript
angularJS开发注意事项
May 26 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
超简单的jquery的AJAX用法
2010/05/10 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
javascript基本算法汇总
2016/03/09 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
python字符串排序方法
2014/08/29 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
python如何判断IP地址合法性
2020/04/05 Python
Python matplotlib实时画图案例
2020/04/23 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
优秀医生事迹材料
2014/02/12 职场文书
文明村镇申报材料
2014/05/06 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
企业培训简报范文
2015/07/20 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
会计入职心得体会
2016/01/22 职场文书
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python