这是一个猜成语的网页游戏,用户根据显示的成语 首字母 来猜测对应的四字成语。
例如 ABBS = 哀兵必胜 ABJB = 按部就班
功能特点
- 随机生成四字成语的首字母缩写
- 用户输入猜测的成语并提交验证
- 正确 / 错误答案的反馈
- 重置功能,确保游戏流程顺畅
- 界面元素合理布局,视觉层次分明
技术实现
- 使用idioms对象数组存储成语信息,每个对象包含:
code
:成语中文写法letter
:成语首字母缩写explain
:成语解释
- DOM 操作:通过
document.getElementById
获取和操作页面元素 - 事件监听:使用
addEventListener
绑定按钮点击事件 - 随机数生成:
Math.random()
用于随机选择成语 - 字符串处理:验证用户输入与正确答案
项目结构
项目代码
一、游戏界面和基本结构
整体结构:页面使用了简单的垂直布局,从上到下依次是标题、游戏规则说明和游戏区域。
- 使用
<link>
标签,并行加载CSS文件 - 同时在页面中适当添加了[emoji表情],增加页面的趣味性(emoji6.com/emojiall/)
<!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="guess.css">
</head>
<body>
<h1>🎉欢迎来到猜成语游戏!🎉</h1>
<div class="rule">
✨️游戏规则:请根据这个四字成语首字母,来猜出所对应的四字成语
<br>点击"提示"按钮可以获得成语的解释
</div>
<div class="game">
<div id="clue">abdc</div>
<input type="text" id="answer" placeholder="请输入成语">
<button id="submit-btn">提交答案</button>
<div id="result"></div>
<button id="hint-btn">提示</button>
<div id="hint"></div>
<button id="next-btn">下一个成语</button>
</div>
<!-- 引入js文件 -->
<script src="guess.js"></script>
</body>
</html>
背景设置:使用彩虹图片作为背景,并设置为覆盖整个页面,省去了使用标签,然后设置样式的步骤,避免图片元素对文档流的影响,保持了 HTML 结构的简洁
body{
background-image:url('img/彩虹.jpg');
background-size:cover;
}
游戏区域:
- 成语首字母显示区:以大号字体展示成语首字母
- 输入框:用户输入猜测的成语
- 提交按钮:提交答案
- 结果显示区:显示用户猜测的结果
- 提示按钮:获取成语解释
- 下一个成语按钮:开始新的一轮游戏
样式设置:
1.游戏区域使用margin-top: 50px;
属性实现整体下移,不遮挡图片
h1 {
font-size: 60px;
text-align: center;
color: #ee2746;
}
.rule {
text-align: center;
font-size: 25px;
color: whitesmoke;
}
.game {
margin: auto;//居中
width: 900px;
height: 450px;
text-align: center;
margin-top: 50px;
}
#clue {
font-size: 130px;
font-weight: bold;
/* 字母间距 */
letter-spacing: 20px;
margin: 20px 0;
color: black;
}
.result {
margin: 20px 0;
font-size: 18px;
}
.hint {
margin: 10px 0;
font-size: 30px;
color: #1ba784;
}
input{
padding: 18px 30px;
font-size: 35px;
border: 2px solid #1ba784;
border-radius: 5px;
}
2.对按钮进行了样式设置,添加了鼠标悬停效果,使按钮变得更加好看,这里的颜色我是通过[中国色]选择的,里面有特别多颜色,可供选择,其他两个按钮同理(www.zhongguose.com/)
二、代码实现
把信息存储到数组中: 这里成语数据页可以进行自行添加
- 使用
Math.random()
生成一个 0 到 1 之间的随机小数,乘以idioms
数组的长度后取整,得到一个随机的成语索引。 - 根据随机索引从
idioms
数组中获取对应成语的首字母缩写。
// 成语数据
const idioms = [
{ code: "安步当车", letter: "ABDC", explain: "以从容的步行代替乘车。形容轻松缓慢地行走。也指人闲适自得,从容而行。" },
{ code: "爱不释手", letter: "ABSS", explain: "喜爱得舍不得放手。" },
{ code: "按部就班", letter: "ABJB", explain: "按照一定的步骤、顺序进行。也指按老规矩办事,缺乏创新精神。" },
{ code: "八拜之交", letter: "BBZJ", explain: "旧时朋友结为兄弟的关系。" }
];
let currentIdiomIndex = 0;
// 随机生成首字母
function generateClue() {
currentIdiomIndex = Math.floor(Math.random() * idioms.length);//生成随机数,得到一个随机的成语索引
const letter = idioms[currentIdiomIndex].letter;//从 idioms 数组中获取对应成语的首字母缩写
document.getElementById('clue').innerText = letter;//将首字母缩写显示在页面上的 clue 元素中
document.getElementById('result').innerText = '';
document.getElementById('hint').innerText = '';//清空元素内容
document.getElementById('next-btn').style.display = 'none';//隐藏按钮
}
对提交答案按钮进行监听
检查答案是否正确,并给出提示,同时显示 下一个成语 按钮
// 监听提交答案按钮的点击事件,
document.getElementById('submit-btn').addEventListener('click', function () {
const userAnswer = document.getElementById('answer').value.trim();
const correctAnswer = idioms[currentIdiomIndex].code;
if (userAnswer === correctAnswer) {
document.getElementById('result').innerText = '🎊恭喜你,猜对了,棒棒哒,请继续加油哦!';
document.getElementById('result').style.color = '#1ba784';
document.getElementById('result').style.fontSize = '30px';
} else {
document.getElementById('result').innerText = '🧨很遗憾,猜错了,请点击提示按钮,再试一次吧!';
document.getElementById('result').style.color = '#e16c96';
document.getElementById('result').style.fontSize = '30px';
}
document.getElementById('next-btn').style.display = 'inline-block';
});
提示功能
将当前随机选中成语的解释,显示在页面上的 hint 元素中
// 提示功能,将当前随机选中成语的解释显示在页面上的 hint 元素中
document.getElementById('hint-btn').addEventListener('click', function () {
const explanation = idioms[currentIdiomIndex].explain;
document.getElementById('hint').innerText = explanation;
});
生成下一个成语并初始化游戏
调用 generateClue 函数重新随机选取一个成语并显示首字母缩写
// 下一个成语
document.getElementById('next-btn').addEventListener('click', function () {
generateClue();//重新随机选取一个成语并显示首字母缩写
document.getElementById('answer').value = '';//同时清空用户输入框
});
// 初始化游戏
generateClue();
总结
这是一个由HTML+CSS+JS组成的猜成语小游戏,同时为用户提供了一个有趣且易于使用的成语学习工具
当然我的项目还有不足之处,欢迎大家留言点评,我后续也会进行完善!