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