JS之打地鼠案例

news2024/12/23 18:24:23

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

请添加图片描述

上代码:

<!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.coloradmin.cn/o/1408309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读:Vary-toy论文阅读笔记

目录 引言整体结构图方法介绍训练vision vocabulary阶段PDF数据目标检测数据 训练Vary-toy阶段Vary-toy结构数据集情况 引言 论文&#xff1a;Small Language Model Meets with Reinforced Vision Vocabulary Paper | Github | Demo 说来也巧&#xff0c;之前在写论文阅读&…

更新至2023年各省环境规制数据合集(七种测算方法)

更新至2023年各省环境规制数据合集&#xff08;七种测算方法&#xff09; 一、2002-2023年全国各省ZF报告词频环境规制关键词词频统计数据 1、时间&#xff1a;2001-2022年 2、指标&#xff1a;文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频-精确模式、环…

计算机中找不到vcomp140.dll无法继续执行代码有哪些解决方法

vcomp140.dll是微软Visual C编译器的一个组件&#xff0c;主要用于支持并行计算和OpenMP库的实现。以下是这个DLL文件的属性介绍&#xff1a; 文件名&#xff1a;vcomp140.dll 这个文件名中的“140”指的是与Visual C的版本相对应的内部版本号&#xff0c;这里对应的是2015版…

聚焦AI4S,产学研专家齐聚,探讨AI工具在多领域应用的现状与趋势

2023 和鲸社区年度科研闭门会以“对话 AI for Science 先行者&#xff0c;如何抓住科研范式新机遇”为主题&#xff0c;邀请了多个领域的专家学者共同探讨人工智能在各自领域的发展现状与未来趋势。 闭门会圆桌论坛由和鲸科技联合创始人、执行总裁兼首席产品官殷自强主持&…

Linux之快速入门(CentOS 7)

文章目录 一、Linux目录结构二、常用命令2.1 切换用户2.2查看ip地址2.3 cd2.4 目录查看2.5 查看文件内容2.6 创建目录及文件2.7 复制和移动2.8 其他2.9 tar3.0 which3.1 whereis3.2 find&#xff08;这个命令尽量在少量用户使用此软件时运行&#xff0c;因为此命令是真的读磁盘…

ifconfig 主机ip url记录

ifconfig 容器Pods相关主机与url信息 一文搞懂网络知识&#xff0c;IP、子网掩码、网关、DNS、端口号_关于ip,网关。端口-CSDN博客 计算机网络知识之URL、IP、子网掩码、端口号_ip地址和url-CSDN博客 阅读看下以上文章 由此可知 1.主机ip 10.129.22.124 10.129.22 是网段…

线程池高手进阶:揭秘ThreadPoolExecutor的小妙招!

RejectedExecutionHandler总结 ThreadPoolExecutor 是 Java 中用于创建和管理线程池的接口&#xff0c;当线程池中的任务队列已满&#xff0c;并且线程池中的线程数量已经达到最大时&#xff0c;如果再有新的任务提交&#xff0c;就需要一个策略来处理这些无法执行的任务。它 …

c++ 截图GetWindowDC,并保存到文件夹下---手把手教

工作中遇到一个需求&#xff0c;需要在用户操作过后&#xff0c;需要截图来确认用户操作过后&#xff0c;真实的呈现结果&#xff0c;用来后期验证 直接上代码 直接使用&#xff0c;修改自己需要捕获的窗口名字就可以了 OnBnClickedBtUpimage(){CString strPathTmp;GetAppPath…

2024年 IT 行业就业情况能否回春?很多人说道…

我只能说可以&#xff0c;以前我是看不到的。但是鸿蒙全栈自研让我重新看到希望&#xff01; 2024年1月18日&#xff0c;华为鸿蒙千帆启航发布会。讲到HarmonyOS NEXT作为原生鸿蒙&#xff0c;其系统底座全栈自研&#xff0c;去掉了传统的AOSP 代码&#xff08;“Android 开放…

基于变异混合蛙跳算法的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 车间调度问题&#xff08;JSSP&#xff09;描述 4.2 蛙跳算法&#xff08;SFLA&#xff09;基本原理 4.2.1 初始化 4.2.2 局部搜索 4.2.3 全局信息交换 4.2.4 变异策略 4.2.5 终止…

音乐证书通过率发布,市场对持有者需求旺盛

音乐证书的考试难度备受关注&#xff0c;通过率终于揭晓。据官方公布的数据&#xff0c;该证书的通过率相对较低&#xff0c;需要考生在音乐技能和表现方面有出色的表现。然而&#xff0c;持有音乐证书的人才在市场上需求旺盛&#xff0c;各种音乐机构和企业对其表现出强烈兴趣…

【AI视野·今日CV 计算机视觉论文速览 第288期】Thu, 11 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Thu, 11 Jan 2024 Totally 50 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Towards Online Sign Language Recognition and Translation Authors Ronglai Zuo, Fangyun Wei, Brian Mak手语识别的目标…

MyBatis详解(2)-- mybatis配置文件

MyBatis详解&#xff08;2&#xff09; mybatis配置文件 mybatis配置文件 1.构建SqlSessionFactory的依据。 2.MyBatis最为核心的内容&#xff0c;对MyBatis的使用影响很大。 3.配置文件的层次顺序不能颠倒&#xff0c;一旦颠倒会出现异常。 < c o n f i g u r a t i o n…

【原创】linux为什么不是实时操作系统

文章目录 一、什么是实时操作系统&#xff08;RTOS&#xff09;&#xff1f;二、linux为什么不是实时操作系统&#xff1f;中断响应时间中断处理时间任务调度时间1、No Forced Preemption(Server)2、Voluntary Kernel Preemption(Desktop)3、Preemptible Kernel(Low-Latency De…

windows 下docker-compose 试玩 paperlsess

第一步安装&#xff1a;&#xff08;假设docker-compose已安装好&#xff09; 下载 docker-compose.yml &#xff0c;docker-compose.env: github下载地址 在docker-paperless.env增加环境变量,设置管理员账户信息&#xff1a; PAPERLESS_ADMIN_USER: admin PAPERLESS_ADMIN_P…

什么品牌洗地机最好?专业旗舰级洗地机推荐

作为一个打工族&#xff0c;很能理解大家对日常清洁繁琐的烦恼&#xff0c;尤其是在忙碌工作后难以有力气打扫卫生。这时候&#xff0c;洗地机就是解决问题的利器了。它不仅方便轻松&#xff0c;还能有效消菌杀毒&#xff0c;助力深度清洁。若你正在为选择哪款洗地机而烦恼&…

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

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

【复现】万户ezoffice协同管理平台 SQL注入漏洞_26

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 万户ezOFFICE协同管理平台分为企业版和政务版。 解决方案由五大应用、两个支撑平台组成&#xff0c;分别为知识管理、工作流程、沟…

1.8 万 Star!这款 Nginx 可视化配置工具太强了

NginxConfig简介 Nginx Config 是一个强大的 Nginx 配置文件生成器&#xff0c;号称配置 Nginx 服务器所需的唯一工具。 正因为 Nginx 功能强大&#xff0c;所以针对其各个功能的配置项会显得特别多&#xff0c;对于我们来说要记住那么多配置是一件十分头疼的事&#xff0c;甚…

Python环境下基于机器学习的NASA涡轮风扇发动机剩余使用寿命RUL预测

本例所用的数据集为C-MAPSS数据集&#xff0c;C-MAPSS数据集是美国NASA发布的涡轮风扇发动机数据集&#xff0c;其中包含不同工作条件和故障模式下涡轮风扇发动机多源性能的退化数据&#xff0c;共有 4 个子数据集&#xff0c;每个子集又可分为训练集、 测试集和RUL标签。其中&…