当前位置:首页 > JavaScript

js实现色子

2026-01-31 17:28:09JavaScript

实现色子的基本思路

使用JavaScript创建一个色子(骰子)模拟器,可以通过随机数生成1到6的数字,并显示对应的骰子点数图形。

HTML结构

创建一个简单的HTML容器,用于显示骰子图形和结果:

<div id="dice-container">
  <div id="dice-face"></div>
  <button id="roll-btn">掷骰子</button>
  <p id="result"></p>
</div>

CSS样式

为骰子添加基本样式,使其显示为正方形并包含点数:

#dice-face {
  width: 100px;
  height: 100px;
  background-color: white;
  border: 2px solid black;
  border-radius: 10px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 50px;
  margin: 20px;
}

JavaScript实现

使用DOM操作和随机数生成骰子结果:

const rollBtn = document.getElementById('roll-btn');
const diceFace = document.getElementById('dice-face');
const resultText = document.getElementById('result');

rollBtn.addEventListener('click', () => {
  // 生成1-6的随机数
  const randomNum = Math.floor(Math.random() * 6) + 1;

  // 更新骰子图形
  diceFace.textContent = getDiceFace(randomNum);

  // 显示结果
  resultText.textContent = `你掷出了: ${randomNum}`;
});

// 返回对应数字的骰子图形
function getDiceFace(num) {
  const diceFaces = {
    1: '⚀',
    2: '⚁',
    3: '⚂',
    4: '⚃',
    5: '⚄',
    6: '⚅'
  };
  return diceFaces[num];
}

进阶实现:动画效果

添加掷骰子的动画效果,使体验更真实:

rollBtn.addEventListener('click', () => {
  // 禁用按钮防止重复点击
  rollBtn.disabled = true;

  // 动画效果
  let rolls = 0;
  const animationInterval = setInterval(() => {
    const tempNum = Math.floor(Math.random() * 6) + 1;
    diceFace.textContent = getDiceFace(tempNum);
    rolls++;

    if(rolls > 10) {
      clearInterval(animationInterval);
      const finalNum = Math.floor(Math.random() * 6) + 1;
      diceFace.textContent = getDiceFace(finalNum);
      resultText.textContent = `你掷出了: ${finalNum}`;
      rollBtn.disabled = false;
    }
  }, 100);
});

使用Canvas绘制骰子

如需更自定义的骰子图形,可以使用Canvas API:

function drawDiceFace(num) {
  const canvas = document.createElement('canvas');
  canvas.width = 100;
  canvas.height = 100;
  const ctx = canvas.getContext('2d');

  // 绘制骰子背景
  ctx.fillStyle = 'white';
  ctx.fillRect(0, 0, 100, 100);
  ctx.strokeStyle = 'black';
  ctx.strokeRect(0, 0, 100, 100);

  // 根据数字绘制点数
  ctx.fillStyle = 'black';
  const positions = {
    1: [[50, 50]],
    2: [[20, 20], [80, 80]],
    3: [[20, 20], [50, 50], [80, 80]],
    4: [[20, 20], [20, 80], [80, 20], [80, 80]],
    5: [[20, 20], [20, 80], [50, 50], [80, 20], [80, 80]],
    6: [[20, 20], [20, 50], [20, 80], [80, 20], [80, 50], [80, 80]]
  };

  positions[num].forEach(pos => {
    ctx.beginPath();
    ctx.arc(pos[0], pos[1], 8, 0, Math.PI * 2);
    ctx.fill();
  });

  return canvas;
}

js实现色子

标签: 色子js
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #34…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…