【问题标题】:Issue with for loops and recalling functionsfor 循环和调用函数的问题
【发布时间】:2016-09-22 21:39:09
【问题描述】:

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

    },

【问题讨论】:

  • placeBoat只检查一个位置是否被填满,而不是船的所有位置。

标签: javascript methods properties


【解决方案1】:
xBoxPos = xPos - 2;

从 xPos 中减去 2,它以 1 到 8 范围内的随机数开始。因此,xBoxPos 在计算时可以随机取值,例如 -1 和 0。这会生成像“cell_-1_7”这样的单元格 id 值(在boatPos 中)。如果板上没有负 x 坐标单元格,则会崩溃

 document.getElementById(boatPos).hasBoat

boardGrid.buildBoat 函数中,使电路板部分构建。这并不是说其他​​代码问题不会暴露出来,但这似乎需要注意。

【讨论】:

  • 老兄,我认为这是错误...我已经为此工作了很长时间,谢谢 :DDD
【解决方案2】:

如果不知道网格的尺寸(伴随 html),很难准确地知道发生了什么。不过……

您的代码示例中有三个循环。其中两个上升到三个(

将 hitBox 计数更改为与boatLen 相同的值。

【讨论】:

  • 我需要 hitbox 到船后面以避免碰撞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多