在扫雷中清理空白方块周围的区域时遇到问题

Having issues with clearing area around blank squares in minesweeper

本文关键字:区域 遇到 问题 周围 方块 扫雷 空白      更新时间:2023-09-26

好的,我终于完成了我的扫雷游戏,如果有人可以帮助我,只需要再做一件事。 当您单击未编号的正方形时,它将显示一些板。 我已经玩了一段时间了,只是画了一个空白。 这是一个简单的扫雷游戏,只是用java脚本。 我将所有内容都标记在应该去的地方,以便于查找,并且我会在我的代码正在处理的地方加粗。

 //Global 
//store the value of each square
    var gaValue = new Array(8)
    for (i = 0; i <= 8; i++)
        gaValue[i] = new Array(8)
    for (i = 0; i <= 8; i++)
    {
        //loop through each item in those row
        for (j = 0; j <= 8 ; j++)
            gaValue[i][j] = 0
    }
    //Store the status of each square
    var gaSquare = new Array(8)
    for (j = 0; j <= 8; j++)
        gaSquare[j] = new Array(8)
    for (j = 0; j <= 8; j++)
    {
        //loop through each item in those row
        for (i = 0; i <= 8 ; i++)
            gaSquare[i][j] = "C"        
    }
    //Track of whether the game is over or not (starts this with false)
    var gbGameOver = false
    function vInit()
    {
        var strHTML
        var i
        var j
        strHTML = "<table style='margin-left:auto;margin-right:auto'>"
        strHTML += "<tr><td colspan='8' style='text-align:center'>MineSweeper</td></tr>"
        strHTML += "<tr><td colspan='8' style='text-align:center'><input type='button' id='btnNew' value='New Game' onclick='vNewGame()'></td></tr>"
        //Loop through the rows to build the table of tiles
        for (i = 0; i < 8; i++)
        {
            strHTML += "<tr>"
            for (j = 0; j < 8; j++)
            strHTML += '<td><img src="images/sqt0.png" id="square' + i + ', ' + j + '" onclick="vClick(' + i + ', ' + j + ')"/></td>';
            strHTML += "<tr>";
        }
        strHTML += '<tr><td colspan="8" style="text-align:center"><textarea id="taOut" cols="18" rows="10"></textarea></td></tr>'
        strHTML += "</table>"
        frmGrid.innerHTML = strHTML    
//Place bombs
        var iBomb = 0
        var iRow = Math.floor(Math.random() * 8)
        var iCol = Math.floor(Math.random() * 8)
        while (iBomb < 8)
        {
            while (gaValue[iRow][iCol] == 9)
            {
                iRow = Math.floor(Math.random() * 8)
                iCol = Math.floor(Math.random() * 8)
            }
            gaValue[iRow][iCol] = 9
            iBomb++
        }
        //Calculate clue values around mines
        var iMine = 0        
        for (i = 0; i < 8; i++)
        {
            for (j = 0; j < 8; j++)
            {
                for (k = (i - 1) ; k <= (i + 1) ; k++)
                    for (m = (j - 1) ; m <= (j + 1) ; m++)
                        if (k >= 0 && k <= 9 && j >= 0 && j <= 9)
                            if (gaValue[k][m] == 9)
                                iMine++
                if (gaValue[i][j] != 9)
                    gaValue[i][j] = iMine
                iMine = 0
            }
        }
    }
    //Get the ID of the image I need to change
    function vClick(iRow, iCol)
    {      
        var gaSquare = "square" + iRow + ", " + iCol
        var strOut = ""
        gaSquare[iRow][iCol] = 'o';
        document.getElementById(gaSquare).src = "images/" + gaValue[iRow][iCol] + ".png"
        if (gaValue[iRow][iCol] == 9)
        { 
            gbGameOver = true
            strOut = "Game Over"
            vOver()
        }
      else if (gaValue[iRow][iCol] == 0)
            vZero(iRow, iCol)
        document.getElementById('taOut').value = strOut
    }
    //GameOver       
    function vOver()    
    {
        var i
        var j
        var strID;
        for (i = 0; i < 8; i++)
            for (j = 0; j < 8; j++) {
                strID = "square" + i + ", " + j;
                document.getElementById(strID).src = "images/" + gaValue[i][j] + ".png"
            }
    }
**//Clearing area
    function vZero(iRow, iCol, i, j) {
        for (i = iRow - 1; i <= iRow + 1; i++) {
            for (j = iCol - 1; j <= iCol + 1; j++) {
                if (k >= 0 && k <= 8 && j >= 0 && j <= 8)
                    vClick(i, j)
            }**
            //Start new game
            function vNewGame() {
                vInit()
                    }
                    //no menu on right click
                    function bIsRightButtonClicked(e) {
                        var rightclick = false
                        e = e || window.event
                        if (e.which) {
                            rightclick = (e.which == 3)
                        }
                        else if (e.button) {
                      rightclick = (e.button == 2)
                        }
                        return rightclick
                    }
                }
            }

我相信主要错误是您在未定义该变量时指的是vZero()内部的k。您似乎还缺少该函数上的一两个右大括号。

尝试将该函数更改为如下所示:

//Clearing area
function vZero(iRow, iCol) {
    for (var i = iRow - 1; i <= iRow + 1; i++) {
        for (var j = iCol - 1; j <= iCol + 1; j++) {
            if (i >= 0 && i <= 8 && j >= 0 && j <= 8) vClick(i, j);
        }
    }
}

您会注意到,我将ij参数更改为局部变量,因为它们仅由该函数用于for循环。不需要将它们作为参数。这样做只会使其他开发人员感到困惑,因为这意味着您需要将他们的值传递给函数才能使其工作,而您只需要传入iRowiCol。这有意义吗?