0

シンプルなメモリ マッチング ゲームを作成しようとしていますが、cardValues 配列から各テーブル セルに 1 つの数値を割り当てるのに問題があります。私の giveCellValue 関数は、乱数を生成し、配列からその数を選択して、表のセルの 1 つに与えることになっていますが、これについては少し頭を悩ませており、このタスクを達成するのに問題があります。

var countCells;
var cardValues = [];
var checker = true;
var createTable = function (col, row) {
    $('table').empty();
    for (i = 1; i <= col; i++) {
        $('table').append($('<tr>'));
    }
    for (j = 1; j <= row; j++) {
        $('tr').append($('<td>'));
    }
    countCells = row * col;
};
createTable(3, 6);
for (i = 1; i <= countCells / 2; i++) {
    cardValues.push(i);
    if (i === countCells / 2 && checker) {
        checker = false;
        i = 0;
    }
}

var giveCellValue = function () {
    var random = Math.ceil(Math.random() * cardValues.length) - 1;
    for (i = 0; i <= cardValues.length; i++) {
        $('td').append(cardValues[random]);
        cardValues.splice(random, 1);
    }
};

giveCellValue();
console.log(cardValues);
4

2 に答える 2

1

使用する

var countCells;
var cardValues = [];
var checker = true;

var createTable = function (col, row) {
    $('table').empty();
    for (var i = 0; i < col; i++) {
        $('table').append($('<tr>'));
    }
    for (var j = 0; j < row; j++) {
        $('tr').append($('<td>'));
    }
    countCells = row * col;
};
createTable(3, 6);

for (i = 0; i < countCells; i++) {
    cardValues.push(i % 9 + 1);
}

var giveCellValue = function () {
    var len = cardValues.length, tds = $('td');
    for (var i = 0; i < len; i++) {
        var random = Math.floor(Math.random() * cardValues.length);
        tds.eq(i).append(cardValues.splice(random, 1));
    }
};

giveCellValue();
console.log(cardValues);

デモ:フィドル

于 2013-06-24T08:41:40.740 に答える
0

上記のコメントですでに言及されている問題はさておき...

私が正しく理解している場合、cardValues の各数値をランダムなテーブル セルに割り当てたいですか?

問題はこの行にあるようです:

var random = Math.ceil(Math.random() * cardValues.length) - 1;

これが行うことは、乱数を1回生成することです。後で変数にアクセスする場合random、コードの行全体を再度呼び出すことはなく、最初に計算されたのと同じ値を取得するだけです。たとえば、上記のコードが実行され、乱数として '7' が吐き出されrandom、それが に格納された場合、for ループを通過するたびrandomに、 の値は毎回再生成されるのではなく、常に'7' になります - make検出?

for ループ内にランダマイザーを配置してみてください。これにより、複数回実行され、毎回新しい乱数が生成されます。

var giveCellValue = function () {
    var random;
    for (i = 0; i <= cardValues.length; i++) {
        random = Math.ceil(Math.random() * cardValues.length) - 1;
        $('td').append(cardValues[random]);
        cardValues.splice(random, 1);
    }
};

実際には、上記の 4 行目を変更しrandom = Math.floor(Math.random() * cardValues.length);ても同じ効果が得られます。

于 2013-06-24T08:45:00.763 に答える