我想檢查玩家的 XP 是否達到一定數量,它會改變玩家的排名。有沒有更有效的方法來做到這一點?
這是代碼:
currentLevelText.text = currentLevel;
if (currentLevel == "Rookie")
xp = Random.Range(3, 10);
else if (currentLevel == "Survivor")
xp = Random.Range(5, 12);
else if (currentLevel == "Adventurer")
xp = Random.Range(7, 14);
// Please send help
if (xp <= 0 || xp == 1 || xp == 2 || xp == 3 ||
xp == 4 || xp == 5 ||xp == 6 || xp == 7 || xp == 8 ||
xp == 9 || xp == 10 ||xp == 11 || xp == 12 || xp == 13 || xp == 14 ||
xp == 15 || xp == 16 || xp == 17 || xp == 18 || xp == 19 || xp == 20 || xp ==
21
|| xp == 22 || xp == 23 || xp == 24)
currentLevel = "Rookie";
else if (xp == 25 || xp == 26 || xp == 27 || xp == 28 || xp == 29 || xp == 30 )
currentLevel = "Survivor";
else if (xp == 31 || xp == 32 ||
xp == 33 || xp == 34 || xp == 35
|| xp == 36 || xp == 37 || xp == 38 ||
xp == 39 || xp == 40)
currentLevel = "Adventurer";
else if (xp < 100) {
currentLevel = "Veteran";
}
謝謝你。
uj5u.com熱心網友回復:
你會想了解什么,開始了<和>和<=和>=做。您不需要檢查整數值的每種可能情況,只需檢查范圍。您可能可以使用如下方法完成此操作:
public string GetLevel(int xp)
{
if (xp <= 24) return "Rookie";
if (xp <= 30) return "Survivor";
if (xp <= 40) return "Adventurer";
return "Veteran";
}
uj5u.com熱心網友回復:
正如在其他答案中所見,您應該撰寫一個函式來根據xp值計算排名。
/// <summary>
/// Define the rank from the given xp.
/// </summary>
public static PlayerRank GetRankFromXp(int xp)
{
// Novice: 1..15
if (xp>0 && xp < 16) return PlayerRank.Novice;
// Rookie: 16..23
if (xp < 24) return PlayerRank.Rookie;
// Survivor: 24..29
if (xp < 30) return PlayerRank.Survivor;
// Adventurer: 30..39
if (xp < 40) return PlayerRank.Adventurer;
// Veteran: 40..99
if (xp < 100) return PlayerRank.Veteran;
// God: >=100
if (xp >= 100) return PlayerRank.God;
// None: =0
return PlayerRank.None;
}
但PlayerRank上面是什么?它是將enum名稱與某個常量值相關聯的。
public enum PlayerRank
{
None,
Novice,
Rookie,
Survivor,
Adventurer,
Veteran,
God,
}
這樣,您就不必處理字串值,不小心嘗試比較"Rookie"于"Rokie"或任何其他錯字可能出現。
除了上述之外,您還應該創建一個函式,xp根據排名回傳一些隨機值。這將是switch()檢查特定等級的陳述句的絕佳位置。
/// <summary>
/// Returns a random amount of xp based on the rank.
/// </summary>
public static int RandomXp(PlayerRank rank)
{
switch (rank)
{
case PlayerRank.Novice:
return Random.Range(1, 8);
case PlayerRank.Rookie:
return Random.Range(3, 10);
case PlayerRank.Survivor:
return Random.Range(5, 12);
case PlayerRank.Adventurer:
return Random.Range(7, 14);
case PlayerRank.Veteran:
return Random.Range(9, 16);
case PlayerRank.God:
return Random.Range(11, 20);
default:
return 0;
}
}
上面的一些示例用法將在LevelUp()下面的函式中:
public class Player
{
/// <summary>
/// Initializes a new instance of the <see cref="Player"/> class.
/// </summary>
public Player()
{
Xp = 0;
Rank = PlayerRank.None;
}
/// <summary>
/// Gets or sets the xp.
/// </summary>
public int Xp { get; set; }
/// <summary>
/// Gets or sets the player rank.
/// </summary>
public PlayerRank Rank { get; set; }
/// <summary>
/// Levels up the player.
/// </summary>
public void LevelUp()
{
Xp = RandomXp(Rank);
Rank = GetRankFromXp(Xp);
}
}
請注意,當enum在螢屏上顯示時,它會自動將名稱轉換為相應的字符。例如PlayerRank.Novice.ToString() => "Novice"
uj5u.com熱心網友回復:
您可以改用這個 if-else 塊。
if (xp <= 24 )
currentLevel = "Rookie";
else if (xp<=30)
currentLevel = "Survivor";
else if (xp<=40)
currentLevel = "Adventurer";
else
currentLevel = "Veteran";
無需檢查每個單獨的值,如果您在“else”子句中,則無需檢查先前的條件
uj5u.com熱心網友回復:
閱讀并理解此答案后,您還可以使用關系模式匹配,它的作用基本相同,只是讀取不同
public string GetLevel(int xp)
{
return xp switch
{
<= 24 => "Rookie",
<= 30 => "Survivor",
<= 40 => "Adventurer",
_ => "Veteran"
};
}
此外enum,這里推薦的方法會比使用字串更好!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366558.html
