效果图



 

代码
<!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="https://use.fontawesome.com/releases/v5.11.2/css/all.css"
    />
    <link rel="stylesheet" href="style.css" />
    <title>石头剪刀布</title>
  </head>
  <body>
    <div class="container">
      <header class="header">
        <h1>石头剪刀布</h1>
        <button id="restart" class="restart-btn">
          重新开始
        </button>
        <div id="score" class="score">
          <p>玩家:0</p>
          <p>电脑:0</p>
        </div>
      </header>
      <h2>请做出你的选择</h2>
      <div class="choices">
        <i id="rock" class="choice fas fa-hand-rock fa-10x"></i>
        <i id="paper" class="choice fas fa-hand-paper fa-10x"></i>
        <i id="scissors" class="choice fas fa-hand-scissors fa-10x"></i>
      </div>
    </div>
    <!-- modal -->
    <div class="modal">
      <div id="result" class="modal-content"></div>
    </div>
    <script src="main.js"></script>
  </body>
</html>
:root {
  --primary-color: #003699;
  --dark-color: #333333;
  --light-color: #f4f4f4;
  --lose-color: #dc3545;
  --win-color: #28a745;
  --modal-duration: 1s;
}
* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}
body {
  font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  line-height: 1.6;
  background-color: #fff;
  color: #333;
}
.container {
  max-width: 1100px;
  margin: auto;
  overflow: hidden;
  padding: 0 2rem;
  text-align: center;
}
.restart-btn {
  display: none;
  background: var(--light-color);
  color: #333;
  padding: 0.4rem 1.3rem;
  font-size: 1rem;
  cursor: pointer;
  outline: none;
  border: none;
  margin-bottom: 1rem;
}
.restart-btn:hover {
  background: var(--primary-color);
  color: #fff;
}
.header {
  text-align: center;
  margin: 1rem 0;
}
.header h1 {
  margin-bottom: 1rem;
}
.score {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  font-size: 1.2rem;
  color: #fff;
}
.score p:first-child {
  background: var(--primary-color);
}
.score p:last-child {
  background: var(--dark-color);
}
.choices {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 2rem;
  margin-top: 3rem;
  text-align: center;
}
.choice {
  cursor: pointer;
}
.choice:hover {
  color: var(--primary-color);
}
.text-win {
  color: var(--win-color);
}
.text-lose {
  color: var(--lose-color);
}
/* modal */
.modal {
  display: none;
  position: fixed;
  z-index: 1;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  overflow: auto;
  background: rgba(0, 0, 0, 0.5);
  animation-name: modalopen;
  animation-duration: var(--modal-duration);
}
.modal-content {
  background-color: #fff;
  text-align: center;
  margin: 10% auto;
  width: 350px;
  border-radius: 10px;
  padding: 3rem;
  box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.2), 0 7px 20px 0 rgba(0, 0, 0, 0.17);
}
.modal-content h1 {
  margin-bottom: 1rem;
}
.modal-content p {
  font-size: 1.2rem;
  margin-top: 1rem;
}
@keyframes modalopen {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/* 媒体查询 */
@media (max-width: 700px) {
  .choice {
    font-size: 110px;
  }
}
@media (max-width: 500px) {
  .choice {
    font-size: 80px;
  }
}
// 获取dom节点
const choices = document.querySelectorAll(".choice");
const score = document.getElementById("score");
const result = document.getElementById("result");
const restart = document.getElementById("restart");
const modal = document.querySelector(".modal");
const scoreboard = {
  player: 0,
  computer: 0
};
// play game
function play(e) {
  // 显示重新开始按钮
  restart.style.display = "inline-block";
  // 获取玩家的选择
  const playerChoice = e.target.id;
  // 获得电脑的选择
  const computerChoice = getComputerChoice();
  //   console.log(playerChoice, computerChoice);
  // 决定胜负
  const winner = getWinner(playerChoice, computerChoice);
  console.log(playerChoice, computerChoice, winner);
  showWinner(winner, computerChoice);
}
// getComputerChoice
function getComputerChoice() {
  const rand = Math.random();
  if (rand < 0.33) {
    return "rock";
  } else if (rand <= 0.67) {
    return "paper";
  } else {
    return "scissors";
  }
}
//  getWinner
function getWinner(p, c) {
  if (p === c) {
    return "draw";
  } else if (p === "rock") {
    if (c === "paper") {
      return "computer";
    } else {
      return "player";
    }
  } else if (p === "paper") {
    if (c === "scissors") {
      return "computer";
    } else {
      return "player";
    }
  } else if (p === "scissors") {
    if (c === "rock") {
      return "computer";
    } else {
      return "player";
    }
  }
}
// show winner
function showWinner(winner, computerChoice) {
  if (winner === "player") {
    scoreboard.player++;
    result.innerHTML = `
        <h1 class="text-win">恭喜你,你赢了</h1>
        <p>电脑的选择为</p>
        <i class="fas fa-hand-${computerChoice} fa-10x"></i>
        `;
  } else if (winner === "computer") {
    scoreboard.computer++;
    result.innerHTML = `
    <h1 class="text-lose">抱歉,你输了</h1>
    <p>电脑的选择为</p>
    <i class="fas fa-hand-${computerChoice} fa-10x"></i>
    `;
  } else {
    result.innerHTML = `
    <h1>双方平局</h1>
    <p>电脑的选择为</p>
    <i class="fas fa-hand-${computerChoice} fa-10x"></i>
    `;
  }
  //   显示分数
  score.innerHTML = `
<p>玩家:${scoreboard.player}</p>
<p>电脑:${scoreboard.computer}</p>
`;
  // 显示modal
  modal.style.display = "block";
}
// clearModal
function clearModal(e) {
  if (e.target == modal) {
    modal.style.display = "none";
  }
}
// restartGame
function restartGame() {
  scoreboard.player = 0;
  scoreboard.computer = 0;
  score.innerHTML = `
    <p>玩家:0</p>
    <p>电脑:0</p>
    `;
}
// 事件监听
choices.forEach(choice => choice.addEventListener("click", play));
window.addEventListener("click", clearModal);
restart.addEventListener("click", restartGame);



















