for循环和调用函数的问题

时间:2016-09-22 21:39:10

标签: javascript methods properties

我正在制作一个简单的战舰游戏,我按下按钮,随机放置三艘船。第一个函数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");
        }

    },

2 个答案:

答案 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函数中

,让电路板部分构建。这并不是说其他​​代码问题不会显露出来,但这个问题似乎需要引起注意。