将自定义地雷放置在扫雷中

时间:2016-12-07 15:17:35

标签: javascript

我试图搞乱扫雷码,而我想要做的就是将地雷放在特定位置[x,y],这样他们就可以在引爆后拼出一个字母。我正在使用此页面来练习https://codepen.io/joelbyrd/pen/hdHKF,但由于某种原因,我无法让它发挥作用。我试图修改randIndex并将其设置为[1,1],只是将一个矿井放在角落里,但它没有用。我该怎么做呢?

react-scripts

1 个答案:

答案 0 :(得分:1)

您说您要将randIndex修改为[1,1],但randIndex应为整数。修改了以下代码以将所有地雷放在底部。

// designate unique random mine spots and store in this.mineCells
designateMineSpots: function() {
    this.safeCells = [];
    this.mineCells = []

    var i,
        randIndex;

    i = this.numCells;
    while ( i-- ) {
        this.safeCells.push( i + 1 );
    }

    i = this.numMines;
    while ( i-- ) {
        randIndex= i; // This will put all mines along the bottom rows. 
        this.mineCells.push( this.safeCells[randIndex] );
        this.safeCells.splice( randIndex, 1 ); // remove cell from array of safe cells
    }        
}, // end designateMineSpots

听起来你也希望能够改变矿井数量?也许在' newGame'将矿计数更改为您需要的数量?结合上面的代码,这将在底行放置一个矿。

我不确定您是否想要尊重某个级别的默认地雷数量?如果不是,您可能甚至不需要将numMines传递给newGame构造函数。您可以删除所有对其进行设置的引用,并将其替换为代码,以计算拼出您的信件需要多少个地雷。

newGame: function( level, numRows, numCols, numMines, resetting ) {
    var resetting = resetting || false;
    // Note most of the code below was removed to make it clear which change you need. 
   // You only need to add the one line at the bottom of this. 
    ...
    if ( resetting ) {
        ...

        // reset cells    
        for ( i = 1; i <= this.numRows; i++ ) {
            for ( j = 1; j <= this.numCols; j++ ) {
                ...
            }
        }
    } else { // new game (not resetting)

        if ( level == 'custom' ) {
           ...
        } else {
           ...
        }

        this.numMines = 1; // HERE IS THE MODIFICATION TO MINECOUNT YOU NEED
        ...
    }
 }

更新:我被问到如何使用randIndex来确定将地雷放入哪些单元格。

如果你看designateMineSpots(),你会看到它首先创建一个表示所有单元格的整数数组(0代表右下角)并将它们存储为“安全”。细胞。 然后,在while(i--)循环中,它从安全单元阵列中删除一个安全单元格(索引为randIndex),并通过将其放入mineCells数组中将其移动为挖掘单元格。

有几种方法可以确定要从safeCells中删除哪些单元格并放入mineCells,但希望以下示例为您提供一些建议。

[8][7][6]
[5][4][3]
[2][1][0]

在上面的3x3雷区,要写出字母&#39; T&#39;您将从safeCells中移除元素8,7,6,4和1,并将其移至mineCells。请注意,按降序删除它们可能很重要,否则safeCells[8]可能不包含整数8.例如,如果首先删除safeCells[1]并拼接数组以删除该元素,因为它们是执行,然后safeCells[8]不再存在,整数8包含在safeCells[7]中。

希望有所帮助!