在JavaScript开发数独游戏(一)中已经介绍了项目的框架搭建过程,下面讲讲数独游戏实现。
首先是要创建一个9x9的矩阵用数组表示。创建的方式有很多种,但是我们最终要定位到每一个单元格中,这里用行作为第一维数组由9个数组组成,每个数组作为第二维。
先用函数生成行数组,如下:
function makeRow(v = 0) {
const array = new Array(9);
array.fill(v);
return array;
}
再生成一个数组然后把行数组作为参数传递,如下:
function makeMatrix(v = 0) {
return Array.from({length: 9}, () => makeRow(v));
}
这里用到伪数组,如果makeMatrix()直接用相同方法生成数组,更改一个值的时候所有相同下标二维数组对应的值都会改变,因为makeRow()函数只调用一次。解决的方法是构造一个伪数组将数组每个元素进行映射。
这里还要介绍一下几个算法:
随机算法
需要将整个矩阵的数字打乱,采用经典洗牌算法实现:
function shuffle(array) {
const endIndex = array.length - 2;
for (let i = 0; i <= endIndex; i++) {
const j = i + Math.floor(M