1. HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="style.css" />
<title>Guess My Number!</title>
</head>
<body>
<header>
<h1>Guess My Number!</h1>
<p class="between">(Between 1 and 20)</p>
<button class="btn again">Again!</button>
<div class="number">?</div>
</header>
<main>
<section class="left">
<input type="number" class="guess" />
<button class="btn check">Check!</button>
</section>
<section class="right">
<p class="message">Start guessing...</p>
<p class="label-score">💯 Score: <span class="score">20</span></p>
<p class="label-highscore">
🥇 Highscore: <span class="highscore">0</span>
</p>
</section>
</main>
<script src="script.js"></script>
</body>
</html>
2. CSS代码
@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: inherit;
}
html {
font-size: 62.5%;
box-sizing: border-box;
}
body {
font-family: 'Press Start 2P', sans-serif;
color: #eee;
background-color: #222;
/* background-color: #60b347; */
}
/* LAYOUT */
header {
position: relative;
height: 35vh;
border-bottom: 7px solid #eee;
}
main {
height: 65vh;
color: #eee;
display: flex;
align-items: center;
justify-content: space-around;
}
.left {
width: 52rem;
display: flex;
flex-direction: column;
align-items: center;
}
.right {
width: 52rem;
font-size: 2rem;
}
/* ELEMENTS STYLE */
h1 {
font-size: 4rem;
text-align: center;
position: absolute;
width: 100%;
top: 52%;
left: 50%;
transform: translate(-50%, -50%);
}
.number {
background: #eee;
color: #333;
font-size: 6rem;
width: 15rem;
padding: 3rem 0rem;
text-align: center;
position: absolute;
bottom: 0;
left: 50%;
transform: translate(-50%, 50%);
}
.between {
font-size: 1.4rem;
position: absolute;
top: 2rem;
right: 2rem;
}
.again {
position: absolute;
top: 2rem;
left: 2rem;
}
.guess {
background: none;
border: 4px solid #eee;
font-family: inherit;
color: inherit;
font-size: 5rem;
padding: 2.5rem;
width: 25rem;
text-align: center;
display: block;
margin-bottom: 3rem;
}
.btn {
border: none;
background-color: #eee;
color: #222;
font-size: 2rem;
font-family: inherit;
padding: 2rem 3rem;
cursor: pointer;
}
.btn:hover {
background-color: #ccc;
}
.message {
margin-bottom: 8rem;
height: 3rem;
}
.label-score {
margin-bottom: 2rem;
}
3. .prettierrc
{
"singleQuote": true,
"arrowParens": "avoid"
}
大概样式
4. 要求
- 用户输入数字后,点击猜数字按钮时,能给出提示,这个数字高了 / 低了
- 用户没有输入数字,给出提示,指出用户没有输入数字
- 用户猜赢后,提示用户猜赢了,改变背景颜色(##60b347),再次点击check按钮时不能继续猜数字,要点击again重新开始
- 用户有20次猜数字的机会,每猜一次数字,Score就会减1,记录用户的最好成绩highscore
5. JavaScript
'use strict'; //严格模式
//DOM是什么
//DOM代表文档对象模型 DOM允许我们使用JavaScript访问HTML元素和样式来操纵他们
//更改文本、更改HTML属性并更改CSS样式
/*
//读取文字
console.log(document.querySelector('.message').textContent);
//更改文字
document.querySelector('.message').textContent = 'Correct Number!';
console.log(document.querySelector('.message').textContent);
//score
document.querySelector('.number').textContent = 13;
document.querySelector('.score').textContent = 10;
//input
document.querySelector('.guess').value = 23;
console.log(document.querySelector('.guess').value);
*/
//事件监听器 addEventListener
// Math.trunc 转成整数
//设定随机号码
let secretNumber = Math.trunc(Math.random() * 20) + 1;
//设置分数
let score = 20;
//设置最高分
let highscore = 0;
//重构
const displayMessage = function (message) {
document.querySelector('.message').textContent = message;
};
//控制台获得用户输入的字符 还有字符类型
document.querySelector('.check').addEventListener('click', function () {
const guess = Number(document.querySelector('.guess').value);
console.log(guess, typeof guess);
//1.如果没有猜数字
if (!guess) {
displayMessage('No Number!');
} else if (guess === secretNumber) {
//2.如果猜的数字与答案一样 改变背景
displayMessage('Correct Number');
document.querySelector('.number').textContent = secretNumber;
//修改背景
document.querySelector('body').style.backgroundColor = '#60b347';
document.querySelector('.number').style.width = '30rem';
if (score > highscore) {
//如果当前分数比用户最好分数高,改变用户最好分数
highscore = score;
document.querySelector('.highscore').textContent = highscore;
}
} else if (guess !== secretNumber) {
//如果猜的数字不准
if (score > 1) {
//猜的剩余次数比1大,继续猜
// document.querySelector('.message').textContent =
// guess > secretNumber ? 'too high!' : 'too low';
score--;
//三元判断 如果猜的数比答案大为真,就写太高了,若为假,就写太低了
displayMessage(guess > secretNumber ? 'too high!' : 'too low');
document.querySelector('.score').textContent = score;
} else {
//猜的次数耗尽 结束游戏
displayMessage('you lost the game ');
document.querySelector('.score').textContent = 0;
}
}
});
//重新开始游戏
document.querySelector('.again').addEventListener('click', function () {
//可以当作是游戏的初始化
score = 20;
secretNumber = Math.trunc(Math.random() * 20) + 1;
displayMessage('String guessing....');
// document.querySelector('.message').textContent = 'String guessing....';
document.querySelector('.score').textContent = score;
document.querySelector('.number').textContent = '?';
document.querySelector('.guess').value = '';
document.querySelector('body').style.backgroundColor = '#222';
document.querySelector('.number').style.width = '15rem';
});