使用 JavaScript 和 CSS 实现抛硬币游戏
本文将教你如何使用 JavaScript 创建一个抛硬币游戏。我们经常看到各种类型的板球比赛或其他类型的比赛。本文将向你展示如何用代码实现它。为此,你需要具备 HTML、CSS 和 JavaScript 的基础知识。
观看演示视频了解其工作原理。我在这里创建了一个方框。首先,我用两张图片在这个方框里创建了一枚硬币。然后,还有一个小方框,用来显示游戏结果。下方有两个按钮,一个用于开始游戏,另一个用于重新开始游戏。
点击“抛硬币”按钮后,硬币会继续绕 x 轴旋转。旋转三秒后,它会在某个方向停止。停止的方向完全随机。我使用了 JavaScript 的 Math.random 函数来实现这一点。
第一步:抛硬币游戏的基本结构
使用以下 HTML 和 CSS 代码创建了这个硬币游戏的基本结构。游戏的width is 400px高度取决于内边距。
这里我使用了white as background-color圆角。圆角使盒子的四个角略微圆润。
<div class="container">
</div>
*{
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;
}
步骤二:借助图像创建硬币
现在我用两张图片制作了这枚硬币。这枚硬币我用了正面和反面的图片。您可以点击此链接下载图片,或者从您选择的互联网资源中获取。
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>
.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);
}
现在我已经设置好了让硬币旋转的功能@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);
}
}
步骤 3:创建一个显示界面来查看游戏结果
现在我已经创建了一个显示屏,可以用来查看这场比赛的结果。
<div class="stats">
<p id="heads-count">Heads: 0</p>
<p id="tails-count">Tails: 0</p>
</div>
.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%;
}
第四步:控制抛硬币游戏的按钮
最后我做了两个按钮。一个用于开始游戏,另一个用于重新开始游戏。按钮是两个widths 150 px,我用了 border-radius 属性让它们变成圆形。
<div class="buttons">
<button id="flip-button">Flip Coin</button>
<button id="reset-button">Reset</button>
</div>
.buttons{
display: flex;
justify-content: space-between;
}
button{
width: 150px;
padding: 15px 0;
border: none;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
}
现在我为两个按钮使用了不同的颜色。第一个按钮的背景色是蓝色,第二个按钮的背景色是赭色。
#flip-button{
background-color: #053469;
color: #ffffff;
}
#reset-button{
background-color: #674706;
color: white;
}
步骤 5:使用 JavaScript 激活此抛硬币游戏
以上我们已经用 HTML 和 CSS 设计好了整个界面。现在是时候借助 JavaScript 让这个抛硬币游戏完全正常运行了。首先,我确定了一些类和 ID 函数的可靠解决方案。
let coin = document.querySelector(".coin");
let flipBtn = document.querySelector("#flip-button");
let resetBtn = document.querySelector("#reset-button");
我已将正面和反面的值设置为零,这意味着当游戏在正常情况下启动时,这两个值will be zero。
let heads = 0;
let tails = 0;
现在我已经用 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();
});
现在我使用了以下代码来显示游戏结果。这将帮助您实时统计正面和反面的次数。
function updateStats(){
document.querySelector("#heads-count").textContent = `Heads: ${heads}`;
document.querySelector("#tails-count").textContent = `Tails: ${tails}`;
}
现在我按下了禁用按钮。你可能会想,这里怎么没有分贝按钮呢?🤔
事实上,当硬币继续旋转时,“翻转按钮”的音量会达到最大。因此,在这三秒钟内您将无法点击此按钮。这样做主要是为了保持游戏的平衡性。
function disableButton(){
flipBtn.disabled = true;
setTimeout(function(){
flipBtn.disabled = false;
},3000);
}
现在我已经激活了重置按钮。点击重置按钮后,正面和反面的数值都将归零。此时不会有任何动画效果,也就是说硬币将保持静止。
resetBtn.addEventListener("click",() => {
coin.style.animation = "none";
heads = 0;
tails = 0;
updateStats();
});

这个用 JavaScript 编写的抛硬币游戏完全是为了娱乐你而设计的。我还使用了一些 CSS 代码来设计禁用按钮。
#flip-button:disabled{
background-color: #e1e0ee;
border-color: #e1e0ee;
color: #101020;
}
点击该按钮后,该按钮的背景颜色和文字颜色将改变三秒钟。
相关帖子:
希望这篇文章能教会你如何使用 JavaScript 创建这个抛硬币游戏。请务必留言告诉我你对这篇教程的看法。
文章来源:https://dev.to/shantanu_jana/coin-toss-game-using-javascript-css-1cf0



