<!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;}</style>
</head><body><div id="main"><!-- 按钮 --><input class="btn" type="button" value="开始游戏" id="begin"><input class="btn" type="button" value="暂停游戏" id="pause"></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;}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();/* */}}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; //变量可以提升/* 第一部分 *//* 第一部分开始 */document.getElementById('begin').onclick = function() {console.log(222);clearInterval(timer);timer = setInterval(function() {snake.run();}, 300)}/*第一部分 暂停 */document.getElementById('pause').onclick = function() {clearInterval(timer);timer = setInterval(function() {}, 300)}</script>
</body></html>

运行结果

前端学习(1681):前端系列实战课程之让蛇动起来相关推荐

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

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

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

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

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

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

  4. 前端学习(1676):前端系列实战课程之贪吃蛇游戏设计

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

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

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

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

  7. 前端学习(1685):前端系列实战课程之设置难度

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

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

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

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

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

最新文章

  1. 项目感言--功能的模块化
  2. macOS NSTableView
  3. uniapp 微信小程序打包 vendor.js过大 导致打包超过2M
  4. 《SpringCloud超级入门》使用Eureka集群搭建《十三》
  5. qt widget 窗口句柄的问题
  6. 【重难点】【Java集合 04】ArrayDeque 的使用场景、ArrayBlockingQueue
  7. 简述DNS进行域名解析的原理
  8. Kubernetes 小白学习笔记(1)--基本概念1
  9. 第三章 ARM汇编语言程序设计——ARM
  10. Ubuntu18.04 wifi不稳定
  11. 计算机如何将两个磁盘合在一起,win10怎么把电脑自带的两个磁盘合并到一起
  12. C语言 用指针 逆序存放数组
  13. Gmail(以及Google其他服务)的可用IPV6地址【2013年01月12日测试可用】
  14. 软件工程导论复习之详细设计
  15. Oracle表归档,oracle数据库归档详解
  16. vim下区块的复制与黏贴
  17. VS 报错error C3872: “0xa0”: 此字符不允许在标识符中使用
  18. matlab乖离率计算,BIAS乖离率指标计算公式
  19. 2021安全范儿高校挑战赛ByteCTF线上赛部分Writeup
  20. Mysql数据库---约束类型_MySQL约束类型及举例介绍

热门文章

  1. Struts2学习笔记《二》
  2. 多态性——vptr和vtable
  3. 卡方检验python程序_Python从零开始第二章(1)卡方检验(python)
  4. java代码_Java 代码实现排序算法
  5. slqite3库查询数据处理方式_SQLite3命令操作大全
  6. Linux服务器的gou,开源跨平台移动项目Langou【简介】
  7. Exynos4412 内核移植(五)—— 驱动的移植
  8. MAC下secureCRT无法保存密码的解决方法
  9. 判断一个无符号整数是不是2的幂
  10. Windows与Linux下tftp服务的使用