即使不满足条件,仍会发生while循环的结果

时间:2015-08-17 08:38:01

标签: javascript

我正在练习通过制作Roguelike地下城游戏来编写Javascript,但是当我想创建怪物时会出现问题。我写了一个while循环,例如:

this.getRandomCoordinatesInRoom = function(roomNumber) {
var validLocationFound = false;

while (!validLocationFound){
  // Generate co-ords in room first
  x = Math.floor(Math.random() * (this.roomList[roomNumber].width) + (this.roomList[roomNumber].posX));
  y = Math.floor(Math.random() * (this.roomList[roomNumber].height) + (this.roomList[roomNumber].posY));

  // Find location of (x,y) in Dungeon Array

  //alert(arrayLocation);
  var tmpX = ((this.roomList[roomNumber]).posX + x);
  var tmpY = ((this.roomList[roomNumber]).posY + y);
  var arrayLocation = ((tmpY * 80) + tmpX);
  //var arrayLocation = ((this.roomList[roomNumber].posX + x) + (80 * (this.roomList[roomNumber].posY + y)));
  if (this.dungeonArray[(tmpY + tmpX)] === "floor") {
    validLocationFound = true;
  };

  if ((x<this.roomList[roomNumber].posX) || (x>(this.roomList[roomNumber].posX + this.roomList[roomNumber].width))){
    alert("x out of bounds");
  };

  if ((y<this.roomList[roomNumber].posY) || (y>(this.roomList[roomNumber].posY + this.roomList[roomNumber].height))){
    alert("y out of bounds");
  };
  writeToScreen("Room upper left corner = " + (this.roomList[roomNumber].posX).toString() + "," + (this.roomList[roomNumber].posY).toString(),10);
  return [x,y];

  if (!(getTileAt(arrayLocation) === "floor")){
    alert("It messed up");
  }
};

代码随机生成一个x,y坐标并将其转换为单个数字(我的地牢数组是一维,0-79跨,然后80是新行)。但是,即使代码生成的坐标无效(!=“floor”),它仍然会完成函数,就像它返回true一样。这是为什么?

1 个答案:

答案 0 :(得分:0)

您的函数从while循环内部返回[x,y]。在循环之外声明变量,然后从循环外部返回值。或者,返回是validLocationFound为真的时候。

var x, y ;
while(...) {
    ...
}
return [x, y];