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.rhkb.cn/news/74348.html

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

相关文章

【MySQL】数据库基本使用

文章目录 一、数据库介绍二、数据库使用2.1 登录MySQL2.2 基本使用2.2.1 显示当前 MySQL 实例中所有的数据库列表2.2.2 创建数据库2.2.3 创建数据库表2.2.4 在表中插入数据2.2.5 在表中查询数据 三、服务器、数据库、表之间的关系四、SQL语句分类五、存储引擎 一、数据库介绍 …

图卷积网络(GCN)和池化

一、说明 GCN&#xff08;Graph Convolutional Network&#xff09;是一种用于图形数据处理和机器学习的神经网络架构。GCN 可以在图形中捕获节点之间的关系&#xff0c;从而能够更好地处理图形数据。GCN 可以沿着图形上的边缘执行滤波器操作&#xff0c;将每个节点的特征向量进…

中国艺术孙溟㠭篆刻作品《活着》

人人为生活挣扎着&#xff0c;做着不想做的事&#xff0c;说着不想说的话&#xff0c;为生活低头弯腰委屈求全人生苦多甜少&#xff0c;何时了&#xff01;何时了&#xff01;甜来人生到头了…… 孙溟㠭篆刻作品《活着》 孙溟㠭篆刻作品《活着》 孙溟㠭篆刻作品《活着》 文/九钵

python3GUI--我的翻译器By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.主界面2.段落翻译3.单词翻译 三&#xff0e;设计1.UI设计2.软件设计3.参考 四&#xff0e;总结 一&#xff0e;前言 很早之前写过一篇python3GUI–翻译器By:PyQt5&#xff08;附源码&#xff09; &#xff0c;但是发现相关引擎…

设计模式之单例模式

单例模式 定义&#xff1a;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点 引子&#xff1a;读取配置文件 很多地方要用到&#xff0c;如果每次都new 一个对象的话&#xff0c;会浪费内存资源。 改装成饿汉式&#xff08;饿汉式有线程并发问题&#xff0c…

【计算机网络】11、网桥(bridge)、集线器(hub)、交换机(switch)、路由器(router)、网关(gateway)

文章目录 一、网桥&#xff08;bridge)二、集线器&#xff08;hub&#xff09;三、交换机&#xff08;switch)四、路由器&#xff08;router&#xff09;五、网关&#xff08;gateway&#xff09; 对于hub&#xff0c;一个包过来后&#xff0c;直接将包转发到其他口。 对于桥&…

【Linux命令200例】cp用于复制文件和目录(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…

SpringBoot项目增加logback日志文件

一、简介 在开发和调试过程中&#xff0c;日志是一项非常重要的工具。它不仅可以帮助我们快速定位和解决问题&#xff0c;还可以记录和监控系统的运行状态。Spring Boot默认提供了一套简单易用且功能强大的日志框架logback&#xff0c;本文将介绍如何在Spring Boot项目中配置和…

Python web实战之 Django 的 ORM 框架详解

本文关键词&#xff1a;Python、Django、ORM。 概要 在 Python Web 开发中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;是一个非常重要的概念。ORM 框架可以让我们不用编写 SQL 语句&#xff0c;就能够使用对象的方式来操作数据…

8.3 作业 c高级

1.递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位&#xff1a; #include<myhead.h>void print_digit(int num) {if(num<10){printf("%d",num);puts("");}else{print_digit(num/10); //递归打印除最后一位外的数printf("%…

【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树

概述 二叉树&#xff08;Binary Tree&#xff09;&#xff1a;每个节点最多有两个子节点&#xff08;左子节点和右子节点&#xff09;&#xff0c;没有限制节点的顺序。特点是简单直观&#xff0c;易于实现&#xff0c;但查找效率较低。 二叉搜索树&#xff08;Binary Search…

华为数通HCIP-PIM原理与配置

组播网络概念 组播网络由组播源&#xff0c;组播组成员与组播路由器组成。 组播源的主要作用是发送组播数据。 组播组成员的主要作用是接收组播数据&#xff0c;因此需要通过IGMP让组播网络感知组成员位置与加组信息。 组播路由器的主要作用是将数据从组播源发送到组播组成员。…

Flutter 添加 example流程

一、已有Flutter工程&#xff08;命令&#xff09;添加 example 1、cd 工程(flutter_plugin ,是自己创建的)根目录 例: flutter create example 执行命令创建example PS&#xff1a;cd example 后执行flutter doctor 后就可以看到效果 2、如果需要指定iOS/Android 语言,请添加…

Qt应用开发(基础篇)——数值微调输入框QAbstractSpinBox、QSpinBox、QDoubleSpinBox

目录 一、前言 二、QAbstractSpinBox类 1、accelerated 2、acceptableInput 3、alignment 4、buttonSymbols 5、correctionMode 6、frame 7、keyboardTracking 8、readOnly 9、showGroupSeparator 10、specialValueText 11、text 12、wrapping 13、信号 二、Q…

微信小程序 - 解析富文本插件版们

一、html2wxml 插件版 https://gitee.com/qwqoffice/html2wxml 申请使用注意事项 插件版本解析服务是由 QwqOffice 完成&#xff0c;存在不稳定因素&#xff0c;如对稳定性有很高的要求&#xff0c;请自行搭建解析服务&#xff0c;或在自家服务器上直接完成解析。对于有关插…

【Linux】 UDP网络套接字编程

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统网络编程 文章目录 一、网络通信的本质&#xff08;port标识的进程间通信&#xff09;二、传输层协议UDP/TCP认识传输层协议UDP/TCP网络字节序问题&#xff08;规定大端&#xff09; 三、socket编…

VGG卷积神经网络-笔记

VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一&#xff0c; 2014年由Simonyan和Zisserman提出&#xff0c; 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为&#xff1a; 通过运行结果可以发现&#xff0c;在眼疾筛查数据集iChallenge-PM上使用VGG…

Prometheus中的关键设计

1、标准先行&#xff0c;注重生态 Prometheus 最重要的规范就是指标命名方式&#xff0c;数据格式简单易读。比如&#xff0c;对于应用层面的监控&#xff0c;可以要求必须具备这几个信息。 指标名称 metric Prometheus 内置建立的规范就是叫 metric&#xff08;即 __name__…

C++ 用指针处理数组元素

指针加减运算的特点使得指针特别合适于处理存储在一段连续内存空间中的同类数据。而数组恰好是具有一定顺序关系的若干同类型变量的集合体&#xff0c;数组元素的存储在物理上也是连续的&#xff0c;数组名就是数组存储的首地址。这样&#xff0c;便可以使用指针来对数组及其元…

使用docker 搭建nginx + tomcat 集群

创建3个Tomcat容器&#xff0c;端口分别映射到 8080,8081,8082&#xff0c;使用数据卷挂载&#xff0c;分别将宿主机目录下的 /opt/module/docker/tomcat3/ROOT1/&#xff0c;/opt/module/docker/tomcat3/ROOT2/&#xff0c;/opt/module/docker/tomcat3/ROOT2/ 挂载到 容器内部…