0

ループに問題があります。もぐらたたきゲームです。まず、ほくろのさまざまな穴の位置を生成する for ループがあります。ループが(1)数値を生成する(2)生成を停止する(3)生成されたばかりの数値に基づいて、関数を実行するようにしたい。関数の実行が完了したら、(4) 別の数を生成する 2 番目のラウンドを開始し、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 に答える