我正试图制作像游戏一样的“战舰”。我的大部分木板应该是“错过”的瓷砖,只有少数应该是带有潜艇的瓷砖用于“击中”。问题在于,每当我运行程序时,我都无法判断它是否忽略了我的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);
答案 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。