我正在制作一个简单的战舰游戏,我按下按钮,随机放置三艘船。第一个函数placeBoat()调用selectPos()函数(选择一个坐标),然后placeBoat()函数使用属性boatHitBox验证那里是否有船。如果它通过测试,则运行buildBoat()和hitBox(),分别放置船只瓷砖和船只撞击箱。我遇到的问题是,船只往往是一块太短,或者根本没有放置。我认为这是hitBox()函数的问题,虽然我不确定......有人可以帮忙吗?
var xPos;
var xBoxPos;
var yPos;
var boatBoxPos;
var count;
var boatPos;
var hasBoat;
var boatHitBox;
var boatGrid = {
placeBoat : function() {
for (boatNum = 1; boatNum < 4; boatNum++) {
console.log("boat placed now");
this.selectPos();
if (document.getElementById(boatPos).boatHitBox == 1) {
console.log("FAILED!!!!!!");
boatNum = 1;
this.clearTable();
}
else {
this.buildBoat();
}
}
},
selectPos : function() {
xPos = Math.floor(Math.random() * 8 + 1);
yPos = Math.floor(Math.random() * 10 + 1);
boatPos = "cell_" + xPos + "_" + yPos;
},
hitBox : function() {
for (count = 1; count < 5; count++) {
boatBoxPos = "cell_" + xBoxPos + "_" + yPos;
xBoxPos = xBoxPos + 1;
document.getElementById(boatBoxPos).boatHitBox = 1;
document.getElementById(boatBoxPos).innerHTML = "X";
}
},
buildBoat : function() {
for (boatLen = 1; boatLen < 4; boatLen++) {
xBoxPos = xPos - 2;
this.hitBox();
boatPos = "cell_" + xPos + "_" + yPos;
xPos = xPos + 1;
document.getElementById(boatPos).hasBoat = 1;
document.getElementById(boatPos).style.backgroundColor = "brown";
console.log("placed one tile");
}
},
答案 0 :(得分:0)
如果不知道网格的尺寸(附带的html),很难确切知道发生了什么。然而...
代码示例中有三个循环。其中两个上升到三个(&lt; 4)并且hitBox上升到四个(&lt; 5)。
将hitBox计数更改为与boatLen相同的值。
答案 1 :(得分:0)
xBoxPos = xPos - 2;
从xPos中减去2,它以1到8范围内的随机数开始。因此,随机xBoxPos
可以在计算时采用-1和0等值。这将生成单元格id值(在boatPos
中),如&#34; cell_-1_7&#34;。如果您在电路板上没有负x坐标单元格,则会崩溃
document.getElementById(boatPos).hasBoat
在boardGrid.buildBoat
函数中,让电路板部分构建。这并不是说其他代码问题不会显露出来,但这个问题似乎需要引起注意。