小蜜蜂游戏(JS原生)
2021/9/18 23:37:14
本文主要是介绍小蜜蜂游戏(JS原生),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
点击查看代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } ul { list-style: none; } img { display: block; } .clearfix::after { content: ""; display: block; clear: both; } .play { width: 800px; height: 800px; background: black; margin: 30px auto; position: relative; } .play-btn { width: 100px; height: 50px; border: none; position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin: auto; } .play-score { color: white; font-size: 20px; } .play-air { width: 46px; height: 60px; background: url(./images/fj.png); position: absolute; left: 0; bottom: 0; } .play-bee-list { position: absolute; left: 10px; } .play-bee-item1, .play-bee-item2, .play-bee-item3 { width: 40px; height: 28px; float: left; } .play-bee-item1 { background: url(./images/mf1.png); } .play-bee-item2 { background: url(./images/mf2.png); } .play-bee-item3 { background: url(./images/mf3.png); } .bullet { position: absolute; background: white; width: 2px; height: 10px; } </style> </head> <body> <div class="play"> <button class="play-btn">开始游戏</button> <!-- <div class="play-score">积分:<span>0</span></div> <div class="play-air"></div> <ul class="play-bee-list clearfix"> <li class="play-bee-item1"></li> <li class="play-bee-item2"></li> <li class="play-bee-item3"></li> </ul> --> </div> <script> let play = document.querySelector('.play'); let playBtn = document.querySelector('.play-btn'); let playBeeList; let air; let score; //1.设计关卡 let gkNow = 0; // 0表示第一关 let gk = [ { beeMap: [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], cols: 10 }, { beeMap: [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], cols: 10 }, { beeMap: [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], cols: 7 } ]; //2.蜜蜂的数据 let beeData = [ { name: 1, style: 'play-bee-item1', blood: 1, speed: 5, score: 10 }, { name: 2, style: 'play-bee-item2', blood: 2, speed: 7, score: 20 }, { name: 3, style: 'play-bee-item3', blood: 3, speed: 10, score: 30 } ]; gameStart(); function gameStart() { // 3.开始游戏 playBtn.onclick = function () { this.remove(); createScore(); createBee(); moveBee(); oneBeeMove(); createAir(); handleAir(); }; } function createScore() { //4. 创建积分 score = document.createElement('div'); score.className = 'play-score'; score.innerHTML = '积分:<span>0</span>'; play.append(score); } function createBee() { //5. 创建小蜜蜂 if (playBeeList) { playBeeList.remove(); } playBeeList = document.createElement('ul'); playBeeList.className = 'play-bee-list clearfix'; let beeMap = gk[gkNow].beeMap; let cols = gk[gkNow].cols; for (let i = 0; i < beeMap.length; i++) { let li = document.createElement('li'); for (let j = 0; j < beeData.length; j++) { if (beeData[j].name == beeMap[i]) { li.className = beeData[j].style; li.blood = beeData[j].blood; li.score = beeData[j].score; li.speed = beeData[j].speed; } } playBeeList.append(li); } play.append(playBeeList); playBeeList.style.width = 40 * cols + 'px'; //6. 把浮动布局转成定位布局 -> 布局转换 let pos = []; let playBeeItems = playBeeList.querySelectorAll('li'); for (let i = 0; i < playBeeItems.length; i++) { pos.push({ x: playBeeItems[i].offsetLeft, y: playBeeItems[i].offsetTop }); } for (let i = 0; i < playBeeItems.length; i++) { playBeeItems[i].style.position = 'absolute'; playBeeItems[i].style.left = pos[i].x + 'px'; playBeeItems[i].style.top = pos[i].y + 'px'; } } function moveBee() { // 7.整体移动小蜜蜂 let speedX = 10; let speedY = 15; setInterval(function () { let L = playBeeList.offsetLeft; if (L <= 0 || L >= play.offsetWidth - playBeeList.offsetWidth) { speedX *= -1; playBeeList.style.top = playBeeList.offsetTop + speedY + 'px'; } playBeeList.style.left = L + speedX + 'px'; }, 200); } function createAir() { //8. 创建飞机 air = document.createElement('div'); air.className = 'play-air'; play.append(air); air.style.left = (play.offsetWidth - air.offsetWidth) / 2 + 'px'; } function handleAir() { // 9.操作飞机 let timer; let speed = 10; document.onkeydown = function (ev) { if (ev.keyCode == 37 || ev.keyCode == 39) { if (!timer) { timer = setInterval(function () { if (ev.keyCode == 37) { //← let L = air.offsetLeft - speed; if (L < 0) { L = 0; } air.style.left = L + 'px'; } else if (ev.keyCode == 39) { // → let L = air.offsetLeft + speed; if (L > play.offsetWidth - air.offsetWidth) { L = play.offsetWidth - air.offsetWidth; } air.style.left = L + 'px'; } }, 16); } } }; document.onkeyup = function (ev) { if (ev.keyCode == 37 || ev.keyCode == 39) { clearInterval(timer); timer = null; } if (ev.keyCode == 32) { // 空格 createBullet(); } }; } function createBullet() { // 10.创建子弹 let bullet = document.createElement('div'); bullet.className = 'bullet'; play.append(bullet); bullet.style.left = air.offsetLeft + (air.offsetWidth - bullet.offsetWidth) / 2 + 'px'; bullet.style.top = air.offsetTop - bullet.offsetHeight + 'px'; moveBullet(bullet); } function moveBullet(bullet) { //11. 移动子弹 //bullet let speedY = -5; let timer = setInterval(function () { var T = bullet.offsetTop + speedY; if (T < - bullet.offsetHeight) { //判断子弹是否出界 clearInterval(timer); bullet.remove(); } else { bullet.style.top = T + 'px'; // 12.判断子弹是否跟小蜜蜂碰撞 let playBeeItems = playBeeList.querySelectorAll('li'); for (let i = 0; i < playBeeItems.length; i++) { if (pz(bullet, playBeeItems[i])) { if (playBeeItems[i].blood == 1) { let span = score.querySelector('span'); span.innerHTML = Number(span.innerHTML) + playBeeItems[i].score; playBeeItems[i].remove(); } else { playBeeItems[i].blood--; } bullet.remove(); } } //13. 是否进入下一关 if (playBeeItems.length == 0) { gkNow++; createBee(); } } }, 16); } function oneBeeMove() { //14. 单兵作战 setInterval(function () { let playBeeItems = playBeeList.querySelectorAll('li'); let nowBee = playBeeItems[Math.floor(Math.random() * playBeeItems.length)]; setInterval(function () { var a = air.getBoundingClientRect().left - nowBee.getBoundingClientRect().left; var b = air.getBoundingClientRect().top - nowBee.getBoundingClientRect().top; var c = Math.sqrt(a * a + b * b); var speedX = a / c * nowBee.speed; var speedY = b / c * nowBee.speed; nowBee.style.top = nowBee.offsetTop + speedY + 'px'; nowBee.style.left = nowBee.offsetLeft + speedX + 'px'; if (pz(air, nowBee)) { location.reload(); } }, 16); }, 3000); } function pz(elem1, elem2) { var L1 = elem1.getBoundingClientRect().left; var R1 = elem1.getBoundingClientRect().right; var T1 = elem1.getBoundingClientRect().top; var B1 = elem1.getBoundingClientRect().bottom; var L2 = elem2.getBoundingClientRect().left; var R2 = elem2.getBoundingClientRect().right; var T2 = elem2.getBoundingClientRect().top; var B2 = elem2.getBoundingClientRect().bottom; if (R1 < L2 || L1 > R2 || B1 < T2 || T1 > B2) { // 碰不到的情况 return false; } else { // 碰到的情况 return true; } } </script> </body> </html>
这篇关于小蜜蜂游戏(JS原生)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程