为什么我的功能无法正常工作?

时间:2013-11-24 04:11:07

标签: javascript html css sudoku

我正在开发一个数独谜题,除了它没有生成有效数字外,我还能正常工作。不过,我的函数应该生成有效数字。 (我从here得到的小提琴()函数。

这是我的generatePuzzle()函数:

// Generate sudoku puzzle
function generatePuzzle() {
    for(var h = 1; h <= 10; h++) {
        fiddle(rowVal);
    }
    //emptyCells();
    putCellVal();
    for(var f = 0; f < 80; f++) {
        if (document.forms[0].elements[f].value != '') {
            document.forms[0].elements[f].readOnly = 'readonly';
        }
    }
}

正如我所说,它不会生成有效数字。我的fiddle()功能仍然存在错误(http://blog.forret.com/2006/08/a-sudoku-challenge-generator/)。

我的JSFiddle

Click here

如果您不是数独玩家,请遵循以下规则:
Sudoku Grid
每行必须包含1 - 9 的每个数字
每列必须包含1 - 9 的每个数字
每个3 x 3正方形带有较粗边框的每个数字必须只有1 - 9 一次

JSFiddle链接: http://jsfiddle.net/oliverni/rq5m6/

2 个答案:

答案 0 :(得分:2)

交换,行/列/块的小提琴函数中的逻辑是正确的,您可以实际检查存储正确值的rowVal矩阵。

问题在于您将值分配给输入元素的方式。

function putCellVal() {
    var z = 0;
    for(var i = 0; i < rowVal.length; i++) {
        for(var j = 0; j < rowVal[i].length; j++) {
            document.forms[0].elements[z].value = rowVal[i][j];
            z++;
        }
    }
}

显然,您为每个块使用一个表,并且从上面的赋值逻辑中,您实际上是将rowVal的“行”分配给“块”。您可以检查rowVal [0]的值,即[1,9,8,4,2,3,6,5,7],即第一个块中的值

<table>
<tr>
    <td><input type="text" name="x0y0" maxlength="1">
    <td><input type="text" name="x1y0" maxlength="1">
    <td><input type="text" name="x2y0" maxlength="1">
</tr>
<tr>
    <td><input type="text" name="x0y1" maxlength="1">
    <td><input type="text" name="x1y1" maxlength="1">
    <td><input type="text" name="x2y1" maxlength="1">
</tr>
<tr>
    <td><input type="text" name="x0y2" maxlength="1">
    <td><input type="text" name="x1y2" maxlength="1">
    <td><input type="text" name="x2y2" maxlength="1">
</tr>
</table>

答案 1 :(得分:0)

我想我已经拥有了!我将一个巨大的表改为9个小表,但现在不是x0y5是元素5,现在它是元素11!