我已經爲一個項目創建了一個JavaScript版本的掃雷,但我試圖引入一個額外的功能來更好地模擬我記得玩的桌面版本。 jsfiddle用於掃雷的JQuery網格遞歸(點擊相鄰的網格)
我有是「clickTile()」函數困難的特殊功能:
我完整的代碼可以在這裏找到。基本要求是將「已選」類以及相鄰礦的數量添加到所點擊圖塊的html中。我試圖解決的附加要求是遞歸自動刷新沒有相鄰地雷的地塊。
的功能,因爲它代表的是:
function clickTile($tile) {
if ($tile.hasClass('mine')) {
alert('game over');
$('.mine').css("background", "red");
} else if (!$tile.hasClass("selected")){
mines = getNumberOfAdjacentMines($tile);
$tile.addClass("selected");
$tile.html(mines);
//recursively call clickTile function as long as there are no adjacent mines
if (mines <= 0) {
height = $('#field .row').length;
width = $('#field .row .tile').length/height;
rowNum = $tile.parent().prevAll('div').length
colNum = $tile.prevAll('div').length
$above = $tile // td
.parent() // tr
.parent() // table or tbody
.children('.row')
.eq(rowNum - 1) // the row above this one
.children('.tile')
.eq(colNum) // in the same column as this
;
$below = $tile // td
.parent() // tr
.parent() // table or tbody
.children('.row')
.eq(rowNum + 1) // the row below this one
.children('.tile')
.eq(colNum) // in the same column as this
;
if (rowNum > 0) {
if (!$above.hasClass('mine') && !$above.hasClass('selected')){
clickTile($above);
}
}
if (colNum < (width-1)){
if(!$tile.next().hasClass('selected')) {
clickTile($tile.next());
}
}
if (rowNum < (height-1)){
if(!$below.hasClass('mine') && !$below.hasClass('selected')) {
clickTile($below);
}
}
if (colNum > 0){
if (!$tile.prev().hasClass('selected')) {
clickTile($tile.prev());
}
}
}
}
}
對我來說,這應該工作遞歸點擊0相鄰礦山的所有瓷磚,但事實並非如此。任何人都可以幫助我理解我可能會因此而出錯嗎?行爲非常挑剔。
它似乎按預期工作,你能詳細說明問題嗎? –
再試幾次,有些情況下,它有太多的遞歸錯誤,它有一個錯誤 – juvian
每個0應該有所有的瓦片上面,下面,左側和右側'點擊',但通常'下'瓷磚做沒有被點擊,我不知道爲什麼。 – gnp210