我的Bools不工作?

时间:2017-11-13 00:46:36

标签: javascript

我正试图制作像游戏一样的“战舰”。我的大部分木板应该是“错过”的瓷砖,只有少数应该是带有潜艇的瓷砖用于“击中”。问题在于,每当我运行程序时,我都无法判断它是否忽略了我的bool,或者它是否不理解我编码的内容,因为我点击的所有内容都是“点击”。

var cellClick=function(clicked)
{
    var cell=clicked.target;

    if(! cell.isEmpty) return;

    if(cell.isSub=false)
        {

            cell.style.backgroundImage='url("missed.png")';
            cell.style.backgroundSize='constrain';


        }
    else
        {
            cell.style.backgroundImage='url("hit.png")';
            cell.style.backgroundSize='constrain';
            cell.exploded=true;

        }

    cell.isEmpty=false;
    console.log('click');

};

var waterCell=[[],[],[],[],[],[],[],[],[],[]];

for(var row=0;row<10;row++)
    {
        for(var column=0;column<10;column++)
            {
                waterCell[row][column]=document.createElement("div");
                waterCell[row][column].style.width='10%';
                waterCell[row][column].style.height='10%';
                waterCell[row][column].style.position='absolute';
                waterCell[row][column].style.left=(column*10)+'%';
                waterCell[row][column].style.top=(row*10)+'%';
                waterCell[row][column].style.backgroundImage='url("water_cell.jpg")';
                waterCell[row][column].style.backgroundSize='contain';
                gameBoard.appendChild(waterCell[row][column]);

                waterCell[row][column].row=row;
                waterCell[row][column].column=column;
                waterCell[row][column].isEmpty=true;
                waterCell[row][column].isSub=false;
                waterCell[row][column].exploded=false;


            }
    }
//trying to make random subs
for(var i=0;i<5;i++)
    {
        row=Math.round(Math.random()*10);
        column=Math.round(Math.random()*10);
        waterCell[row][column].isSub=true;
    }






gameBoard.addEventListener('click',cellClick,false);

1 个答案:

答案 0 :(得分:0)

您的代码

if(cell.isSub=false) {

isSub的属性cell指定false。然后,if测试作业的结果,即false。这就是为什么从未满足条件并处理else - 分支的原因。显然,你的意图是

if(cell.isSub==false) {

也许尝试交换if语句的分支并在cell.isSub中测试truthy值,而不是简化代码:

if ( cell.isSub ) {
  // it's a hit
} else {
  // it's a miss
}

如果你需要保持这个分支的顺序,那么通过使用否定运算符可以简化对falsy值的测试:

if ( !cell.isSub ) {
  // it's a miss
} else {
  // it's a hit
}

最后一个提示:不要设置DOM元素的自定义属性,因为这些属性表现不佳。更糟糕的是,当放置Javascript对象或函数时,它们是内存泄漏的完美土壤。因此,保持两个世界 - 您的Javascript和HTML / DOM - 尽可能分开,并训练自己不要将其他数据放入在DOM上下文中管理的对象的Javascript表示中。在纯Javascript(例如二维数组)中使用单独的描述来跟踪潜艇的位置,并仅创建表示该内部数据集的DOM。