2013-11-21 100 views
0

我正在創建一個遊戲,我想從名稱庫中爲16個不同行星生成一個名稱,並將它們分配給一個行星。我爲行星創建了一個數組,併爲下面的特點生成邏輯。將列表中的項目分配到數組中的項目

Planet[] planetArray = new Planet[16]; 

    public static void NameGeneration() 
    { 
     List<String> planetNames = new List<String>() 
     { 
      "Bak'hur", "Etonia",  "Laurellan", 
      "Ragki",  "Metiope",  "Defel", 
      "Liehne", "Rykhan",  "Heito", 
      "Makha",  "Cerbi",  "Helios", 
      "Luruguan", "Chawnos",  "T'hig", 
      "Blana",  "Pergate V", "Shemon III", 
      "Yokteth", "Letry",  "Last Besgino", 
      "Ayus",  "Alterus",  "Qurenos" 

     }; 

    List<Tuple<int>> instances = new List<Tuple<int>>(); 
    List<string> generatedNames = new List<string>(); 

    Random random = new Random(); 
    int planetName; 


      //generating 16 names 
     while(instances.Count < 16) 
     { 
      planetName = random.Next(0, planetNames.Count); 

      Tuple<int> tuple = new Tuple<int>(planetName); 

      if (instances.Contains(tuple)) 
      { 
       instances.Add(tuple); 
      } 
     } 

     foreach (var tuple in instances) 
     { 
      generatedNames.Add(string.Format("{0}", planetNames[tuple.Item1])); 
     } 

     foreach (var n in generatedNames) 
     { 

     } 


    } 

我真的不知道從哪裏何去何從,雖然我已經考慮從列表中選擇和手動分配,或者藏漢隨機化的星球,但我還是會停留在我的軌道。

任何幫助或提示,將不勝感激。謝謝。

瑞安

+2

爲什麼'Tuple '而不是'int'? –

+0

嘗試在你的方法中從外部聲明'new Random'。 – spajce

+0

我使用Tuple ,因爲我是編程新手,我的導師建議我使用它。 –

回答

2

我相信這段代碼同樣的事情 - 創建列表隨機挑選16名星球:

var generatedNames = planetNames.OrderBy(n => random.Next()).Take(16).ToList(); 
+0

這是我使用的整個邏輯的簡寫嗎? –

+0

@ Ryan'Maverick'Buxton正好 –

+1

質量,謝謝你隊友。 –

0

您可以使用LINQ創建行星,隨機之後。例如:

planetArray = generatedNames.Select(x=>new Planet(x)).ToArray(); 

順便說一句,爲什麼你使用int的元組列表?您可以直接使用列表。

+0

我使用Tuple ,因爲我是編程新手,我的導師建議我使用它。我如何直接從列表中使用它? –

+0

new Planet(x) - 我得到錯誤'不包含需要1個參數的構造函數。什麼是爭論? –