打造你的HTML5打地鼠游戏:零基础入门教程

[TOC]

打造你的HTML5打地鼠游戏:零基础入门教程

简介

在这个教程中,我们将一起学习如何使用HTML、CSS和JavaScript来创建一个简单的打地鼠游戏。这不仅是一个有趣的项目,也是学习前端开发技能的绝佳方式。

体验地址
PC端体验地址: 洛可可白⚡️打地鼠
(暂时只支持键盘输入操作)

在这里插入图片描述

准备工作

确保你的开发环境已经安装了现代浏览器,如Chrome、Firefox或Safari。我们将使用这些浏览器的开发者工具来调试和优化我们的游戏。

代码编辑器我推荐 Visual Studio Code

创建游戏结构

1. HTML布局

首先,我们需要创建一个基本的HTML页面,它将包含游戏的布局和地鼠洞。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>洛可可白⚡️打地鼠</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="game-container">
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
<!-- 更多地鼠洞 -->
</div>
<script src="script.js"></script>
</body>
</html>

设计游戏样式

2. CSS样式

接下来,我们将使用CSS来美化我们的游戏界面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
      /* styles.css */
* {
box-sizing: border-box;
}

h1 {
text-align: center;
line-height: 30px;
}

.bigBox {
width: 60%;
height: 400px;
margin: 20px auto;
background-color: #cbbb3e;
}

.wam-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
height: 260px;
}

.wam-hole {
position: relative;
width: 100px;
height: 100px;
margin: 0 20px;
background-color: #f5732d;
}

.wam-mole {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* 地鼠 */
background-image: url("https://pic.52112.com/180516/EPS180516_57/9jagBhddHW_small.jpg");
background-size: 100% 100%;
display: none;
}

.wam-mole--up {
display: block;
}

.wam-score {
font-size: 2rem;
text-align: center;
}

.wam-message {
font-size: 1rem;
text-align: center;
margin-top: 20px;
cursor: pointer;
}

/* 你可以添加更多的CSS来美化地鼠洞和地鼠 */

实现游戏逻辑

3. JavaScript编程

现在,我们将使用JavaScript来添加游戏逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const container = document.querySelector(".wam-container");
const scoreBoard = document.querySelector(".wam-score");
const message = document.querySelector(".wam-message");
const moles = Array.from(container.querySelectorAll(".wam-hole"));

let lastHole;
let score = 0;
let isPlaying = false;
let timeUp = false;

// 随机时间生成地鼠
function popUpMole() {
if (timeUp) return;
const time = Math.random() * (1500 - 500) + 500;
const hole = randomHole(moles);
hole.querySelector("div").classList.add("wam-mole--up");
setTimeout(() => {
hole.querySelector("div").classList.remove("wam-mole--up");
if (!timeUp) popUpMole();
}, time);
}

// 随机选择一个地鼠洞
function randomHole(holes) {
const idx = Math.floor(Math.random() * holes.length);
const hole = holes[idx];
if (hole === lastHole) return randomHole(holes);
lastHole = hole;
return hole;
}

// 点击地鼠
function whackMole(e) {
if (!e.isTrusted) return; // 防止作弊
if (!isPlaying) return;
if (!e.target.matches(".wam-mole")) return;
score++;
scoreBoard.textContent = `分数: ${score}`;
e.target.parentNode
.querySelector("div")
.classList.remove("wam-mole--up");
}
// 开始游戏
function startGame() {
score = 0;
scoreBoard.textContent = "分数: 0";
isPlaying = true;
timeUp = false;
message.textContent = "";
popUpMole();
setTimeout(() => {
isPlaying = false;
timeUp = true;
message.textContent = `一分钟您的得分是: ${score};点我再来一次!`;
}, 60000);
}

// 初始化地鼠洞
moles.forEach((mole) => mole.addEventListener("click", whackMole));
document
.querySelector(".wam-message")
.addEventListener("click", startGame);

这段代码创建了一个简单的游戏循环,每秒钟随机显示一个地鼠,并在用户点击地鼠时给予反馈。你可以根据需要调整地鼠出现的速度和游戏的其他方面。

全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>洛可可白⚡️打地鼠</title>
<style>
* {
box-sizing: border-box;
}

h1 {
text-align: center;
line-height: 30px;
}

.bigBox {
width: 60%;
height: 400px;
margin: 20px auto;
background-color: #cbbb3e;
}

.wam-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
height: 260px;
}

.wam-hole {
position: relative;
width: 100px;
height: 100px;
margin: 0 20px;
background-color: #f5732d;
}

.wam-mole {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* 地鼠 */
background-image: url("https://pic.52112.com/180516/EPS180516_57/9jagBhddHW_small.jpg");
background-size: 100% 100%;
display: none;
}

.wam-mole--up {
display: block;
}

.wam-score {
font-size: 2rem;
text-align: center;
}

.wam-message {
font-size: 1rem;
text-align: center;
margin-top: 20px;
cursor: pointer;
}
</style>
</head>

<body>
<h1>打地鼠</h1>
<div class="bigBox">
<div class="wam-container">
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
<div class="wam-hole">
<div class="wam-mole"></div>
</div>
</div>
<div class="wam-score">分数: 0</div>
<div class="wam-message">准备好了吗?点击我开始</div>
</div>

<script>
const container = document.querySelector(".wam-container");
const scoreBoard = document.querySelector(".wam-score");
const message = document.querySelector(".wam-message");
const moles = Array.from(container.querySelectorAll(".wam-hole"));

let lastHole;
let score = 0;
let isPlaying = false;
let timeUp = false;

// 随机时间生成地鼠
function popUpMole() {
if (timeUp) return;
const time = Math.random() * (1500 - 500) + 500;
const hole = randomHole(moles);
hole.querySelector("div").classList.add("wam-mole--up");
setTimeout(() => {
hole.querySelector("div").classList.remove("wam-mole--up");
if (!timeUp) popUpMole();
}, time);
}

// 随机选择一个地鼠洞
function randomHole(holes) {
const idx = Math.floor(Math.random() * holes.length);
const hole = holes[idx];
if (hole === lastHole) return randomHole(holes);
lastHole = hole;
return hole;
}

// 点击地鼠
function whackMole(e) {
if (!e.isTrusted) return; // 防止作弊
if (!isPlaying) return;
if (!e.target.matches(".wam-mole")) return;
score++;
scoreBoard.textContent = `分数: ${score}`;
e.target.parentNode
.querySelector("div")
.classList.remove("wam-mole--up");
}
// 开始游戏
function startGame() {
score = 0;
scoreBoard.textContent = "分数: 0";
isPlaying = true;
timeUp = false;
message.textContent = "";
popUpMole();
setTimeout(() => {
isPlaying = false;
timeUp = true;
message.textContent = `一分钟您的得分是: ${score};点我再来一次!`;
}, 60000);
}

// 初始化地鼠洞
moles.forEach((mole) => mole.addEventListener("click", whackMole));
document
.querySelector(".wam-message")
.addEventListener("click", startGame);
</script>
</body>
</html>

结语

恭喜你,现在你已经创建了一个基本的打地鼠游戏!这个游戏可以作为一个起点,你可以添加计分系统、动画效果、音效等来提升游戏体验。记得保存你的代码,并在浏览器中打开HTML文件来查看游戏效果。祝你编程愉快!

感谢你的访问,期待与你在技术的道路上相遇!👋🌟🚀

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 何福海
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信