You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS实现数独游戏如何按难度随机展示对应比例的数组元素

按难度生成数独展示棋盘实现方案

核心逻辑很直接:基于已有的完整正确解solution,按难度对应比例随机保留指定数量的数字,剩余位置替换为"-",生成的board格式和你现有代码完全兼容,不需要修改原有交互、校验逻辑。


1. 定义难度配置

先统一维护三个难度对应的数字保留比例,后续调整比例直接改配置就行:

// 难度与对应展示比例映射
const DIFFICULTY_CONFIG = {
  easy: 0.75,   // 简单:保留75%
  medium: 0.5,  // 中等:保留50%
  hard: 0.25    // 困难:保留25%
}

2. 编写随机棋盘生成函数

函数接收完整解和目标难度两个参数,输出符合格式要求的board数组:

/**
 * 按指定难度生成渲染用棋盘
 * @param {Array} fullSolution 数独完整合法解,格式为9个长度为9的字符串组成的数组
 * @param {string} level 难度值:easy/medium/hard
 * @returns {Array} 可直接用于渲染的board数组
 */
function generateBoard(fullSolution, level) {
  const TOTAL_CELLS = 81; // 9*9棋盘总格子数
  const keepNum = Math.round(TOTAL_CELLS * DIFFICULTY_CONFIG[level]);
  // 初始化全为"-"的空棋盘,用数组结构方便单格修改
  const tempBoard = Array(9).fill("").map(() => Array(9).fill("-"));
  // 记录已选中的预置格子坐标,避免重复
  const pickedCells = new Set();

  // 随机选格子填数,直到凑够对应难度需要保留的数量
  while (pickedCells.size < keepNum) {
    // 生成0-8范围的随机行列坐标
    const row = Math.floor(Math.random() * 9);
    const col = Math.floor(Math.random() * 9);
    const cellKey = `${row}-${col}`;
    if (!pickedCells.has(cellKey)) {
      pickedCells.add(cellKey);
      tempBoard[row][col] = fullSolution[row][col];
    }
  }
  // 把每行数组拼接回字符串,和你原有board格式完全一致
  return tempBoard.map(row => row.join(""));
}

3. 替换原有硬编码的board逻辑

删掉你原来写死的board数组,改成页面初始化时动态生成:

let numSelected = null;
let tileSelected = null;
let errors = 0;
// 原有solution数组保持不变
let solution = [
  "387491625",
  "241568379",
  "569327418",
  "758619234",
  "123784596",
  "496253187",
  "934176852",
  "675832941",
  "812945763"
]
let board = []; // 改为动态赋值

window.onload = function() {
  // 初始化时可指定默认难度,后续加难度切换按钮时只要重新调用generateBoard即可
  board = generateBoard(solution, "medium"); // 这里默认中等难度,可自行修改
  setGame()
}

拓展功能提示:如果要做切换难度、重新开局功能,只需要在用户触发对应操作时,先清空#board容器内的旧格子,重置错误计数为0,传入新的难度值调用generateBoard拿到新棋盘,再重新执行棋盘渲染逻辑即可,不需要改动其他代码。

内容的提问来源于stack exchange,提问作者Eitan Leiberman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:39:09