如何调整随机化级别的javascript

Mur*_*sli 7 javascript

我正在使用javascript开发8个益智游戏,我通过改组拼图瓷砖阵列来洗牌

在此输入图像描述

var shuffleArray = (array) => {
  var currentIndex = array.length, temporaryValue, randomIndex;
  while (0 !== currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }
  return array;
};
Run Code Online (Sandbox Code Playgroud)

我想给用户提供选择难度的选项:简单,中等,难度,我该如何实现这个?

更新:

我会解释一下我的建议.(这是打字稿)

拼图数组是一个类的数组 PuzzleNode

export class PuzzleNode {
  goal: Node;
  current: Node;
}
Run Code Online (Sandbox Code Playgroud)

当我洗牌时,我不会碰到puzzleArray,但我会current像这样洗牌

shuffle() {
   this.shuffledNodes = shuffleArray(this.shuffledNodes);
   for (let i = 0; i < this.shuffledNodes.length; i++) {
     this.puzzleNodes[i].current = this.shuffledNodes[i];
   }
   /** Keep shuffling until getting a solvable puzzle */
   if (!this.isSolvable()) {
     this.shuffle();
    }
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以使用索引到达任何节点,因为即使在洗牌后索引也不会改变,例如空白磁贴总是 puzzleNodes[8]

tho*_*ter 5

改变难度的方法是减少或增加解决它所需的移动次数.

我认为解决这个问题的最佳方法是实现改组算法,与其解决方法相反:在改组的同时,只选择合法的移动(将一块移动到相邻的间隙中),然后随机重复一次移动次数,直到它被充分洗牌.

对于简易模式,仅执行约5次移动.为了努力,做30步.一个需要5个动作才能解决的谜题将会容易得多.