C# while循环有问题吗

C# while循环有问题吗,c#,asp.net,.net,methods,while-loop,C#,Asp.net,.net,Methods,While Loop,下面的代码有两种方法:BetAmount接受用户输入Multiplier获取BetAmount并基于图像为真/假返回乘数。例如,如果BetAmount为10且所有图像均为真,则Multiplier应返回30 在ok按钮\u单击方法中,只要totalAmount>0,标签应继续显示结果。如果所有图像均为false,并且我在文本框中输入10,则循环应从totalAmount中减去10,直到totalAmount=0。最初,totalAmount=100。把它想象成一台老虎机,如果图像不真实,你就会赔

下面的代码有两种方法:BetAmount接受用户输入
Multiplier
获取
BetAmount
并基于图像为真/假返回乘数。例如,如果
BetAmount
为10且所有图像均为真,则
Multiplier
应返回30

ok按钮\u单击
方法中,只要totalAmount>0,标签应继续显示结果。如果所有图像均为false,并且我在文本框中输入10,则循环应从totalAmount中减去10,直到totalAmount=0。最初,totalAmount=100。把它想象成一台老虎机,如果图像不真实,你就会赔钱

protected void okButton_Click(object sender, EventArgs e)
    {

        bool imageOne = true;
        bool imageTwo = false;
        bool imageThree = false;
        double totalAmount = 100;
        double winAmount = Multiplier(imageOne, imageTwo, imageThree);
        double result = 0;

        while (true)
        {
            if (winAmount > 0)
            {
                result = totalAmount + winAmount;
            }
            else
            {
                result = totalAmount - BetAmount();
            }

            resultLabel.Text = result.ToString();            
        }

    }
    protected double BetAmount()
    {
        double betValue = double.Parse(numTextBox.Text);
        return betValue;
    }
    protected double Multiplier(bool firstImage, bool secondImage, bool thirdImage)
    {
        double multiplier = BetAmount();

        if (firstImage == true) multiplier *= 1;
        if (secondImage == true) multiplier *= 1;
        if (thirdImage == true) multiplier *= 1;

        return multiplier;
    }

正如许多评论者所观察到的,你似乎没有充分考虑你想做什么,如果你愿意的话,你的“业务规则”。这应该是第一件要放下的事。我从这里开始:


我的目标是创建一个老虎机应用程序。我已经能够创建一个显示三个随机图像的卷轴。如果其中一张图像是Cherry,则totalAmount应增加下注金额。如果是两个樱桃,则betAmount乘以2并加在总数上。如果图像显示没有樱桃,则totalAmount应减去下注金额

有了这些,再加上您的代码中一些有根据的猜测,我得到了以下结论:

  • 用户以100学分开始
  • 用户下注特定金额并“拉动杠杆”
  • 一颗樱桃的报酬是均等的,两颗樱桃的报酬是双倍的,三颗樱桃的报酬是三倍的。没有樱桃输了赌注
  • 一旦用户的信用额度用完,他就破产了
  • 现在,关于您如何尝试实现这些“业务规则”,即您的“功能规范”,一些有根据的猜测:

  • 总剩余积分显示在标签中
  • 用户在文本框中输入下注金额
  • 用户单击“确定”按钮
  • 您的卷轴显示三个随机图像
  • 计算赢款,并将其添加到总剩余积分中/从中减去
  • 总剩余学分显示已更新
  • 若用户用完了积分,游戏就结束了
  • 现在,您的代码有几个问题:

  • 每次按下“Ok”按钮,用户都会获得新的100学分。totalAmount变量需要位于事件处理程序之外,并且可以访问
  • 用于计算奖金的过程不属于while循环。(更不用说无尽的while循环了,就像你在这里所做的那样。)你只想在用户每次点击Ok按钮时进行一次计算,所以你只需要在代码中进行一次
  • 正如许多人提到的,将乘数乘以1没有效果,因此是多余的
  • 现在,处理乘数的最好方法可能是从0开始,每次点击时加1。然后,返回BetAmount*乘数。像这样:

    int multiplier = 0;
    
    if (firstImage == true) multiplier++;
    if (secondImage == true) multiplier++;
    if (thirdImage == true) multiplier++;
    
    return multiplier * BetAmount();
    
    您还需要添加逻辑,以防止用户下注的点数超过其拥有的点数,并在用户用完时结束游戏


    还有更多,但这应该会让您走上正轨。

    您遇到了什么问题?每次我在文本框中输入值10,页面都会继续加载,我看不到任何结果。我注意到IIS Express Worker进程将我的CPU性能提高到了几乎100%。我想知道这是否是问题的原因。为什么您认为当
    totalAmount
    等于
    0
    时循环会停止?指定的循环没有退出条件,只有
    while(true)
    。为什么不
    while(totalAmount>0)
    multiplier*=1
    不会更改
    multiplier
    的值。它只是将它乘以
    1
    。我的目标是创建一个老虎机应用程序。我已经能够创建一个显示三个随机图像的卷轴。如果其中一张图像是Cherry,则totalAmount应增加下注金额。如果是两个樱桃,则betAmount乘以2并加在总数上。如果图像显示没有樱桃,那么totalAmount应该减去下注金额。如果您投票反对,请随时解释为什么这是一个糟糕的答案。BobRodes-谢谢您的帮助!谢谢你把我的项目分成几个步骤。我即将完成这个项目,我的最后一个障碍是解决如何在总共100个积分中加上赢家或减去损失。int balance=100//需要修复这里的代码,因为它重置为100。受保护的int-PlayerBalance(){if(CalculateWinAmount()>0){balance+=CalculateWinAmount();//CalculateWinAmount返回中奖赌注}否则{balance-=BetAmount();}返回余额;}受保护的void displayerbance(){playertotalamountlab.Text=playerbance().ToString();}@Amit看看我提到的“少数问题”中的第一个。提示:每次单击“确定”按钮时,都会调用“确定按钮”\u click()。(每次调用OK按钮时totalAmount会发生什么情况?)