发布于 2026-01-06 9 阅读
0

使用 JavaScript 和 CSS 实现抛硬币游戏

使用 JavaScript 和 CSS 实现抛硬币游戏

本文将教你如何使用 JavaScript 创建一个抛硬币游戏。我们经常看到各种类型的板球比赛或其他类型的比赛。本文将向你展示如何用代码实现它。为此,你需要具备 HTML、CSS 和 JavaScript 的基础知识。

观看演示视频了解其工作原理。我在这里创建了一个方框。首先,我用两张图片在这个方框里创建了一枚硬币。然后,还有一个小方框,用来显示游戏结果。下方有两个按钮,一个用于开始游戏,另一个用于重新开始游戏。

点击“抛硬币”按钮后,硬币会继续绕 x 轴旋转。旋转三秒后,它会在某个方向停止。停止的方向完全随机。我使用了 JavaScript 的 Math.random 函数来实现这一点。

第一步:抛硬币游戏的基本结构

使用以下 HTML 和 CSS 代码创建了这个硬币游戏的基本结构。游戏的width is 400px高度取决于内边距。

这里我使用了white as background-color圆角。圆角使盒子的四个角略微圆润。

<div class="container">

</div>
Enter fullscreen mode Exit fullscreen mode
*{
    padding: 0;
    margin: 0;
    box-sizing: border-box;
    font-family: "Rubik",sans-serif;
}

body{
    height: 100%;
    background: #1f5a82;
}

.container{
    background-color: #ffffff;
    width: 400px;
    padding: 35px;
    position: absolute;
    transform: translate(-50%,-50%);
    top: 50%;
    left: 50%;
    box-shadow: 15px 30px 35px rgba(0,0,0,0.1);
    border-radius: 10px;
    -webkit-perspective: 300px;
    perspective: 300px;
}
Enter fullscreen mode Exit fullscreen mode

抛硬币游戏的基本结构

步骤二:借助图像创建硬币

现在我用两张图片制作了这枚硬币。这枚硬币我用了正面和反面的图片。您可以点击此链接下载图片,或者从您选择的互联网资源中获取。

images are 145 px尽量使图片大小相同,背景透明。图片的高度和宽度也应保持一致position: absolute

我在transform: rotateX这里将两幅图像分别放置在彼此的两侧。然后我旋转了第二幅图像180 along the x axis。这样,第一幅图像和第二幅图像就分别位于彼此的两侧。每当我们将硬币旋转180度时,我们就能看到第二幅图像。

<div class="coin" id="coin">

   <div class="heads">
      <img src="head.jpg">
   </div>

   <div class="tails">
      <img src="tails.jpg">
   </div>

</div>
Enter fullscreen mode Exit fullscreen mode
.coin{
    height: 150px;
    width: 150px;
    position: relative;
    margin: 32px auto;
    -webkit-transform-style: preserve-3d;
            transform-style: preserve-3d;
}
.coin img{
    width: 145px;
}
.heads,.tails{
    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
            backface-visibility: hidden;
}
.tails{
    transform: rotateX(180deg);
}
Enter fullscreen mode Exit fullscreen mode

现在我已经设置好了让硬币旋转的功能@keyframes。点击按钮后,硬币会旋转几次。以下代码用于实现这种旋转效果。

在这种情况下,我使用的视角比第一张图多了180度。你可能会好奇我为什么这样做。

主要原因是我已经见过第二张图片旋转180度后的样子。所以这次我少用了180度角。

@keyframes spin-tails{
    0%{
        transform: rotateX(0);
    }
    100%{
        transform: rotateX(1980deg);
    }
}
@keyframes spin-heads{
    0%{
        transform: rotateX(0);
    }
    100%{
        transform: rotateX(2160deg);
    }
}
Enter fullscreen mode Exit fullscreen mode

借助图像创建硬币

步骤 3:创建一个显示界面来查看游戏结果

现在我已经创建了一个显示屏,可以用来查看这场比赛的结果。

<div class="stats">
    <p id="heads-count">Heads: 0</p>
    <p id="tails-count">Tails: 0</p>
</div>
Enter fullscreen mode Exit fullscreen mode
.stats{
    display: flex;
    color: #101020;
    font-weight: 500;
    padding: 20px;
    margin-bottom: 40px;
    margin-top: 55px;
    box-shadow: 0 0 20px rgba(0,139,253,0.25);
}

.stats p:nth-last-child(1){
  margin-left: 50%;
}
Enter fullscreen mode Exit fullscreen mode

创建一个显示屏来查看游戏结果

第四步:控制抛硬币游戏的按钮

最后我做了两个按钮。一个用于开始游戏,另一个用于重新开始游戏。按钮是两个widths 150 px,我用了 border-radius 属性让它们变成圆形。

<div class="buttons">
   <button id="flip-button">Flip Coin</button>
   <button id="reset-button">Reset</button>
</div>
Enter fullscreen mode Exit fullscreen mode
.buttons{
    display: flex;
    justify-content: space-between;
}
button{
    width: 150px;
    padding: 15px 0;
    border: none;
    font-size: 16px;
    border-radius: 5px;
    cursor: pointer;
}
Enter fullscreen mode Exit fullscreen mode

现在我为两个按钮使用了不同的颜色。第一个按钮的背景色是蓝色,第二个按钮的背景色是赭色。

#flip-button{
    background-color: #053469;
    color: #ffffff;
}

#reset-button{
    background-color: #674706;
    color: white;
}
Enter fullscreen mode Exit fullscreen mode

控制抛硬币游戏的按钮

步骤 5:使用 JavaScript 激活此抛硬币游戏

以上我们已经用 HTML 和 CSS 设计好了整个界面。现在是时候借助 JavaScript 让这个抛硬币游戏完全正常运行了。首先,我确定了一些类和 ID 函数的可靠解决方案。

let coin = document.querySelector(".coin");
let flipBtn = document.querySelector("#flip-button");
let resetBtn = document.querySelector("#reset-button");
Enter fullscreen mode Exit fullscreen mode

我已将正面和反面的值设置为零,这意味着当游戏在正常情况下启动时,这两个值will be zero

let heads = 0;
let tails = 0;
Enter fullscreen mode Exit fullscreen mode

现在我已经用 if 函数实现了这个功能。我使用Math.random`setTimeout` 函数设置了一个随机值 `i`,并设置了一个时间。这里我使用了 3000 毫秒,这意味着这枚硬币将持续旋转 3000 毫秒。

flipBtn.addEventListener("click", () => {
    let i = Math.floor(Math.random() * 2);
    coin.style.animation = "none";
    if(i){
        setTimeout(function(){
            coin.style.animation = "spin-heads 3s forwards";
        }, 100);
        heads++;
    }
    else{
        setTimeout(function(){
            coin.style.animation = "spin-tails 3s forwards";
        }, 100);
        tails++;
    }
    setTimeout(updateStats, 3000);
    disableButton();
});
Enter fullscreen mode Exit fullscreen mode

现在我使用了以下代码来显示游戏结果。这将帮助您实时统计正面和反面的次数。

function updateStats(){
    document.querySelector("#heads-count").textContent = `Heads: ${heads}`;
    document.querySelector("#tails-count").textContent = `Tails: ${tails}`;
}
Enter fullscreen mode Exit fullscreen mode

现在我按下了禁用按钮。你可能会想,这里怎么没有分贝按钮呢?🤔

事实上,当硬币继续旋转时,“翻转按钮”的音量会达到最大。因此,在这三秒钟内您将无法点击此按钮。这样做主要是为了保持游戏的平衡性。

function disableButton(){
    flipBtn.disabled = true;
    setTimeout(function(){
        flipBtn.disabled = false;
    },3000);
}
Enter fullscreen mode Exit fullscreen mode

现在我已经激活了重置按钮。点击重置按钮后,正面和反面的数值都将归零。此时不会有任何动画效果,也就是说硬币将保持静止。

resetBtn.addEventListener("click",() => {
    coin.style.animation = "none";
    heads = 0;
    tails = 0;
    updateStats();
});
Enter fullscreen mode Exit fullscreen mode

使用 JavaScript 实现抛硬币游戏
这个用 JavaScript 编写的抛硬币游戏完全是为了娱乐你而设计的。我还使用了一些 CSS 代码来设计禁用按钮。

#flip-button:disabled{
    background-color: #e1e0ee;
    border-color: #e1e0ee;
    color: #101020;
}
Enter fullscreen mode Exit fullscreen mode

点击该按钮后,该按钮的背景颜色和文字颜色将改变三秒钟。

相关帖子:

  1. 响应式页脚 HTML CSS
  2. 海德拉巴的寄宿学校
  3. 使用 JavaScript 的简单秒表
  4. JavaScript 密码生成器
  5. 海德拉巴的国际学校
  6. 使用 HTML 和 CSS 的侧边栏菜单

希望这篇文章能教会你如何使用 JavaScript 创建这个抛硬币游戏。请务必留言告诉我你对这篇教程的看法。

文章来源:https://dev.to/shantanu_jana/coin-toss-game-using-javascript-css-1cf0