2

私は Flash の初心者で、自分の Web サイトで地形クイズを作成しています。

私の地形クイズの目標は、ランダムな順序で都市名の 72 の質問を取得することです。これはもう作ったのですが、問題は順番がランダムなので質問が返ってきてしまうことです。したがって、質問を終了した場合は、後で戻ってはいけません。この問題は、最初に値「2」を持つすべてのフレームに変数を与えることで解決できると考えました。フレームに移動して正しい都市名を入力すると、そのフレームの変数が「1」になります。間違った答えを入力すると、変数は「0」になります。すべてのフレームの開始時に、「if(city01 == 2){」と書きました。そのため、以前にその質問をしたことがない場合は、質問が表示されます。そうでない場合は、次の (ランダムな) フレームに進みます。

最初のフレームで、変数を定義しました。

var input:String;
var randomnumber:int;

var city01:int = 2;
var city02:int = 2;
var city03:int = 2;
var city04:int = 2;
etc. etc. etc.

質問フレームのコードの例を次に示します。

    stop();
if(city26 == 2){


okButton.addEventListener(MouseEvent.CLICK, okClickcity26);

function okClickcity26(event:MouseEvent):void{
    input = textbox.text;
    if(input == "Dakar"){
        city26 = 1; 
    }else{
        city26 = 0; 
    }

    randomnumber = Math.floor(Math.random()*(1+73-3))+3;
    gotoAndStop(randomnumber);
}
}else{
    randomnumber = Math.floor(Math.random()*(1+73-3))+3;
    gotoAndStop(randomnumber);
    }

Flash は変数を「1」または「2」に変更しますが、問題を表示するだけで次のフレームには移動しません。

したがって、Flash は最後にコードを実行します。

    else{
randomnumber = Math.floor(Math.random()*(1+73-3))+3;
gotoAndStop(randomnumber);
}

しかし、そのランダムなフレームには行きません...

誰かが私が間違っていることを知っていますか?

これはフォーラムでの最初の質問なので、問題をうまく説明できれば幸いです。助けてください。ありがとう。

4

1 に答える 1

0

私は別の解決策を提供することができます:おそらく、質問ID/INTの配列(既に持っているようです)を使用して、それらをシャッフルした後、IDを1つずつ取り出して重複をなくすことができますか?

おそらく、これは、各質問の各状態を追跡してから、乱数の生成を確認するよりも簡単です。確かに、個々の質問をランダムな順序で取得したいが、それらが表示された後に重複しないようにするため、問題が発生します。



編集:配列を使用するコード例を追加

配列 (この場合) は、インデックスまたはいくつかのメソッドを介してアクセスする質問 ID (番号) の動的リストとして機能できます。したがって、これらの番号/ID をフレームに関連付けて、それらにジャンプすることができます。

それらは実際には言語で非常に一般的であり(異なると呼ばれることもありますが)、非常に便利です。元のコードでは、72 個の変数 (city01、city02、city03 など) を 1 つずつ定義する代わりに、長さ 72 の単一の配列を使用して値を保持していました。

actionscript 3 でそれらについて読むことを強くお勧めします (これを使用しているため): http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

コードで配列を使用して、元の回答で何を意味するかを示す例:

// create an array called "questionIds"
var questionIds:Array = new Array();

// using a loop to add ints 0 to 71 to the array
for(var counter:int = 0; counter < 72; counter++){
    questionIds.push(counter);
}

// the array contains the numbers 0 to 71 in order now, shuffle them in to a random order
trace("Preshuffled array: {"+ questionIds +"}");

questionIds.sort(function (inputA:int, inputB:int):int {
    return (Math.floor(Math.random() * 3) - 1);
});

trace("\nShuffled array: "+ questionIds +"}");

//to get a int from the array, can use pop() method, which removes and returns the last element on the array
// since that number is removed, it will never appear again
var currentId:int = questionIds.pop();

// can keep calling pop() method on the array to return the next last number
// what you do with the value of "currentId" is up to you -however you go to your question in your quiz
currentId = questionIds.pop();
trace(currentId);

// you can also check how many elements are left in the array by checking the length of it:
trace(questionIds.length); // which should be 70 left now as it started with 72 and 2 items were pop()'ed off

// when it hits 0, there are no more items left in the array, (calling pop() will then return "undefined")
if(questionIds.length == 0){
    trace("no more items left");
}
于 2013-02-18T23:47:21.843 に答える