2016-11-09 156 views
0

我在使用C#的統一腳本編寫遊戲時遇到了問題。 我想獲得有百分比的物品。如何顯示項目給定的百分比? Unity C#

比如我有一個List<item> Bonus如下:

項目|數量| PERCENT

  1. 錢幣20 100%
  2. 錢幣40 95%
  3. 硬幣300 40%
  4. 硬幣700 10%
  5. 蘋果2 60%
  6. 檸檬2 60%
  7. 橙2 60%
  8. 木材1 90%
  9. 木材2 70%
  10. 木3 50%
  11. 銀條1 4%
  12. 魚肉2 60%
  13. 鋸1 7%
  14. 繩索1 7%

百分比項顯示機會出現。

如何從百分比中得到1項? 它是如何在C#中?細節足夠了嗎?

感謝

丹尼斯

+0

所有項目都有百分之?您可以向我們展示您的完整列表或舉例說明您的代碼嗎? – Basvo

+0

是的所有項目都有百分比。我還沒有編碼。我不知道它在代碼中會是什麼樣子。我只是將這個物品存放到帶有類別物品的清單。 –

+0

用百分比獲得1項的含義是什麼?你需要從列表中獲得一個項目嗎? – Basvo

回答

3

我明白你的問題是你必須的方式:

  • 100%機率獲得20個金幣
  • 加上95%的機率獲得40個金幣
  • 加40%的機會得到300個硬幣
  • ...

這種方式,你就必須做這樣的事情:

List<items> itemsWon = new List<item>(); 
float randomPercentage = Random.Range(0.0f, 1.0f); 
for(int i = 0; i < Bonus.Count; i++) 
{ 
    if (randomPercentage > Bonus[i].PERCENT) 
    { 
     itemsWon.Add(Bonus[i]); 
    } 
} 

但考慮您的意見,我會說,你只想要贏得這些項目的1。在這種情況下,你必須給每個項目和int值(更容易在這種情況下比工作漂浮)假設你的百分比財產,做這樣的事情:

items itemWon; 
int totalItemsPercent = 0; 
for(int i = 0; i < Bonus.Count; i++) 
{ 
    totalItemsPercent += Bonus[i].PERCENT; 
} 

int percentToReach = Random.Range(0, totalItemsPercent + 1); 
int itemsPercentSum = 0; 
for(int i = 0; i < Bonus.Count; i++) 
{ 
    itemsPercentSum += Bonus[i].PERCENT; 
    if (itemsPercentSum >= percentToReach) 
    { 
     itemWon = Bonus[i]; 
     break; 
    } 
} 

希望這些將幫助您。另外請記住,發佈已經生成的代碼總是能夠幫助其他人瞭解您嘗試實現的目標。問候,

+1

你好@Kardux,我不太瞭解邏輯。我已經嘗試過了。但我看到,在檢查條件(itemsPercentSum> = percentToReach)時,你不會打破循環。如果它沒有打破循環,它總會給出List的最後結果,不是嗎? –

+0

@DennisLiu當然你需要打破循環......今天有點累了對不起!感謝您指出:我會編輯我的答案:) – Kardux