day50-Insect Catch Game(捉虫游戏)

50 天学习 50 个项目 - HTMLCSS and JavaScript

day50-Insect Catch Game(捉虫游戏)

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Catch The Insect</title><link rel="stylesheet" href="style.css" />
</head><body><!-- 第一屏 --><div class="screen"><h1>消灭昆虫游戏</h1><button class="btn" id="start-btn">开始</button></button></div><!-- 第二屏 --><div class="screen"><h1>你"最想消灭"的昆虫是什么?</h1><ul class="insects-list"><li><button class="choose-insect-btn"><p>苍蝇</p><img src="http://pngimg.com/uploads/fly/fly_PNG3946.png" alt="fly"></button></li><li><button class="choose-insect-btn"><p>蚊子</p><img src="http://pngimg.com/uploads/mosquito/mosquito_PNG18175.png" alt="mosquito" /></button></li><li><button class="choose-insect-btn"><p>蜘蛛</p><img src="http://pngimg.com/uploads/spider/spider_PNG12.png" alt="spider" /></button></li><li><button class="choose-insect-btn"><p>蟑螂</p><img src="http://pngimg.com/uploads/roach/roach_PNG12163.png" alt="roach" /></button></li></ul></div><!-- 第三屏 --><div class="screen game-container" id="game-container"><h3 id="time" class="time">时间: 00:00</h3><h3 id="score" class="score">得分: 0</h3><h5 id="message" class="message">你生气了吗? <br>你在玩一个不可能的游戏!!</h5></div><script src="script.js"></script>
</body></html>

style.css

@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap');* {box-sizing: border-box;
}body {background-color: #516dff;color: #fff;font-family: 'Press Start 2P', sans-serif;height: 100vh;overflow: hidden;margin: 0;text-align: center;
}a {color: #fff;
}/* 标题 */
h1 {line-height: 1.4;
}/* 按钮 */
.btn {border: 0;background-color: #fff;color: #516dff;padding: 15px 20px;font-family: inherit;cursor: pointer;outline: 0;
}.btn:hover {opacity: 0.9;
}/* 每块屏 */
.screen {/* 子元素竖直居中 */display: flex;flex-direction: column;align-items: center;justify-content: center;height: 100vh;width: 100vw;transition: margin 0.5s ease-out;
}/* 向上隐藏 */
.screen.up {margin-top: -100vh;
}/* 第二屏 昆虫容器 */
.insects-list {display: flex;flex-wrap: wrap;justify-content: center;list-style-type: none;padding: 0;
}.insects-list li {margin: 10px;
}/* 每一项昆虫 */
.choose-insect-btn {background-color: transparent;border: 2px solid #fff;color: #fff;cursor: pointer;font-family: inherit;width: 150px;height: 150px;
}.choose-insect-btn:hover {background-color: #fff;color: aqua;
}.choose-insect-btn:active {background-color: rgba(255, 255, 255, 0.7);
}/* 图片 */
.choose-insect-btn img {width: 100px;height: 100px;object-fit: contain;
}/* 第三屏 */
.game-container {/* 子绝父相,用于昆虫的定位 */position: relative;
}/* 时间 分数 */
.time,
.score {position: absolute;top: 20px;
}.time {left: 20px;
}.score {right: 20px;
}/* 结束语 默认隐藏 */
.message {line-height: 1.7;background-color: rgba(0, 0, 0, 0.5);width: 100%;padding: 20px;z-index: 100;text-align: center;/* 隐藏 */opacity: 0;position: absolute;top: 0;left: 50%;transform: translate(-50%, -150%);transition: transform 0.4s ease-in;
}/* 显示 */
.message.visible {transform: translate(-50%, 150%);opacity: 1;
}/* 昆虫 */
.insect {cursor: pointer;display: flex;align-items: center;justify-content: center;width: 100px;height: 100px;/* 绝对定位 */position: absolute;transform: translate(-50%, -50%) scale(1);transition: transform 0.3s ease-in-out;
}/* 被抓住 隐藏 */
.insect.caught {transform: translate(-50%, -50%) scale(0);
}/* 昆虫图片 */
.insect img {width: 100px;height: 100px;
}

script.js

// 重点 flex position transform: translate(-50%, -50%) scale(0); transition 函数
// setTimeout setInterval
// 1.获取元素节点
const screens = document.querySelectorAll('.screen');//三块屏
const choose_insect_btns = document.querySelectorAll('.choose-insect-btn');//选择昆虫按钮们
const start_btn = document.getElementById('start-btn')//开始按钮
const game_container = document.getElementById('game-container')//第三屏
const timeEl = document.getElementById('time')//时间
const scoreEl = document.getElementById('score')//分数
const message = document.getElementById('message')//结束语
let seconds = 0//秒
let score = 0
let selected_insect = {}//存储选中的昆虫项
let timer = 0 //记录时间的间歇期
// 2.绑定点击 事件 第一屏向上移动,隐藏
start_btn.addEventListener('click', () => screens[0].classList.add('up'))
// 遍历所有昆虫,绑定点击事件
choose_insect_btns.forEach(btn => {btn.addEventListener('click', () => {const img = btn.querySelector('img')const src = img.getAttribute('src')const alt = img.getAttribute('alt')// 存储当前的昆虫选项selected_insect = { src, alt }// 第二屏向上移动,隐藏screens[1].classList.add('up')// 一秒后,创建一个昆虫setTimeout(createInsect, 1000)// 开始游戏startGame()})
})
// 函数 开始游戏
function startGame() {// 开启间歇期 每过一秒记录时间timer =setInterval(increaseTime, 1000)
}
// 函数,记录时间
function increaseTime() {let m = Math.floor(seconds / 60)let s = seconds % 60m = m < 10 ? `0${m}` : ms = s < 10 ? `0${s}` : stimeEl.innerHTML = `Time: ${m}:${s}`seconds++
}
// 函数:在第三屏中创建昆虫
function createInsect() {const insect = document.createElement('div')insect.classList.add('insect')// 设置昆虫位置const { x, y } = getRandomLocation()insect.style.top = `${y}px`insect.style.left = `${x}px`// 随机设置昆虫角度insect.innerHTML = `<img src="${selected_insect.src}" alt="${selected_insect.alt}" style="transform: rotate(${Math.random() * 360}deg)" />`// 点击,即触发捕捉昆虫insect.addEventListener('click', catchInsect)// 显示昆虫game_container.appendChild(insect)
}
// 函数:随机获取位置
function getRandomLocation() {const width = window.innerWidthconst height = window.innerHeightconst x = Math.random() * (width - 200) + 100const y = Math.random() * (height - 200) + 100return { x, y }
}
// 函数:捕捉昆虫
function catchInsect() {// 分数+increaseScore()// 隐藏this.classList.add('caught')// 移除昆虫setTimeout(() => this.remove(), 2000)// 添加昆虫addInsects()
}
// 函数:添加昆虫,再次开启两个定时器,即捕捉成功1只之后,创建两只昆虫。源源不断
function addInsects() {setTimeout(createInsect, 1000)setTimeout(createInsect, 1500)
}
// 函数:分数增加
function increaseScore() {score++// 大于19分。游戏结束。结束语显示if (score > 19) {clearInterval(timer)message.classList.add('visible')}scoreEl.innerHTML = `Score: ${score}`
}

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

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

相关文章

codeblocks编译lvgl报错

codeblocks编译lvgl报错 1.报错内容2.解决方案3.lvgl本身代码报错 1.报错内容 error: unknown type name _In_opt_ ...2.解决方案 官网下载&#xff1a; 这里的Compiler’s installation directory 选择自带的 3.lvgl本身代码报错 undefined reference to _lv_utils_bse…

面试总结-Redis篇章(九)——Redis主从复制、主从数据同步原理

Redis其他面试问题 主从复制单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离主节点主要进行客户端的写操作&#xff0c;从节点进行客户端的读操作&#xff0c;因为Redis一直都是读多写少&…

UE5.1.1 创建C++项目失败

因一直使用Unity开发环境&#xff0c;安装Unreal后&#xff0c;并未详细配置过其开发环境&#xff0c;默认创建蓝图工程无异常&#xff0c;但创建UE C项目时总共遇到两个错误&#xff1a; 错误一 Running /Epic/UE/UE_5.1/Engine/Build/BatchFiles/Build.bat -projectfiles -…

<C++>二、类和对象-构造函数

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生…

【Linux多线程】死锁问题介绍

死锁 &#x1f96d;什么是死锁&#x1f965;死锁产生的条件&#x1f95d;如何避免死锁&#x1f345; 避免死锁算法 &#x1f96d;什么是死锁 死锁是多线程或多进程编程中的一种常见问题&#xff0c;指的是两个或多个线程&#xff08;或进程&#xff09;相互等待对方持有的资源&…

搜索二叉树_SearchBinaryTree

目录 搜索二叉树的原理 搜索二叉树的搜索时间复杂度 二叉搜索树实现_key 模型 节点 构造函数 查找 中序遍历 插入 循环 递归 删除 循环 1.删除叶子节点 2.删除有一个孩子的节点 3.左右孩子都不为空 递归 析构函数 拷贝构造 operator key_value 模型 节点 …

Mysql触发器

1.触发器 触发器是与表有关的数据库对象&#xff0c;指在 insert / update / delete 之前或之后&#xff0c;触发并执行触发器中定义的SL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性&#xff0c;日志记录&#xff0c;数据校验等操作。 使用别名 OLD 和 …

mysql安装教程保姆级

MySQL免安装本地运行 1.下载MySQL2.创建install.bat3.init.sql 初始创建4.环境变量配置5.运行 install.bat 管理员权限运行6.连接成功遇到的问题 1.下载MySQL ①地址&#xff1a;https://downloads.mysql.com/archives/community/ ②解压 2.创建install.bat 放在mysql>b…

算法综合篇专题一:双指针问题

"就算没有看清那株灿烂的花蕊&#xff0c;也应该放声歌颂赞美鲜红的玫瑰" 1、移动零 (1) 题目解析 (2) 算法原理 class Solution { public:void moveZeroes(vector<int>& nums) {for(int cur0,dest-1;cur<nums.size();cur){if(nums[cu…

java设计模式-建造者(Builder)设计模式

介绍 Java的建造者&#xff08;Builder&#xff09;设计模式可以将产品的内部表现和产品的构建过程分离开来&#xff0c;这样使用同一个构建过程来构建不同内部表现的产品。 建造者设计模式涉及如下角色&#xff1a; 产品&#xff08;Product&#xff09;角色&#xff1a;被…

前端工程化最佳实践:项目结构、代码规范和文档管理

文章目录 前端工程化最佳实践项目结构设计与组织文档管理和注释规范国际化和本地化实践 前端工程化的未来发展趋势前端工程化领域的最新技术和工具WebAssembly 和前端性能优化可持续性和可访问性的趋势 总结前端工程化的关键知识点前端工程化对项目和团队的价值 前端工程化最佳…

《golang设计模式》第一部分·创建型模式-01-单例模式(Singleton)

文章目录 1. 概述1.1 目的1.2 实现方式 2. 代码示例2.1 设计2.2 代码 1. 概述 1.1 目的 保证类只有一个实例有方法能让外部访问到该实例 1.2 实现方式 懒汉式 在第一次调用单例对象时创建该对象&#xff0c;这样可以避免不必要的资源浪费 饿汉式 在程序启动时就创建单例对象…

卷积神经网络

目录 注意&#xff1a;有参数计算的才叫层 1.应用 1.1分类和检索 1.2超分辨率重构 1.3医学任务 1.4无人驾驶 1.5人脸识别 2.卷积 2.1卷积神经网络和传统网络的区别 2.2整体框架 2.3理解卷积&#xff08;重点&#xff09; 2.4为何要进行多层卷积 2.5卷积核的参数 2.6…

C++STL库中的list

文章目录 list的介绍及使用 list的常用接口 list的模拟实现 list与vector的对比 一、list的介绍及使用 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向带头循环链表结构&#xff0c;双向带头循…

基于ssm+mysql+jsp高校疫情防控出入信息管理系统

基于ssmmysqljsp高校疫情防控出入信息管理系统 一、系统介绍二、功能展示1.登陆2.教师管理3.学生管理4.打卡记录管理5.学生申请通行证6.通行证管理7.留言信息管理8.公告类型管理9.公告管理 四、获取源码 一、系统介绍 学生 : 个人中心、打卡记录管理、学生申请通行证、通行证管…

<C++> STL_string

目录 1.string类 2.string类的接口 2.1 成员函数 2.1.1 string构造函数 2.1.2 string赋值运算 2.1.3 string析构函数 2.2 string对象访问以及迭代器 2.2.1 string的遍历方式 2.2.2 迭代器的使用 2.2.3 const_迭代器的使用 2.2.4 at 2.2.5 back和front 2.3 string容…

Docker基础命令(一)

Docker使用1 一、运行终端 打开终端&#xff0c;输入docker images &#xff0c;如果运行正常&#xff0c;表示docker已经可以在本电脑上使用了 二、docker常用命令 指令说明docker images查看已下载的镜像docker rmi 镜像名称:标签名删除已下载的镜像docker search 镜像从官…

Java如何实现将类文件打包为jar包

目录 将类文件打包为jar包 1.写类文件2.编译3.测试4.打jar包jar包应该怎么打&#xff1f; 1.首先确保你的项目2.选中你的项目,点右键3.选择runnable jar file4.如下图,直接看图5.然后点finish 将类文件打包为jar包 为实际项目写了一个工具类&#xff0c;但是每次使用时都需要…

xcode中如何显示文件后缀

xcode14.3 用不惯mac电脑真恶心&#xff0c;改个显示文件后缀找半天 1、首先双击打开xcode软件 2、此时&#xff0c;电脑左上角出现xcode字样(左上角如果看不到xcode字样&#xff0c;再次点击xcode软件弹出来就有了)&#xff0c;鼠标右键它&#xff0c;点击setting或者Prefere…

安卓音视频多对多级联转发渲染

最近利用自己以前学习和用到的音视频知识和工程技能做了一个android的sdk,实现了本地流媒体ipc rtsp 拉流以及自带mip usb等camera audio节点产生的流媒体通过webrtc sfu的方式进行多对多级联发布共享,网状结构&#xff0c;p2p组网&#xff0c;支持实时渲染以及转推rtmp&#x…