web前端开发打地鼠小游戏HTML+CSS+JS
时间: 2023-09-06 21:09:14 浏览: 69
好的,下面我将为你介绍如何使用 HTML、CSS 和 JavaScript 开发一个打地鼠小游戏。
1. HTML 结构
首先,我们需要创建 HTML 结构。游戏主要分为两个部分:游戏界面和计分板。游戏界面部分需要创建一个包含 9 个格子的网格,每个格子都会出现地鼠,我们需要绑定点击事件检测是否打中地鼠。计分板部分需要显示当前分数和剩余时间。
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>打地鼠小游戏</title>
<style>
/* 游戏界面样式 */
#game-board {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.cell {
width: 100px;
height: 100px;
background-color: #ccc;
text-align: center;
line-height: 100px;
font-size: 40px;
cursor: pointer;
}
.cell.active {
background-color: #f00;
}
/* 计分板样式 */
#score-board {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
}
#score-board span {
font-size: 24px;
}
</style>
</head>
<body>
<div id="game-board">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div id="score-board">
<span id="score">0</span>
<span id="time">60</span>
</div>
<script src="game.js"></script>
</body>
</html>
```
2. CSS 样式
接下来,我们需要为游戏界面和计分板添加样式。游戏界面部分需要创建 9 个格子,使用 CSS 网格布局实现。计分板部分需要使用 flex 布局实现。
3. JavaScript 逻辑
最后,我们需要编写 JavaScript 逻辑,实现打地鼠游戏的核心功能。
首先,我们需要定义一些变量来保存游戏状态,比如分数、剩余时间、地鼠位置等。
```javascript
let score = 0; // 当前得分
let time = 60; // 剩余时间
let holes = []; // 地鼠位置数组
let activeHole = null; // 当前出现的地鼠位置
let timer = null; // 定时器
```
然后,我们需要编写生成地鼠位置的函数,该函数会在游戏开始时调用。
```javascript
function generateHoles() {
holes = Array.from({ length: 9 }, (_, index) => index);
holes.sort(() => Math.random() - 0.5); // 随机打乱位置
}
```
接着,我们需要编写显示地鼠的函数,该函数会在定时器每次运行时调用。
```javascript
function showMole() {
// 随机选择一个未出现的位置
const availableHoles = holes.filter(hole => hole !== activeHole);
activeHole = availableHoles[Math.floor(Math.random() * availableHoles.length)];
// 在选中的位置上显示地鼠
const cell = document.querySelectorAll('.cell')[activeHole];
cell.classList.add('active');
// 1 秒后隐藏地鼠
setTimeout(hideMole, 1000);
}
```
最后,我们需要编写检测点击事件的函数,该函数会在用户点击格子时调用。
```javascript
function handleClick(event) {
if (event.target.classList.contains('active')) {
// 打中地鼠,加分
score += 10;
document.querySelector('#score').textContent = score;
// 隐藏地鼠
hideMole();
}
}
function hideMole() {
const cell = document.querySelectorAll('.cell')[activeHole];
cell.classList.remove('active');
// 继续显示地鼠
setTimeout(showMole, 500);
}
```
最后,我们需要编写启动游戏的函数,该函数会在用户点击开始按钮时调用。
```javascript
function startGame() {
// 初始化游戏状态
score = 0;
time = 60;
generateHoles();
activeHole = null;
// 显示分数和剩余时间
document.querySelector('#score').textContent = score;
document.querySelector('#time').textContent = time;
// 注册点击事件
const cells = document.querySelectorAll('.cell');
cells.forEach(cell => cell.addEventListener('click', handleClick));
// 启动定时器
timer = setInterval(() => {
time--;
document.querySelector('#time').textContent = time;
if (time === 0) {
// 时间到,游戏结束
clearInterval(timer);
cells.forEach(cell => cell.removeEventListener('click', handleClick));
alert(`游戏结束,你的得分是 ${score}`);
}
}, 1000);
// 显示地鼠
showMole();
}
```
最后,我们需要在 HTML 文件中添加一个开始按钮,并绑定启动游戏的函数。
```html
<button onclick="startGame()">开始游戏</button>
```
现在,我们已经完成了打地鼠小游戏的开发。完整的代码如下:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>打地鼠小游戏</title>
<style>
/* 游戏界面样式 */
#game-board {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.cell {
width: 100px;
height: 100px;
background-color: #ccc;
text-align: center;
line-height: 100px;
font-size: 40px;
cursor: pointer;
}
.cell.active {
background-color: #f00;
}
/* 计分板样式 */
#score-board {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
}
#score-board span {
font-size: 24px;
}
</style>
</head>
<body>
<div id="game-board">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div id="score-board">
<span id="score">0</span>
<span id="time">60</span>
</div>
<button onclick="startGame()">开始游戏</button>
<script>
let score = 0; // 当前得分
let time = 60; // 剩余时间
let holes = []; // 地鼠位置数组
let activeHole = null; // 当前出现的地鼠位置
let timer = null; // 定时器
function generateHoles() {
holes = Array.from({ length: 9 }, (_, index) => index);
holes.sort(() => Math.random() - 0.5); // 随机打乱位置
}
function showMole() {
// 随机选择一个未出现的位置
const availableHoles = holes.filter(hole => hole !== activeHole);
activeHole = availableHoles[Math.floor(Math.random() * availableHoles.length)];
// 在选中的位置上显示地鼠
const cell = document.querySelectorAll('.cell')[activeHole];
cell.classList.add('active');
// 1 秒后隐藏地鼠
setTimeout(hideMole, 1000);
}
function handleClick(event) {
if (event.target.classList.contains('active')) {
// 打中地鼠,加分
score += 10;
document.querySelector('#score').textContent = score;
// 隐藏地鼠
hideMole();
}
}
function hideMole() {
const cell = document.querySelectorAll('.cell')[activeHole];
cell.classList.remove('active');
// 继续显示地鼠
setTimeout(showMole, 500);
}
function startGame() {
// 初始化游戏状态
score = 0;
time = 60;
generateHoles();
activeHole = null;
// 显示分数和剩余时间
document.querySelector('#score').textContent = score;
document.querySelector('#time').textContent = time;
// 注册点击事件
const cells = document.querySelectorAll('.cell');
cells.forEach(cell => cell.addEventListener('click', handleClick));
// 启动定时器
timer = setInterval(() => {
time--;
document.querySelector('#time').textContent = time;
if (time === 0) {
// 时间到,游戏结束
clearInterval(timer);
cells.forEach(cell => cell.removeEventListener('click', handleClick));
alert(`游戏结束,你的得分是 ${score}`);
}
}, 1000);
// 显示地鼠
showMole();
}
</script>
</body>
</html>
```