2017-09-20 5 views
0

私はUnity2Dで自分のゲームのクエストシステムを作っています。私は辞書の中にすべての私の異なる種類のクエストを保存しましたが、ランダムに選んだクエストは5つしかありません。私は最初にネストされたループを使用して5つの乱数を取得し、次に辞書内の要素にアクセスする別のforeachループを使用し、最後に選択したすべてのクエストを印刷するために別のforループを使用することを計画しました。しかし、私は問題を抱えています。なぜなら、25回、5回ではなく25回印刷したからです.2回目のループから脱出して3回目のループに入る方法はありますか?ありがとう!C#ネストされたforループから抜け出し、新しいループを続けるには?

void Start() 
{ 
    // missions 
    missions.Add("Visit Mural Stops x ", 1); 
    missions.Add("Collect Cards x ", 2); 
    missions.Add("Fight Monsters x", 3); 
    missions.Add("Collect Coins x ", 4); 
    missions.Add("Collect Items x", 5); 
    missions.Add("Fight SBM Boss x ", 6); 
    missions.Add("Find Mural Stops x", 7); 

    var numbers = new List<int>(missions.Count); 
    for (int i = 0; i < missions.Count; i++) 
    { 
     numbers.Add(i); 
    } 

    var randomNumbers = new int[text.Length]; 
    // text.Length is always 5, as I only have 5 mission texts 

    for (int i = 0; i < randomNumbers.Length; i++) 
    { 
     var thisNumber = Random.Range(1, numbers.Count); 
     randomNumbers[i] = numbers[thisNumber]; 
     numbers.RemoveAt(thisNumber); 
     //Debug.Log("random " + randomNumbers[i]); 

     foreach (KeyValuePair<string, int> pairs in missions) 
     { 
      if (pairs.Value == randomNumbers[i]) 
      { 
       //Debug.Log(pairs.Key); // print out 5 missions 

       missionText = pairs.Key; 

       for (int j = 0; j < text.Length; j++) 
       { 
        text[j].text = missionText; // it only print out the last picked quests 
        Debug.Log(missionText); // each picked quest is printed out 5 times instead of once 
        // how do i print out only 5 times inside this loop? 
       } 
      } 
     } 
    } 
} 
+8

とほぼ同じです。['break'](https://docs.microsoft.com/en-us/dotnet/csharp)/language-reference/keywords/break)ループのうち... – maccettura

+0

あなたの最後のループは何を意味していますか?あなたはjをループしますが、実際には意味をなさないjを使用することはありません。おそらくあなたが5倍をあなたが望んでいるようにしている理由はおそらく5回印刷するように言っているだけです...。 – Chris

+0

@maccettura私は(int j = 0; j Daaenerys

答えて

0

あなたの問題はあなたの最後のループです:

for (int j = 0; j < text.Length; j++) 
{ 
    text[j].text = missionText; 
    Debug.Log(missionText); 
} 

これはDebug.Log 5回を実行している - 一度、jの各値のために(そしてあなたはtext.Lengthは常に5であることを先に言います)。

コメントでは、選択したすべてのクエストをテキストに印刷したいと言っています。

あなたはすでにあなたのテキストのインデックスを持っている - i - あなたのrandomNumbers配列は、あなたの文章と同じ長さであり、実際にrandomNumbersの全体のポイントは、textの各エントリのための乱数を生成することのようですので、。あなたがしたいことを引用したループではなく、

text[i].text = missionText; 
+0

ああ!ありがとう!それはうまくいく、私はその笑いを考えなかった!提案ありがとう:) – Daaenerys

関連する問題