📖 地鼠随机出没与计时实现原理
地鼠随机出没,我们可以封装一个简单的随机函数,由于我们有9个坑,于是随机数卡在1-9:
function getRandomValue() {
var random_value = Math.floor(Math.random() * 9) + 1
return random_value
}
其中用到了Math.floor()函数和Math.random()函数,后面乘上n,代表[0 - n-1]的范围,由于我们需要1-9,因此是乘9再加1。
接下来是计时的原理,我们分为两个函数实现:setInterval()和setTimeout():
1️⃣ 首先,我们需要每隔一段时间,出现一只地鼠,于是setInterval()函数就是我们需要的,因为该函数可以实现每隔一段时间自动调用函数内设置的回调函数,于是我们可以这样写:
timer = setInterval(function () {
var random_value = getRandomValue()
var $dig = $(‘.dig’ + random_value)
var $img = $dig.children(“img”)
$img.attr(“src”, “…/src/img/地鼠.png”);
},1000}
上面的设置里,我们设置了每隔1000ms(1s),就产生一只老鼠。
2️⃣ 其次,我们需要让老鼠停留一会儿,这是自然的,否则怎么打地鼠,于是我们需要setTimeOut()函数:
setTimeout(function () {
$img.attr(“src”, “…/src/img/坑.png”);
}, 800)
上面的代码实现了每只老鼠停留800ms(0.8s)后消失,替换成坑洞的图片。
然后我要强调一下:我们设置给setTimeout()函数的时间一定要小于等于setInterval()函数的时间,因为如果大于,那么可能出现某个坑的老鼠还没消失的同时生成一个新老鼠的bug!!!
3️⃣ 最后是实现整体的计时,这个仍然是setInterval(),我们在函数体内声明一个计时变量,取值60,之后在setInterval()中每次减去1即可,当数值为0时,解除计时器:
var count = 60
var timer = null
timer = setInterval(function () {
count–;
if (count < 0) {
clearInterval(timer);
}
📖 计分实现原理
计分这部分其实不难实现,我们用一个循环,把每个img元素设置点击事件监听即可,但要注意判读img元素的src属性是"坑洞"、“地鼠” 还是 “小孩儿”,因为涉及到不同的分数机制:
for (let i = 1; i <= 9; i++) {
$(“.dig” + i).children(“img”).bind(“click”, function () {
if ($(“.dig” + i).children(“img”).attr(“src”) == “…/src/img/地鼠.png”) {
$(“.dig” + i).children(“img”).attr(“src”, “…/src/img/坑.png”);
current_score += 100;
$score.html(“当前得分:” + current_score)
}
else if ($(“.dig” + i).children(“img”).attr(“src”) == “…/src/img/小孩子.png”) {
$(“.dig” + i).children(“img”).attr(“src”, “…/src/img/坑.png”);
current_score -= 100;
$score.html(“当前得分:” + current_score)
}
})
}
最高得分就更不是问题了,我们设置一个全局变量,每一次在setInterval()的60s结束之后,把当前的分数与历史最高分数比较,并把较大的值赋值给历史最高分数即可:
var current_score = 0
var highest_score = 0
if (current_score > highest_score) {
highest_score = current_score;
}
current_score = 0
$score.html(“历史最高战绩:” + highest_score + “!”)
📖 双模式实现原理
最后是双模式,在用户点击开始游戏按钮时,我们加一个promp弹出框:
if ($btn.html() == “点我开始游戏”) {
var mode = prompt(“请选择游戏模式:简单/困难,\n其中困难模式有顽皮的孩子,不要误伤了他们!”, “简单”)
if (mode == “简单”) {
gameEasyMode();
$btn.html(“进行中…”);
}
else if (mode == “困难”) {
gameHardMode();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算