2012-11-20 117 views
1

首先線程名稱可能有點奇怪,但我會盡我所能解釋我想在這裏做什麼,所以你可以建議我一個好的線程名稱。創建範圍表

我想創建一個功能通過檢查他的經驗

返回員工級別如果體驗是0〜50,他是1級 如果經驗是50〜150,他是2級 ...等直到上水平100

我在想什麼是創建一個適用於每個級別

public const int Level1 = 50, 
       Level2 = 150...; 

那麼有沒有一種方法,使一個函數返回我想什麼都需要EXP用const int?沒有使用1000 ++行?!。

請不要認爲我的問題是垃圾郵件,我只是很困惑,我會盡我所能澄清我的想法,如果需要。

回答

2
int level = Math.Min(10, experience/10); 

請問這怎麼辦?

如果你想有0-10 - > 1和11-20 - > 2等,改變這樣的:

int level = Math.Min(10, (experience + 9)/10); 

如果沒有模式可言的經驗獲取,或者一些很不起眼的一個,你可以這樣做:

var level = 1; 

var levelRequirements = new int[] {10, 20, 50, 150, 300}; 
for (int i = 0; i < levelRequirements.Length; i++) 
{ 
    if (levelRequirements[i] > currentExperience) 
     break; 
    level++; 
} 

現在我的最後更新:

var level = 0; 

var levelRequirement = 0; 
var levelRequirementAddition = 50; 

while (currentExperience >= levelRequirement) 
{ 
    levelRequirement += levelRequirementAddition; 
    levelRequirementAddition += 50; 
    level++; 
} 
+0

但是如果1級需要50級,2級需要150級3級需要300級4級需要500級。我認爲這不是一個常數值 –

+0

@René你說得對我累了 – hoang

+0

@RuneS比你必須單獨做每個案例都涉及多行代碼。你可以使用不同的設計模式來移動代碼行,但他們必須在那裏 –

1

由於對於水平x需要XP的公式似乎25*(x²+x)

可以使用反函數:

public int GetLevel(int xp) 
{ 
    return (int)(Math.Sqrt(1 + 4 * xp/25) - 1)/2; 
} 
+0

對我來說,這似乎是一個非常線性調平的要求,而不是對數值。 –

1
public int ReturLevel(int experience) 
{ 
    return (experience-1)/10 + 1; 
} 

您可以在(experience-1)刪除-1如果你的意思是「如果經驗是1〜9」

離開它,如果你的意思是「如果經驗是11〜20,他是2級」

編輯:

如果你對關卡功能的體驗沒有遵循任何模式,那麼你就必須爲每一個模式都做一個單獨的例子。

if(experience > 20) 
    return level 3; 
else if(experience > 10) 
    return level 2; 
else 
    return level 1; 

不同的設計模式可以影響如何,併爲您添加的這些不同的情況,但他們必須要添加,如果你有沒有模式。

+0

你可以在這裏看到的經驗:50,150,300,500,750,1050,1400,1800,2250,2750,3300,3900,4550,5520 ...我認爲它遵循沒有模式?不是嗎? –