C# I';我试图制作一个口袋妖怪风格的升级进度条,但我';我在逻辑上遇到了一个问题,那就是它是如何';s使用剩余的xp升级

C# I';我试图制作一个口袋妖怪风格的升级进度条,但我';我在逻辑上遇到了一个问题,那就是它是如何';s使用剩余的xp升级,c#,C#,我正经历着一段非常艰难的时期,试图摆脱这种局面 EarnedXP = 1000 PlayerXPMax = 20 PlayerLevelUp = 1 for (int x = EarnedXP; x != 0; PlayerXPMax - x) PlayerLevelUp++; 我试图设置一个升级问题。我想给玩家任何数量的经验,尽管最大允许。当达到最大值时,玩家获得一个等级,xp重置为0。命中0后,剩余的xp将通过相同的语句返回,如果剩余的xp再次大于玩家的最大值,它将使用剩余的xp,

我正经历着一段非常艰难的时期,试图摆脱这种局面

EarnedXP = 1000
PlayerXPMax = 20
PlayerLevelUp = 1

for (int x = EarnedXP; x != 0; PlayerXPMax - x)
   PlayerLevelUp++;
我试图设置一个升级问题。我想给玩家任何数量的经验,尽管最大允许。当达到最大值时,玩家获得一个等级,xp重置为0。命中0后,剩余的xp将通过相同的语句返回,如果剩余的xp再次大于玩家的最大值,它将使用剩余的xp,并授予玩家另一个级别

我遇到的最大问题是在for语句中使用余数公式。这对我来说毫无意义

在程序本身中,我使用几个进度条来保存我的值,例如最大值和当前值。我有点想要一个口袋妖怪式的升级,它会满的,叮当声,然后再满,直到剩下的xp消失

我试图简洁地完成这项工作,并将其全部塞进for语句中的5行

程序用于此特定问题的所有变量:

playerxp.maximum //This is the maximum xp my player can attain per level
playerxp.value //current xp the player has
earnedxp //xp gained from slaughtering the poor little ladybugs
playerlevel.value //the level of the player currently not doing anything but its there
我还将所有信息更新到我定制的控制台中

private void addPlayerXP(int earnedXP)
{
    int remainder = 0;
    while (earnedXP >= playerXP.Maximum)
    {
        remainder = (earnedXP - playerXP.Maximum);
        playerXP.Value += remainder;
        consoleOutput.AppendText((earnedXP - playerXP.Maximum).ToString() + "\r\n");
        consoleOutput.AppendText(xpNotifier());
        if (playerXP.Value == playerXP.Maximum)
        {
            consoleOutput.AppendText("DING\r\n");
            int temp = Convert.ToInt32(playerLevel.Text);
            playerLevel.Text = temp++.ToString();
            playerXP.Value = 0;
        }
        earnedXP -= playerXP.Maximum;
        consoleOutput.AppendText(earnedXP.ToString() + "\r\n");
    }
执行结果:玩家获得1000经验值。升级所需的xp=60。玩家获得60经验,将经验提升回0,提升+1。剩余的9940 xp会重复添加,直到剩余的xp小于升级的最大xp


当前结果:玩家获得100xp,最大xp为60。玩家升级,但没有按应有的方式显示。玩家现在有40经验。玩家再获得100 xp,程序崩溃,因为循环只运行一次。我不确定我是否完全理解你的问题,但我相信这就是你想要的:

while (PlayerXP >= PlayerXPMax)
{
    PlayerLevelUp++;
    PlayerXP -= PlayerXPMax;
}
如果没有循环,这看起来像:

int numLevels = PlayerXP / PlayerXPMax; //Assuming both variables are ints!
PlayerLevelUp += numLevels;
PlayerXP -= numLevels * PlayerXPMax;

for循环的一个大问题是,在最后一项中没有发生任何应该改变影响循环条件的状态的事情。您编写了
PlayerXPMax-x
,但这是一个表达式,它从不影响
x!=0

我将对此进行测试,看看结果是否符合我的要求。谢谢,我已经测试过了,并且意识到我的问题比几个变量更深入。我将更新我的主要帖子,提及我在特定问题Rotem中发挥作用的所有变量-这就是@JohnOlivas所问的问题-(基本上写一个每个级别所需的XP循环,直到下一个级别有足够的XP)@AlexeiLevenkov也许是这样,但在OPs代码中,升级所需的XP似乎是恒定的。目前XP是恒定的,因为我现在正处于一个非常小的测试/规划阶段,我确实计划稍后让它在每个级别上最终需要更多的XP@rotmafter您编辑后,问题是什么还不清楚。请指出您试图实现的目标、您遇到的问题以及预期的输出。好的,请让我再次编辑,如果您的
条件具有赋值(
=
)而不是比较(
=
),请给我一点时间。我的答案已经涵盖了你想要做的事情,那不适用呢?