思路

1、先搭建整体布局样式
2、由于打地鼠游戏需要用到格子类型,所以会设计到表格table的使用
3、为了便于后面操作,需要把游戏中会用到的图片进行类名的命名,后面js部分就可以挂类来更改不同的表达效果
4、先获取游戏中会需要到的元素
5、渲染最高分数,通过本地储存的方法localStorage.getItem(),先获取本地数据,进行判断,如右数据,那最高分的元素就直接渲染这个数据,如果没有,分数则为0
6、设置鼠标在游戏中的变化效果,onmouseover移入,onmousedown按下和onmouseup松开,分别是三种不同的状态,具体根据需求来更改就可以了
7、封装渲染表格的函数,可自定义表格的行和列,利用双重for循环,外面循环成成行,里面循环生成列,注意一点,当每一行的列生成完成后,也就是里层循环完成后,需要拼接上当前行的结束标记,最后通过innerHTML渲染进之前我们html设定好的表格里
8、在封装函数需要记住的几点:每次渲染相当于游戏重新开始,那就需要在设定为当前分数归0开始,然后游戏结束提示也要清空
9、游戏开始,一般来讲都需要有一个按钮,当点击按钮后,游戏开始,所以在点击后需要调用前面封装的渲染函数。
10、通过计时器实现老鼠和炸弹几率在表格上跳动
11、需要获取到所有格子的一个数组类型,然后通过随机数得到某一个数字,范围就是0-格子的长度,通过遍历所有的格子,把类名全部清空,然后将得到随机格子添加之前Css设定的相应图片就可以了
12、下一步实现炸弹的出现几率,可以自定义设置一个范围内的随机数,用一个变量去与随机数中的某一个进行相等比较,如果相等了,在通过随机数得到某一个数字,范围就是0-格子的长度,通过遍历所有的格子,把类名全部清空,然后将得到随机格子添加之前Css设定的相应图片就可以了,和老鼠跳动同理
12、下一步就是打地鼠了,进行表格的点击事件,通过判断点击的格子的类型是否相同进行加分和游戏结束的判断,如果点击的是出现的老鼠,那就直接把击打后的老鼠样式直接更改类名实现,然后申明一个变量作为分数,每次++,并实时渲染到当前得分数
13、如果击打的炸弹,同理直接更改相应的类型实现效果,并渲染提示游戏结束
14、最后获取本地中的最高分,进行判断,如果获取到了值,就用当前分数和获取的分数进行比较,然后把分值大的在渲染到页面上,并储存进本地
15、如果没有获取到本地的数据,就直接把当前分值作为最高分渲染并储存,然后结束定时器
16、注意点:为了防止在游戏过程我们点击一次按钮就执行一次计时器,这样会导致熟读越来越快,所以在每次点击按钮是,都需要清除到上一次的计时器,然后重新开始
17、为了防止游戏结束后,如页面上还有老鼠,点击依然加分的情况,需要同一个变量来判断,起始值为true,在游戏结束时变为false,在每次点击时都需要进行判断,如果为true才能开始继续点击,并执行相应变化,否则无变化。

HTML部分

<div id="box"><!-- 开始按钮 --><div><input type="button" value="开始游戏" id="btn"></div><!-- 分数 --><div class="fraction"><p>分数:</p><span>0</span><p class="higt">历史最高分:</p><span>0</span></div><!-- 游戏 --><table><tbody></tbody></table><!-- 结束 --><h1></h1></div>

CSS部分

  body {background-color: rgba(178, 243, 140, 0.555);}#box {margin: 50px auto;width: 450px;height: 550px;text-align: center;}/* 表格样式 */table {border: 1px solid;border-collapse: collapse;margin-left: 20px;}/* 单元格样式 */td {width: 100px;height: 100px;border: 1px solid;}/* 分数样式 */.fraction {width: 400px;height: 50px;display: flex;margin-left: 40px;}/* 最高分样式 */.higt {margin-left: 200px;}/* 分数样式 */span {margin-top: 16px;margin-left: 16px;}/* 开始按钮样式 */#btn {width: 200px;height: 50px;background-color: rgb(101, 247, 198);border-radius: 10px;border: 0;}/* 老鼠图片 */.mouse {background: url("./img/05.png");background-size: 100%;}/* 死老鼠图片 */.die {background: url("./img/07.png");background-size: 100%;}/* 炸弹图片 */.bomb {background: url("./img/02.png");background-size: 100%;}/* 爆炸图片 */.blast {background: url("./img/01.png");background-size: 100%;}

JS部分

  const tbody = document.querySelector('tbody');//获取表格const spans = document.querySelectorAll('span');//获取span,统计分数const h1 = document.querySelector('h1');//游戏结束提示let time;//计时器let scort = 0;//得分let falg = true;//让游戏结束不可以点击//渲染分数if (localStorage.getItem('最高分')) {//判断本地储存是否有最高分,如果有就显示,没有就显示0spans[1].innerText = localStorage.getItem('最高分');} else {spans[1].innerText = 0;}//鼠标移入tbody.onmouseover = function () {this.style.cursor = 'url(./img/04.png),auto'}//鼠标按下 tbody.onmousedown = function () {this.style.cursor = 'url(./img/03.png),auto'}//鼠标松开tbody.onmouseup = function () {this.style.cursor = 'url(./img/04.png),auto'}//渲染表格function render() {// 组成棋盘let str = '';for (let i = 0; i < 4; i++) {str += '<tr>';for (let j = 0; j < 4; j++) {str += '<td></td>';}str += '</tr>';}tbody.innerHTML = str;// 所有内容归零scort = 0;spans[0].innerText = 0;h1.innerText = ``;}/* 点击开始按钮 */btn.addEventListener('click', function () {clearInterval(time);//点击一次就清除上一次的计时器render();//渲染表格  点击一次渲染一次,并清空上一次的内容let tds = document.querySelectorAll('td');//获取所有的Tdtime = setInterval(() => {let mi = random(tds.length - 1); // 随机一个下标给 td 出现老鼠,范围是td的个数let bi = random(1, 6);//在随机获取一个下标 出现炸弹for (let item of tds) {//清除每一次图片出现之前的上一次的图片item.className = '';}tds[mi].className = 'mouse';//给随机的一个出现老鼠if (bi == 5) { // 当随机下标为5就生成炸弹let boi = random(tds.length - 1); // 随机一个下标给 td 出现炸弹tds[boi].className = 'bomb';}}, 1000);})/* 点击打地鼠 */tbody.addEventListener('click', function (event) {if (falg) {//当状态为true才能点击if (event.target.className == 'mouse') { // 老鼠event.target.className = 'die';scort++;spans[0].innerText = scort;}if (event.target.className == 'bomb') { // 炸弹event.target.className = 'blast';// 显示为爆炸样式h1.innerText = `游戏结束!`;let str = localStorage.getItem('最高分');//获取最高分falg = false;//点击炸弹后把状态改为false,防止再次点击老鼠加分if (str) {//判断是否有最高分if (scort > str) {//最高分和当前分比较spans[1].innerText = scort;localStorage.setItem('最高分', scort);}} else {spans[1].innerText = scort;localStorage.setItem('最高分', scort);}clearInterval(time);}}})// 随机数function random(min, max) {if (!max) {[max, min] = [min, 0];}let number = parseInt(Math.random() * (max - min + 1)) + min;return number;}

JavaScript 中阶 打地鼠游戏(基础版)相关推荐

  1. 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图

    51单片机 普中51 打地鼠游戏 仿真 程序 流程图 51单片机 普中51 打地鼠游戏 仿真 程序 流程图 普中51-单核-A3&A4开发板原理图 用到数码管.LED.矩阵按键 描述: (1) ...

  2. 【轻聊前端】JavaScript中的数字游戏

    2022版idea永久试用(使用)30秒教你学会操作Java编程必备!,新手必备神器!不用破解 永久白嫖_哔哩哔哩_bilibili 数字,即本篇的主角Number,在程序的世界里能代表很多东西--状 ...

  3. k40游戏增强版服务器维护中,Redmi K40 游戏增强版发布,第四台 K40 出现了

    原标题:Redmi K40 游戏增强版发布,第四台 K40 出现了 今晚 Redmi 发布了旗下的新款游戏手机 -- Redmi K40 游戏增强版,这也是K40.K40 Pro.K40 Pro+ 之 ...

  4. javascript 模拟坦克大战游戏(html5版)

    一.总结关键点和遇到的问题 1.javascript中的继承,最好父类只提供方法共享,属性写到各自子类中,避免父类和子类的构造函数混杂. 2.prototype模拟继承的代码,应写在所有方法定义之前, ...

  5. html5 图片记忆游戏,30分钟完成JavaScript中的记忆游戏

    通过在30分钟内构建一个记忆游戏来学习JS,CSS和HTML! 本教程介绍了一些基本的关于HTML5,CSS3和JavaScript概念. 我们将讨论数据属性,定位,透视,转换,flexbox,事件处 ...

  6. JavaScript中的逗号操作符(基础使用和拓展用法)

    一.逗号操作符的基础用法 逗号操作符可以用来在一条语句中执行多个操作,如下所示: 在一条语句中同时声明多个变量是逗号操作符最常用的场景.不过,也可以使用逗号操作符来辅助 赋值.在赋值时使用逗号操作符分 ...

  7. HTML+JavaScript飞机大战小游戏简易版

    点击开始游戏后拖动鼠标在蓝色区域内即可操作飞机移动 打中敌方得分,被敌方碰撞则减分掉血 运用延时调用函数实现连续发射子弹 运用随机函数使敌方飞机在蓝图随机刷新 运用坐标判断子弹和敌方飞机距离,碰撞则消 ...

  8. Java实现斗地主(基础版)

    import java.util.*;public class game {private String size;private String color;private int idenx;pub ...

  9. 如何处理JavaScript中的事件处理(示例和全部)

    In this blog, I will try to make clear the fundamentals of the event handling mechanism in JavaScrip ...

  10. linux打地鼠游戏代码,JavaScript实现打地鼠小游戏

    一.实验说明 1. 环境介绍 本实验环境采用Ubuntu Linux桌面环境,实验中会用到桌面上的程序: Xfce终端: Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令 Fir ...

最新文章

  1. android bitmap 转drawable,android Drawable转换成Bitmap失败
  2. VSS 2005 客户端和服务器端配置总结
  3. 设备文件的创建mknod
  4. 2.Hadoop的学习(Ubuntu的目录及权限)
  5. js反序列化html编码,JavaScript实现的反序列化json字符串操作示例
  6. matlab读取fortran文件夹,怎样用fortran获取一个文件夹里的全部文件名?
  7. 我们为什么需要 SpringBoot?
  8. SpringBoot如何直接访问HTML页面
  9. 诺基亚手机新品发布定档 6 月 11 日!Nokia C20 Plus 即将到来
  10. ieee期刊的科技写作思路曹文平_科学网—怎样向IEEE期刊投稿* - 吴雄君的博文
  11. linux获取文件名最后一位,获取出文件最后一位是1 或者0 若果都是1 代表是正确的 如果有0代表错误...
  12. 数据治理将遇到哪些问题
  13. 学生考勤及行为管理系统_高校学生考勤管理系统
  14. Hexo的Next主题详细配置
  15. 2008网站服务器配置,08CMS网站Windows_2008服务器环境配置方法
  16. HashMap为什么线程不安全?
  17. 移动端页面底部导航被浏览器工具栏遮盖解决方法
  18. h5唤醒软键盘(数字键盘)
  19. c语言源程序自动评判系统,源程序的自动评判系统.PDF
  20. App逆向案例 X嘟牛 - Frida监听 WT-JS工具还原(一)

热门文章

  1. 2019开源BI软件排行榜
  2. redis3.0源码学习之可持久化化操作
  3. [I T]深圳唯冠与苹果达成和解协议后被指拖欠律师费遭起诉
  4. 路由器装linux系统,怎样在路由器上安装Linux / DD-WRT固件
  5. ssh远程安全访问路由器
  6. 计算机如何取消自动关机,电脑怎么设置自动关机及取消自动关机
  7. 解决IE当前脚本发生错误异常
  8. python有趣小程序春节祝福-Python自动回复微信好新年祝福
  9. 【周博磊】强化学习纲要 一至六讲笔记
  10. 计算机控制器cu的功能是,控制器cu的功能是