JS之打地鼠案例

需要素材的同学可以私信我
效果图:

请添加图片描述

上代码:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<style>
		* {
			margin: 0;
			padding: 0;
		}
		.box {
			position: relative;
			width: 320px;
			height: 480px;
			background: url("img/game_bg.jpg") no-repeat;
			margin: 100px auto;
		}
		.score {
			position: absolute;
			color: white;
			font-size: 20px;
			top: 2.2%;
			left: 18%;
		}
		.time {
			position: absolute;
			background: url("img/progress.png");
			top: 66px;
			left: 62px;
			width: 180px;
			height: 16px;
		}
		.stop1 {
			width: 50px;
			height: 50px;
			background: url("img/stop.png") no-repeat center;
			position: absolute;
			top: 100px;
			left: 10px;
		}
		.start,
		.reset {
			width: 100px;
			height: 100px;
			background-color: pink;
			opacity: 0.4;
			border-radius: 50px;
			text-align: center;
			position: absolute;
			top: 130px;
			left: 0;
			bottom: 0;
			right: 0;
			margin: auto;
			font-size: 20px;
			cursor: pointer;
		}
		.gameOver {
			position: absolute;
			top: 0;
			text-align: center;
			color: white;
			font-size: 20px;
			width: 100%;
			height: 480px;
			line-height: 480px;
			background-color: black;
			opacity: 0.3;
		}
		.gameOver span {
			color: red;
			font-size: 25px;
		}
		.gameOver,
		.reset,
		.stop1 {
			display: none;
		}
		.box img {
			position: absolute;
		}
	</style>
</head>

<body>
	<!-- 大盒子 -->
	<div class="box">
		<!-- 得分 -->
		<div class="score">0</div>
		<!-- 时间流逝条 -->
		<div class="time"></div>
		<!-- 暂停按钮 -->
		<div class="stop1"></div>
		<!-- 开始 -->
		<div class="start"><span style="z-index: 1;position: relative;left: 0px;top: 35px;color: red;">点击开始</span>
		</div>
		<!-- 游戏结束 -->
		<div class="gameOver">
			游戏结束最终得分:<span>0</span>
		</div>
		<!-- 重新开始 -->
		<div class="reset"><span style="z-index: 1;position: relative;left: 0px;top: 35px;color: red;">重新开始</span>
		</div>
		<!-- <img src="img/h5.png" alt=""> -->
	</div>
</body>
<script>
	// 页面初始化
	window.onload = function () {
		// 获取大盒子
		var box = document.querySelector(".box")
		// 获取分数
		var score = document.querySelector(".score")
		// 获取进度条
		var timeBox = document.querySelector(".time")
		// 获取暂停按钮
		var stopBtn = document.querySelector(".stop1")
		// 获取开始按钮
		var startBtn = document.querySelector(".start")
		// 获取重新开始按钮
		var resetBox = document.querySelector(".reset")
		// 获取gameover
		var gameOverbox = document.querySelector(".gameOver")
		// 得分
		var s = 0
		// 计时器
		var timer
		// 游戏状态,t代表开始,f代表暂停
		var state = true
		// 定义9个地洞的坐标值
		wolf_position = [{
			// 最上面的洞
			top: "115px",
			left: "95px"
		},
		{
			// 第二排第一个
			top: "160px",
			left: "16px"
		},
		{
			// 第二排第二个
			top: "143px",
			left: "185px"
		},
		{
			// 第二列第二个
			top: "194px",
			left: "101px"
		},
		{
			// 第三排第一个
			top: "220px",
			left: "14px"
		},
		{
			// 第四排第一个
			top: "293px",
			left: "28px"
		},
		{
			// 第三排第三个
			top: "212px",
			left: "197px"
		},
		{
			// 第二列第三个
			top: "274px",
			left: "117px"
		},
		{
			// 第四排第三个
			top: "296px",
			left: "205px"
		}
		]
		// 进度条初始宽度
		var timeWidth = timeBox.offsetWidth
		// console.log(timeWidth);
		// 点击开始按钮的时候
		startBtn.onclick = function () {
			// 隐藏开始按钮
			startBtn.style.display = "none"
			// 暂停按钮显示
			stopBtn.style.display = "block"
			// 进度条开始计时
			progressStart()
			// 游戏开始出现狼
			showWolf()
			// 游戏开始出现
			addWolf()
		}
		// 进度条计时
		function progressStart() {
			timer = setInterval(function () {
				timeBox.style.width = timeWidth + "px"
				timeWidth--
				if (timeWidth <= 0) {
					// 小于180时结束游戏
					clearInterval(timer)
					// alert("游戏结束")
					// 调用游戏结束
					gameOver()
				}
			}, 100)
		}
		// 游戏结束
		function gameOver() {
			// 重新开始按钮出现
			resetBox.style.display = "block"
			// 游戏结束标语出现
			gameOverbox.style.display = "block"
			// 游戏结束狼停止出现
			clearInterval(wolfTimer)
			gameOverbox.innerHTML = "游戏结束最终得分:" + s
			resetBtn()
		}
		// 暂停游戏
		stopBtn.onclick = function () {
			if (state) {
				// 清除定时器
				clearInterval(timer)
				// 停止时暂停生产狼
				clearInterval(wolfTimer)
				// 换成开始按钮
				this.style.backgroundImage = "url(img/start.png)"
				// 变成false
				state = false
			} else {
				// 启用定时器,调用
				progressStart()
				// 开始时显示狼
				showWolf()
				this.style.backgroundImage = "url(img/stop.png)"
				state = true
			}
		}
		// 灰太狼
		// 判断是否重复
		var nub = -1
		// 灰太狼轮播
		var wolfLuntimer
		// 狼下降
		var downWolftimer
		var wolfDowntimer
		// 狼的定时器
		var wolfTimer

		function addWolf() {
			// 创建节点
			var wolf = document.createElement("img")
			// 随机数0-8
			var index = Math.floor(Math.random() * 9)
			// 如果上一个重复重新赋值
			while (index == nub) {
				index = Math.floor(Math.random() * 9)
			}
			nub = index
			console.log(index);
			// 坑位
			console.log(wolf_position[index]);
			// 赋值
			wolf.style.top = wolf_position[index].top
			wolf.style.left = wolf_position[index].left
			// 添加到box后面
			box.appendChild(wolf)
			// 随机出来的是小灰灰还是灰太狼
			var n = Math.floor(Math.random() * 10)
			c = ""
			if (n >= 3) {
				c = "h"
			} else {
				c = "x"
			}
			// 定义狼的下标轮播效果
			var Wolfindex = 0
			// 狼轮播
			// addWolf(c)
			wolfLuntimer = setInterval(function () {
				// 轮播
				// addWolf(c)
				wolf.src = "img/" + c + Wolfindex + ".png"
				Wolfindex++
				if (Wolfindex > 5) {
					clearInterval(wolfLuntimer)
				}
			}, 50)
			// 定义下标为5
			var downIndex = 5
			// 让狼下降,要延迟下降
			wolfDowntimer = setTimeout(function () {
				// 延时器里执行定时器
				downWolftimer = setInterval(function () {
					wolf.src = "img/" + c + downIndex + ".png"
					downIndex--
					if (downIndex == -1) {
						// downIndex = 5
						// clearInterval(downWolftimer)
						// clearTimeout(wolfDowntimer)
						// 移除元素
						box.removeChild(wolf)
					}
				}, 50)
			}, 1000)
			// 传入参数
			wolfScore(wolf)
		}
		// 批量显示
		function showWolf() {
			wolfTimer = setInterval(function () {
				addWolf()
			}, 1300)
		}
		// 不能连续击打
		var strike = 0
		// 打狼得分
		function wolfScore(wolf) {
			wolf.onclick = function () {
				if (strike == 0) {
					strike = 1
					console.log(1);
					// 打击前关闭下降动画
					clearTimeout(wolfDowntimer)
					clearInterval(downWolftimer)
					// 判断是小灰灰还是灰太狼
					if (c == "h") {
						s += 10
					} else {
						s -= 10
					}
					score.innerHTML = s
					// 如果小于0 不扣不变为负数
					if (score.innerHTML < 0) {
						score.innerHTML = 0
					}
					var koindex = 5
					// 被打中的动画
					wolf_ko = setInterval(function () {
						wolf.src = "img/" + c + koindex + ".png"
						koindex++
						if (koindex > 9) {
							clearInterval(wolf_ko)
							box.removeChild(wolf)
							strike = 0
						}
					}, 50)
				}
			}
		}
		// 重新开始
		function resetBtn() {
			// 隐藏当前按钮
			resetBox.onclick = function () {
				// 隐藏当前按钮
				this.style.display = "none"
				gameOverbox.style.display = "none"
				// 进度条填满
				timeWidth = 180
				timeBox.style.width = timeWidth + "px"
				// 调用进度条
				progressStart()
				// 重新赋值得分
				s = 0
				score.innerHTML = s
				showWolf()
				wolfScore()
			}
		}
	}
</script>
</html>

感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/345585.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略

关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 读写分离 分布式数据库的…

【学网攻】 第(4)节 -- 交换机划分Vlan

文章目录 【学网攻】 第(1)节 -- 认识网络 【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了世界各地的人们&#xff0c;让信息和资源得以自由流动。随着互联网的发展&am…

大模型微调实战笔记

大模型三要素 1.算法&#xff1a;模型结构&#xff0c;训练方法 2.数据&#xff1a;数据和模型效果之间的关系&#xff0c;token分词方法 3.算力&#xff1a;英伟达GPU&#xff0c;模型量化 基于大模型对话的系统架构 基于Lora的模型训练最好用&#xff0c;成本低好上手 提…

vue3和vite项目在scss中因为本地图片,不用加~

看了很多文章说要加~&#xff0c;真的好坑哦&#xff0c;我的加了~反而出不来了&#xff1a; 304 Not Modified 所以需要去掉~&#xff1a; /* 默认dark主题 */ :root[themered] {--bg-color: #0d1117;--text-color: #f0f6fc;--backImg: url(/assets/images/redBg.png); }/* …

代码随想录算法训练营第四十二天|01背包问题、01背包问题(滚动数组)、416. 分割等和子集

题目&#xff1a;01背包问题 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:背包问题 题目链接&#xff1a;卡码题目链接 图释&#xff1a; //二维dp数组实现 #include <bits/stdc.h> using namespace std;int n, bagweight;// bagweight代表行李箱空…

【Java并发】聊聊Future如何提升商品查询速度

java中可以通过new thread、实现runnable来进行实现线程。但是唯一的缺点是没有返回值、以及抛出异常&#xff0c;而callable就可以解决这个问题。通过配合使用futuretask来进行使用。 并且Future提供了对任务的操作&#xff0c;取消&#xff0c;查询是否完成&#xff0c;获取结…

SpringBoot整合ElasticSearch实现分页查询

本文使用SpringBoot整合ElasticSearch实现分页查询 文章目录 环境准备分页查询方式一方式二 本文小结 环境准备 还是继续使用spring-boot-starter-data-elasticsearch来实现分页查询操作 <!-- spring-boot-starter-data-elasticsearch--> <dependency><groupId&…

QT解析json数据

QT解析json数据 头文件jsonObjectToMapparseJson结果 头文件 #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QJsonValue>jsonObjectToMap 将Json对象转换成map QVariantMap MainWindow…

数据分析-Pandas如何用图把数据展示出来

数据分析-Pandas如何用图把数据展示出来 俗话说&#xff0c;一图胜千语&#xff0c;对人类而言一串数据很难立即洞察出什么&#xff0c;但如果展示图就能一眼看出来门道。数据整理后&#xff0c;如何画图&#xff0c;画出好的图在数据分析中成为关键的一环。 数据表&#xff…

详解JavaScript异步编程之Promise

一、前言 JavaScript是⼀⻔典型的异步编程脚本语⾔&#xff0c;在编程过程中会⼤量的出现异步代码的编写&#xff0c;在JS的整个发展历程中&#xff0c;对异步编程的处理⽅式经历了很多个时代&#xff0c;其中最典型也是现今使⽤最⼴泛的时代&#xff0c;就是Promise对象处理异…

当软件开发具备了低代码的开发能力,难以想象会有多“香”

一、前言 低代码开发平台&#xff0c;一个号称能在几分钟的时间里开发出一套公司内部都可使用的应用系统开发工具。 很多人或许都隐隐听说过低代码&#xff0c;因为低代码不仅远名国外&#xff0c;国内的腾讯、阿里、华为、网易、百度等科技巨头也纷纷入局。 那么市面上都有哪些…

全桥RLC模态图具体分析

T0时刻&#xff0c;Q6,Q7,Q1.Q4开通&#xff0c;驱动为高电平&#xff0c;励磁电流线性上升,但是lm电流在to是为负电流&#xff0c;这时刻有给副边提供能量&#xff0c;Ip电流开始上升&#xff0c;这个时候给副边的电流也是从0开始上升,这个能量由励磁电感提供&#xff0c;Co给…

HCIA——27E-mall、MIME;POP3、IMAP的选择,解答

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

整理了一下常用的LaTeX数学公式语法,未完待续

为了方便对应&#xff0c;后面会拆一下 公式代码放入LaTeX编译环境中时&#xff0c;两边需要加入$$: $$公式代码$$ 1&#xff0c;分解示例 L^{A}T_{E}X\,2_{\epsilon} c^{2}a^{2}b^{2} \tau\phi \cos2\pi1 f\, \,a^{x}\,\,b \heartsuit \cos^{2}\theta \sin^{2}\theta 1.0…

Nodejs前端学习Day1

妈的&#xff0c;学vue3需要15.0以上的nodejs 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript可以在浏览器中被执行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 妈的&#xff0c;学vue3需要15.0以上的nodejs 一、学习目标 二…

CNN经典网络模型(五):ResNet简介及代码实现(PyTorch超详细注释版)

目录 一、开发背景 二、网络结构 三、模型特点 四、代码实现 1. model.py 2. train.py 3. predict.py 4. spilit_data.py 五、参考内容 一、开发背景 残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的&#xff0c; 斩获2015年ImageNet竞赛…

SE通道注意力机制模块

简介 论文原址&#xff1a;https://arxiv.org/pdf/1709.01507.pdf 在深度学习领域&#xff0c;提升模型的表征能力一直是一个关键的研究方向。SE&#xff08;Squeeze-and-Excitation&#xff09;模块是一种引入通道注意力机制的方法&#xff0c;旨在让神经网络更加关注对当前…

我每天如何使用 ChatGPT

我们都清楚互联网的运作方式——充斥着各种“爆款观点”&#xff0c;极端分裂的意见&#xff0c;恶搞和无知现象屡见不鲜。 最近&#xff0c;大家对于人工智能&#xff08;AI&#xff09;特别是大语言模型&#xff08;LLMs&#xff09;和生成式 AI&#xff08;GenAI&#xff0…

【趣味游戏-08】20240123点兵点将点到谁就是谁(列表倒置reverse)

背景需求&#xff1a; 上个月&#xff0c;看到大4班一个孩子在玩“点兵点将点到谁就是谁”的小游戏&#xff0c;他在桌上摆放两排奥特曼卡片&#xff0c;然后点着数“点兵点将点到谁就是谁”&#xff0c;第10次点击的卡片&#xff0c;拿起来与同伴的卡片进行交换。他是从第一排…

Unity-Arduino Bluetooth Plugin蓝牙插件使用时需要注意的一些事项(附插件下载链接)

一些参考链接 1.Android 无法扫描蓝牙设备踩坑 2.权限相关 1-首先要明确你的蓝牙设备是经典蓝牙还是低功耗&#xff08;BLE)蓝牙&#xff1a; 转载&#xff1a;Android蓝牙开发—经典蓝牙和BLE&#xff08;低功耗&#xff09;蓝牙的区别 2.如果是BLE蓝牙&#xff0c;需要打勾…
最新文章