首页 > 其他分享 >有趣的前端小游戏

有趣的前端小游戏

时间:2023-05-14 18:44:38浏览次数:38  
标签:const color 前端 height width insect 小游戏 有趣 btn

今天搬了一天的家,状态不是很好,分享一个小游戏给大家吧~

先介绍一下游戏规则:
1、点击play后,游戏会提供4中不同的昆虫供玩家进行选择,这四种昆虫分别为:蟑螂、蛛蛛、蚊子和苍蝇。
2、当玩家选择完昆虫后,游戏开始
3、游戏会随机的生成玩家选择的昆虫到电脑屏幕,玩家利用鼠标点击到则得一分。
4、游戏开始时屏幕上显示一只昆虫,随后逐渐增多,同时记录玩家游戏时长
5、一段时间后,弹出小惊喜给玩家

游戏部分截图如下:

- 开始游戏:

 

- 选择界面:

 


游戏开始:

 


一段时间后:

 


之后弹出惊喜给玩家:

 


没错,这个时候玩家应该已经发现昆虫是点不完的了,且会越点越多~(大概心态会崩,开始赞美开发者了)

下面老规矩,上代码:

首先是html部分:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>Catch The Insect</title>
</head>
<body>
<div class="screen">
<h1>Catch The Insect</h1>
<button class="btn" id="start-btn">Play Game</button>
</div>

<div class="screen">
<h1>What is your "favorite" insect?</h1>
<ul class="insects-list">
<li>
<button class="choose-insect-btn">
<p>Fly</p>
<img src="http://pngimg.com/uploads/fly/fly_PNG3946.png" alt="fly">
</button>
</li>
<li>
<button class="choose-insect-btn">
<p>Mosquito</p>
<img
src="http://pngimg.com/uploads/mosquito/mosquito_PNG18175.png"
alt="mosquito"
/>
</button>
</li>
<li>
<button class="choose-insect-btn">
<p>Spider</p>
<img
src="http://pngimg.com/uploads/spider/spider_PNG12.png"
alt="spider"
/>
</button>
</li>
<li>
<button class="choose-insect-btn">
<p>Roach</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">Time: 00:00</h3>
<h3 id="score" class="score">Score: 0</h3>
<h5 id="message" class="message">
Are you annoyed yet? <br>
You are playing an impossible game!!
</h5>
</div>

<script src="script.js"></script>
</body>
</html>

 

紧接着是js部分

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 = {}

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() {
setInterval(increaseTime, 1000)
}

function increaseTime() {
let m = Math.floor(seconds / 60)
let s = seconds % 60
m = m < 10 ? `0${m}` : m
s = s < 10 ? `0${s}` : s
timeEl.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.innerWidth
const height = window.innerHeight
const x = Math.random() * (width - 200) + 100
const y = Math.random() * (height - 200) + 100
return { x, y }
}

function catchInsect() {
increaseScore()
this.classList.add('caught')
setTimeout(() => this.remove(), 2000)
addInsects()
}

function addInsects() {
setTimeout(createInsect, 1000)
setTimeout(createInsect, 1500)
}

function increaseScore() {
score++
if(score > 19) {
message.classList.add('visible')
}
scoreEl.innerHTML = `Score: ${score}`
}

 

最后是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;
}

.btn:hover {
opacity: 0.9;
}

.btn:focus {
outline: 0;
}

.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: #516dff;
}

.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;
}

 

最后,祝大家玩的愉快~

标签:const,color,前端,height,width,insect,小游戏,有趣,btn
From: https://www.cnblogs.com/kimi77/p/17399871.html

相关文章

  • Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端htm
    上面讲了Nginx-http-flv-module+flv.js进行流媒体服务器搭建和前端播放视频流的过程。但是Nginx-http-flv-module对于Windows的支持以及推流格式的支持优先,所以下面推荐rtsp-simple-server流媒体服务器的使用。rtsp-simple-serverhttps://github.com/aler9/rtsp-simple-serverrtsp-......
  • 前端语言串讲 | 青训营笔记
    参考了这篇博客前端语言串讲(万字笔记)|青训营笔记,并加入了一些分析思考课程总结前端语言的基本能力基础的前端三剑客HTML、CSS、JavaScriptHTML(超文本标记语言)HTML是Web页面的基础结构。它用于描述网页的内容和结构。HTML使用一系列标记(称为标签)来定义页面元素,如......
  • Salesforce LWC学习(四十四) Datatable 显示日期类型的有趣点思考
    本篇参考:https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reference_salesforce_modules背景:项目中经常用到datatable显示日期类型字段,并要求日期类型字段基于指定格式显示。这种是一个很常见的需求,而且demo很容易找到,无论是官方文档中还是......
  • 前端项目更新的缓存问题
    问题描述:微信公众号前端项目更新总会遇到不会加载最新代码问题,需要进行多次刷新或手动清空微信缓存。问题分析:1、前端项目本身是否存在缓存配置;2、nginx是否存在缓存配置。解决方案:在前端项目配置做过动态hash处理的前提下,更新后构建输出的cssjs图片等文件会被重新请......
  • 有趣的动态规划
    原文点此跳转什么是动态规划?动态规划也是算法设计的一种方法/思想。它将一个问题分解为相互重叠的子问题,通过反复求解子问题,来解决原来的问题。基础案例场景一斐波那契数列当前数等于前面两个数的和。定义子问题:f(n)=f(n-1)+f(n-2)原文点此跳转......
  • 小白学前端--001 VSCode安装+插件+字号调节
    工于利其事必先利其器,学前端工具选择很重要。一、VSCode是不错的选择。安装步骤不再赘述,一路下一步即可。vscode折叠左侧窗口,ctrl+B二、插架选择1、OpeninBrowser  (在代码中右键选择,在默认浏览器查看代码执行效果)2、Chinese(Simplified)(简体中文)......
  • 必知必会的JavaScript前端面试题篇(二),不看后悔!
    必知必会的JavaScript前端面试题篇(二),不看后悔!1.JavaScript有哪些数据类型以及它们的区别?js一共有八种数据类型,分别是:Undefined,Null,Boolean,Number,String,Object,Symbol,BigInt其中Symbol,BigInt是ES6中新增的数据类型:Symbol:代表唯一的数据类型,主要为了解......
  • 面试笔之前端状态码大全
    目录这些状态码被分为五大类:一些常见的状态码为:详细分解:这些状态码被分为五大类:100-199用于指定客户端应相应的某些动作。200-299用于表示请求成功。300-399用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。400-499用于指出客户端的错误。500-599用于......
  • 前端 Website 的 sitemap.xml 文件和搜索引擎优化
    前端Website的sitemap.xml文件是一个XML格式的文件,其中包含了网站中所有页面的链接,这些页面可以是HTML页面、博客文章、产品页面、分类页面等等。Sitemap文件的作用是向搜索引擎提供关于网站的信息,帮助搜索引擎更好地索引网站内容,提高网站在搜索结果中的排名。Sitemap.xml......
  • 没关系,前端还死不了
    前言网络上的任何事情都可以在《乌合之众》书中找到答案。大众言论没有理性,全是极端,要么封神,要么踩死。不少人喷前端,说前端已死?前端内卷?前端一个月800包吃住?对此我想说,“前端已死”更多的是一种焦虑情绪的表达,但这并不是针对前端。本文笔者会从以下几个方面分享,希望能够帮助正在......