【发布时间】:2016-05-19 07:51:56
【问题描述】:
我正在尝试编写我的第一个简单的扫雷游戏。为了显示空白字段,我编写了一个简单的洪水填充算法,但是它没有按应有的方式工作。这是一段sn-p代码:
function reveal(a,b){
var fieldId = getFieldId(a,b);
/*
cells are stored in array fields[]. Each cell is an object {x: x,y: y, hasBomb: boolean,
hasBeenDiscovered: boolean}. Function getFieldId returns array key for (x,y) cell.
*/
if(a < 0 || a > boardWidth-1){return}
if(b < 0 || b > boardHeight-1){return}
if(fields[fieldId].hasBeenDiscovered == true){return}
if(getNeighbourNumber(a,b) > 0){
document.getElementById(a+'x'+b).innerHTML = getNeighbourNumber(a,b);
document.getElementById(a+'x'+b).style.backgroundColor = 'white';
document.getElementById(a+'x'+b).setAttribute('discovered',1);
fields[fieldId].hasBeenDiscovered = true;
return
}else if(getNeighbourNumber(a,b) == 0){
document.getElementById(a+'x'+b).innerHTML = ' ';
document.getElementById(a+'x'+b).style.backgroundColor = 'white';
document.getElementById(a+'x'+b).setAttribute('discovered',1);
fields[fieldId].hasBeenDiscovered = true;
}
reveal(a,b);
console.log('0 ' + '0');
reveal(a+1,b);
console.log('+1' + ' ' + '0');
reveal(a-1,b);
console.log('-1 ' + '0');
reveal(a,b+1);
console.log('0 ' + '+1');
reveal(a,b-1);
console.log('0 ' + '-1');
reveal(a-1,b-1);
console.log('-1 ' + '-1');
reveal(a-1,b+1);
console.log('-1 ' + '+1');
reveal(a+1,b+1);
console.log('+1 ' + '+1');
reveal(a+1,b-1);
console.log('+1 ' + '-1');
console.log('------------');
}
当发现北部、西北和西部邻居有邻居炸弹的空单元格时,洪水填充只会显示这些单元格,即使其他邻居(南、东南西、东、东北)是空的。我是初学者,我无法弄清楚为什么这段代码不能完全正常工作。任何帮助将不胜感激:)
编辑:控制台日志仅用于调试尝试。
【问题讨论】:
-
请你创建 jsfiddle
-
嘿,你能画一个小样本图吗,具体的问题是什么?我的意思是当用户点击一个单元格时,会发生什么,应该发生什么?例如,您可以使用静态数据而不是炸弹来解释我的问题,或者创建 4x4 或 5x5 矩阵并尝试解释
-
我从你的问题中了解到的是,假设这张图片是一个字段 -> stanford.library.sydney.edu.au/archives/spr2007/entries/… .... 然后如果我点击 5 并且如果所有 9 个项目都没有炸弹那么它应该发生...目前只有 1,2 和 4 开放,对吧?
-
几乎是的。如果用户在您的 cellgrid 上单击了 5。如果所有周围的单元格在其附近都有 0 个炸弹,则显示单元格周围的所有单元格并且算法可以正常工作。当单元格 1、2、4 附近有一个或多个炸弹时,问题就开始了(因此,它们应该显示一个数字,而不是完全显示出来),算法仅适用于这些单元格(因此单元格 1、2、4 会出现数字) 但不适用于单元格 3、6、7、8、9 - 即使它们附近没有炸弹,算法也应该揭示它们并进一步探索。对不起,我的英语很差,但这不是我的母语。
标签: javascript algorithm minesweeper