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

    技术2022-07-10  97

    <!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>

    运行结果

    Processed: 0.010, SQL: 12