0

我在循环时遇到问题。这是一款打鼹鼠的游戏。首先,有一个 for 循环负责为我的痣生成不同的孔位置。我想要它,以便循环将 (1) 生成一个数字 (2) 停止生成 (3) 基于刚刚生成的数字,为其运行一个函数。一旦完成了函数的运行,然后(4)开始第二轮生成另一个数字......并持续9轮。我有我的代码在这里。

var molePosX:Array = [166.90, 494.8, 810.7];
var molePosY:Array = [282.55, 512.45, 730.35];
var moleInUse:Boolean = false;

if (moleInUse == false){
for(var i:uint = 1; i<10; i++){
var randomHole:Number = Math.floor(Math.random()*10)+1; //Generate 10 number
trace(randomHole);
}
}


switch (randomHole){
case 1: trace("1");
moleRun(molePosX[0],molePosY[0]);
break;
case 2: trace("2");
moleRun(molePosX[1],molePosY[0]);
break;
case 3: trace("3");
moleRun(molePosX[2],molePosY[0]);
break;
case 4: trace("4");
moleRun(molePosX[0],molePosY[1]);
break;
case 5: trace("5");
moleRun(molePosX[1],molePosY[1]);
break;
case 6: trace("6");
moleRun(molePosX[2],molePosY[1]);
break;
case 7: trace("7");
moleRun(molePosX[0],molePosY[2]);
break;
case 8: trace("8");
moleRun(molePosX[1],molePosY[2]);
break;
case 9: trace("9");
moleRun(molePosX[2],molePosY[2]);
break;
case 10: trace("10");
break;
}



function moleRun(xPos:Number,yPos:Number){
    moleInUse = true;
    var mole2:Mole = new Mole();
    mole2.x = xPos;
    mole2.y = yPos;
    addChild(mole2);
    moleInUse = false;
}

非常感谢!!!

4

2 回答 2

0

抱歉,这不是一个真正的答案,而只是删除那个长 switch 语句的建议。我将此添加为答案,因为注释并不能很好地格式化代码......

看起来你希望它是:

Where index/randomHole = xPos, yPos
1 = 0, 0
2 = 1, 0
3 = 2, 0
4 = 0, 1
5 = 1, 1
6 = 2, 1
7 = 0, 2
8 = 1, 2
9 = 2, 2

您可以计算出来,而不是使用较长的 switch 语句:

x = (index - 1) % 3;
y = Math.floor((index - 1) / 3.0);

或保留您的变量名称:

var xPosIndex:int = (randomHole - 1) % 3;
var yPosIndex:int = Math.floor((randomHole - 1) / 3);
moleRun(molePosX[xPosIndex],molePosY[yPosIndex]);

硬编码的 3 是行长度,因为看起来每一行都有 3 个值(x 从 0 到 2)。index/randomHole 值为 10 将产生 x = 0, y = 3(开始另一个“行”)

于 2012-12-26T07:07:57.083 回答
0

您应该使用最后一个中断的迭代号开始循环。为 (1) 生成随机数编写一个单独的函数会很容易。喜欢:

 // this is a global or instance variable
 var iter:uint = 1;
 // funcation to generate the random number and updating the value of iteration
 function taskNumber1() {
    for(var i:uint = iter; i<10; i++) {
      var randomHole:Number = Math.floor(Math.random()*10)+1; //Generate 10 number
      iter = i;
      break;
   }
   return randomHole;
}

试试看。

于 2012-12-25T10:08:32.507 回答