<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>游戏初始化界面</title><style>body {margin: 0;padding: 0;}#main {margin: 100px;}.btn {width: 100px;height: 40px;}.gtitle {font-size: 25px;font-weight: bold;}#gnum {color: red;}</style>
</head><body><div id="main"><!-- 按钮 --><h1>贪吃蛇游戏</h1><input class="btn" type="button" value="开始游戏" id="begin"><input class="btn" type="button" value="暂停游戏" id="pause"><span class="gtitle">第<span id="gnum">1</span>关</span></div><!-- 贪吃蛇游戏设计 --><script>var main = document.getElementById('main');/* 画布格子是否开启 */var showcanvas = true;/* atom 原子大小 xnum横向原子数量 ynum纵向原子数量 */function Map(atom, xnum, ynum) {this.atom = atom;this.xnum = xnum;this.ynum = ynum;//声明画布this.canvas = null;//第二部分 创建画布方法this.create = function() {this.canvas = document.createElement('div');this.canvas.style.cssText = 'position:relative;top:40px;border:1px solid red;background:#FAFAFA';this.canvas.style.width = this.atom * this.xnum + 'px'; //画布的宽this.canvas.style.height = this.atom * this.ynum + 'px'; //画布的宽main.appendChild(this.canvas);if (showcanvas) {for (var x = 0; x < xnum; x++) {for (var y = 0; y < ynum; y++) {var a = document.createElement('div');a.style.cssText = "border:1px solid yellow";a.style.width = this.atom + 'px';a.style.height = this.atom + 'px';a.style.backgroundColor = 'green';this.canvas.appendChild(a);a.style.position = 'absolute';a.style.left = x * this.atom + 'px';a.style.top = y * this.atom + 'px';}}}}}/*第四部分 创建蛇 */function Snake(map) {//设置宽度高度this.width = map.atom;this.height = map.atom;/* 蛇的方向 */this.direction = 'right';this.body = [{x: 2,y: 0}, //第一点{x: 1,y: 0}, //第二点{x: 0,y: 0} //第三点];//显示蛇this.display = function() {for (var i = 0; i < this.body.length; i++) {//当吃到食物时候 x==null 不能新建 不然会在00处新建一个if (this.body[i].x != null) {var s = document.createElement('div');//将蛇的节点保存到状态变量中 方便删除使用this.body[i].flag = s;/* console.log(1); *///设置蛇的样式s.style.width = this.width + 'px';s.style.height = this.height + 'px';s.style.backgroundColor = "rgb(" + Math.floor(Math.random() * 200) + "," +Math.floor(Math.random() * 200) + "," +Math.floor(Math.random() * 200) + ")"s.style.position = 'absolute';s.style.left = this.body[i].x * this.width + 'px';s.style.top = this.body[i].y * this.height + 'px';//添加到地图中map.canvas.appendChild(s);}}}/* 让蛇动起来 {x: 2,y: 0}, //第一点{x: 1,y: 0}, //第二点{x: 0,y: 0} //第四点 让蛇改变方向*/this.run = function() {for (var i = this.body.length - 1; i > 0; i--) {this.body[i].x = this.body[i - 1].x;this.body[i].y = this.body[i - 1].y;}//根据方向处理蛇头switch (this.direction) {case "left":this.body[0].x -= 1;break;case "right":this.body[0].x += 1;break;case "up":this.body[0].y -= 1;break;case "down":this.body[0].y += 1;break;}//判断蛇头吃到食物 蛇头坐标和食物坐标重合 第六部分if (this.body[0].x == food.x && this.body[0].y == food.y) {//蛇会加一个this.body.push({x: null,y: null,flag: null});//判断一下几倍if (this.body.length > l.slength) {l.set();}map.canvas.removeChild(food.flag);food = new Food(map);}//判断是否出界if (this.body[0].x < 0 || this.body[0].x > map.xnum - 1 || this.body[0].y < 0 || this.body[0].y > map.ynum - 1) {clearInterval(timer);alert("真笨啊,活活的撞墙了");restart(map, this);return false;}//判断是否和自己重合for (var i = 4; i < this.body.length; i++) {if (this.body[0].x == this.body[i].x && this.body[0].y == this.body[i].y) {clearInterval(timer);alert("真笨啊,活活的吃到自己了");restart(map, this);return false;}}/*       console.log(111); *//* this.body[0].x += 1; */for (var i = 0; i < this.body.length; i++) {//不等于空 就删除 当吃到食物的时候 flag等于空if (this.body[i].flag != null) {map.canvas.removeChild(this.body[i].flag);}}this.display();//给body加键盘事件 第五步 给蛇改变方向window.onkeydown = function(e) {var event = e || window.event;switch (event.keyCode) {case 38:if (snake.direction != "down") {snake.direction = "up";}break;case 40:if (snake.direction != "up") {snake.direction = "down";}break;case 37:if (snake.direction != "right") {snake.direction = "left";}break;case 39:if (snake.direction != "left") {snake.direction = "right";}break;}}/* */}}//重新开始游戏 第六部分function restart(map, snake) {for (var i = 0; i < snake.body.length; i++) {map.canvas.removeChild(snake.body[i].flag);}snake.body = [{x: 2,y: 0}, //第一点{x: 1,y: 0}, //第二点{x: 0,y: 0} //第三点];snake.direction = 'right';snake.display();map.canvas.removeChild(food.flag);food = new Food(map);}//创建级别function Level() {this.num = 1; //第几级别this.speek = 300; //速度加快this.slength = 8; //每个关的长度判断this.set = function() {this.num++;if (this.speek <= 50) {this.speek = 50;} else {this.speek -= 50;}//可以自己定义this.slength += 3;this.display();start();}this.display = function() {document.getElementById('gnum').innerHTML = this.num;}}var l = new Level();l.display();var map = new Map(20, 40, 20);//创建画布map.create();//构造食物var food = new Food(map);//构建蛇var snake = new Snake(map);snake.display();/* 第三部分 创建食物 map地图对象 */function Food(map) {this.width = map.atom;this.height = map.atom;this.bgcolor = "rgb(" + Math.floor(Math.random() * 200) + "," + Math.floor(Math.random() * 200) + "," +Math.floor(Math.random() * 200) + ")"this.x = Math.floor(Math.random() * map.xnum);this.y = Math.floor(Math.random() * map.ynum);//画出食物this.flag = document.createElement('div');this.flag.style.width = this.width + 'px';this.flag.style.height = this.height + 'px';this.flag.style.backgroundColor = this.bgcolor;this.flag.style.borderRadius = '50%';this.flag.style.position = 'absolute';this.flag.style.left = this.x * this.width + 'px';this.flag.style.top = this.y * this.height + 'px';map.canvas.appendChild(this.flag);}var timer; //变量可以提升/* 第一部分 */function start() {clearInterval(timer);timer = setInterval(function() {snake.run();}, l.speek)}/* 第一部分开始 */document.getElementById('begin').onclick = function() {start();}/*第一部分 暂停 */document.getElementById('pause').onclick = function() {clearInterval(timer);timer = setInterval(function() {}, 300)}</script>
</body></html>

运行结果

前端学习(1685):前端系列实战课程之设置难度相关推荐

  1. 2021年最新版Web前端学习路线图-前端小白入门必读-推荐

    2021年最新版Web前端学习路线图-前端小白入门必读-推荐 Hello,大家好,相信很多学习前端的小伙伴,会有很多的疑惑: 我要学习那些技术? 我要到哪里去学习这些技术呢? 学习这些技术的目的对就业 ...

  2. 顾川的前端学习笔记--前端开发基础

    阶段一前端开发基础 初始HTML 本阶段重难点 3.29小时40小节4个模块 CSS选择器 盒模型 CSS三大特性 浮动和清楚浮动 CSS四种定位 CSS进阶 CSS3 前端工程师需要会的PS取图 案 ...

  3. web前端学习之前端重构方案,来了解一下

    前端技术发展很快,很多项目面临前端部分重构,很开心可以让我进行这次项目前端的重构方案编写,在思考的同时参考了网上很多资料,希望本篇重构方案有一定的完整性,可以带给大家一些在面临重构时有用的东西,同时希 ...

  4. 前端学习(1684):前端系列实战课程之判断游戏结束

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  5. 前端学习(1683):前端系列实战课程之让蛇吃食物变长

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  6. 前端学习(1682):前端系列实战课程之让蛇改变方向

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  7. 前端学习(1681):前端系列实战课程之让蛇动起来

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  8. 前端学习(1680):前端系列实战课程之创建和显示蛇

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  9. 前端学习(1679):前端系列实战课程之为蛇创建食物对象

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

最新文章

  1. 《可穿戴创意设计:技术与时尚的融合》一一第2章 与可穿戴设备有关的故事...
  2. 汉字转拼音---PHP
  3. 手把手入门神经网络系列-2篇-有图有码(转)
  4. 20155317 王新玮 2016-2017-2 《Java程序设计》第5周学习总结
  5. 中期报告c语言,中期考核表汇报范本.doc
  6. Scale-up and Scale-out
  7. MySQL选择合适的数据类型
  8. ubuntu下配置nginx支持phpt(unix:/var/run/php5-fpm.sock failed (2: No such file or directory) )
  9. 腾讯联手联通推出车联网“网卡”,打“内容”+“流量”的组合拳...
  10. 算法导论随笔(十四):NP完全性之P问题、NP问题、NPC问题和NP难问题
  11. 数字孪生技术协助信息物理系统构建数字化城市
  12. BMS一体机 锂电池管理系统
  13. 单片机一键开关机硬件电路
  14. sangerbox平台使用(五)venn图的绘制
  15. 经典例题:判断给定数组是否已经排好序
  16. xmanager 修改linux ip,Linux配置XManager
  17. AbstractQueuedSynchronizer同步队列与Condition等待队列协同机制
  18. C++中find()函数用法
  19. Struts2 注解开发实现简单的增删改查,超详细教程
  20. (一)Activiti 数据库25张表——流程历史记录表25(ACT_EVT_LOG)

热门文章

  1. Netty4.x中文教程系列(二) Hello World !
  2. 面向对象程序设计的术语
  3. 事件处理机制--浏览器流程处理分析
  4. hdu 3074 线段树 OR 树状数组
  5. js分页--存储数据并进行分页
  6. 面试题整理(答案从网上找到后整理的)
  7. 从流水中倒推算出销量为多某值的日期
  8. linux 线程与进程 pid,linux下线程所属进程号问题
  9. python sum函数numpy_如何用numba加速python?
  10. tensorrt轻松部署高性能dnn推理_实战教程:TensorRT中递归神经网络的介绍(中文字幕)...