C# 我的循环有什么问题?需要计算一个运行总数吗

C# 我的循环有什么问题?需要计算一个运行总数吗,c#,C#,我必须建立一些逻辑来写一些记分牌。这个想法是: 有许多阶段: 第一阶段你有两个数字。7和3=10 第二阶段你有另外2个数字。5和1=6 循环完成后,想要的结果应该是: 第一阶段总分=15分(第一阶段总分+第二阶段初试) 第二阶段总分=21(第一阶段总分+(第一阶段+第二阶段第二阶段) 我的环路怎么了?我好像没有得到想要的资源 private void Calculate(Player player) { for (int i = 0; i < player.Game.Sta

我必须建立一些逻辑来写一些记分牌。这个想法是:

有许多阶段:

  • 第一阶段你有两个数字。7和3=10
  • 第二阶段你有另外2个数字。5和1=6
循环完成后,想要的结果应该是:

  • 第一阶段总分=15分(第一阶段总分+第二阶段初试)
  • 第二阶段总分=21(第一阶段总分+(第一阶段+第二阶段第二阶段)
我的环路怎么了?我好像没有得到想要的资源

private void Calculate(Player player)
{
    for (int i = 0; i < player.Game.Stages.Length; i++)
    {
        int firstThrow = player.Game.Stages[i].FirstTry;
  int secondThrow = player.Game.Stages[i].SecondTry;
  int sumFirstAndSecond = firstThrow + secondThrow;
  //If firstTry + SecondTry==10 is spare
  if ((sumFirstAndSecond == 10) && (firstThrow != 10) && i != player.Game.Stages.Length- 1)
  {
      int stageScore= player.Game.Stages[i].TotalScore + 
                         player.Game.Stages[i + 1].FirstTry;
             player.Game.Stages[i].TotalScore = stageScore;
         }
    }
}

public class Stage
{
    public int FirstTry { get; set; }
    public int SecondTry { get; set; }
    public int TotalScore { get; set; }
}

public class Player
{
    public Player(string name)
    {
        Name = name;
        Game = new Game(name);
    }

    public Game Game { get; set; }
    public string Name { get; set; }
}

public class Game
{
    public Game(string playerName)
    {
        PlayerName = playerName;
        Stages = new Stage[10];

        for (int i = 0; i < Stages.Length; i++)
        {
       Stages[i] = new Stage();
        }
    }

    public Stage[] Stages { get; internal set; }
    public string PlayerName { get; set; }

}
private void计算(玩家)
{
for(int i=0;i
保龄球? 尝试此操作,不要忘记添加未命中(作为0)。
应该对跑步和最终得分都有效

// All balls, including misses (0)!
public readonly IList<int> _balls = new List<int>();
private int _currentBall;

public int CalculateTotalScore()
{
   int score = 0;
   _currentBall = 0;

   for (var frame = 0; frame < 10; frame++)
   {
       if (_currentBall >= _balls.Count)
           break;

       if (_balls[_currentBall] == 10)
       {
           // Strrrike!
           score += AggregateScoreFromCurrentBall(3);
           _currentBall++;
       }
       else if (AggregateScoreFromCurrentBall(2) == 10)
       {
           // Spare
           score += AggregateScoreFromCurrentBall(3);
           _currentBall += 2;
       }
       else
       {
           score += AggregateScoreFromCurrentBall(2);
           _currentBall += 2;
       }
   }

   return score;
}

private int AggregateScoreFromCurrentBall(int numberOfBallsToSum)
{
    var sum = 0;
    for (var i = 0; i < numberOfBallsToSum; i++)
        if (_currentBall + i < _balls.Count)
           sum += _balls[_currentBall + i];

    return sum;
}
//所有球,包括未命中(0)!
public readonly IList_balls=new List();
私人int_currentBall;
公共int CalculateTotalScore()
{
智力得分=0;
_currentBall=0;
用于(变量帧=0;帧<10;帧++)
{
如果(\u currentBall>=\u balls.Count)
打破
如果(_balls[_currentBall]==10)
{
//史崔克!
得分+=当前球的总得分(3);
_currentBall++;
}
否则如果(聚合CorefromCurrentBall(2)==10)
{
//备用
得分+=当前球的总得分(3);
_电流球+=2;
}
其他的
{
得分+=当前球的总得分(2);
_电流球+=2;
}
}
返回分数;
}
私有int AggregateScoreFromCurrentBall(int numberOfBallsToSum)
{
var总和=0;
对于(var i=0;i
更改此选项:

private void Calculate(Player player)
{
    for (int i = 0; i < player.Game.Stages.Length; i++)
    {
        int firstThrow = player.Game.Stages[i].FirstTry;
        int secondThrow = player.Game.Stages[i].SecondTry;
        int sumFirstAndSecond = firstThrow + secondThrow;
        if ((sumFirstAndSecond == 10) && (firstThrow != 10) && i != player.Game.Stages.Length- 1)
        {
            int stageScore= player.Game.Stages[i].TotalScore + player.Game.Stages[i + 1].FirstTry;
            player.Game.Stages[i].TotalScore = sumFirstAndSecond + stageScore;
         }
         else if (i > 0) player.Game.Stages[i].TotalScore = player.Game.Stages[i - 1].TotalScore + sumFirstAndSecond;
    }
}
private void计算(玩家)
{
for(int i=0;i0)player.Game.Stages[i]。TotalScore=player.Game.Stages[i-1]。TotalScore+sumFirstAndSecond;
}
}

对不起,第一阶段总计+(第一次尝试+第二阶段的第二次尝试)不应该是16吗?@Marco 15是正确的。是第一阶段,总计+第二阶段。第一阶段我在谈论第二阶段的结果:你确定不应该是16吗?为什么是21?你在计算第二阶段的第一次尝试两次…@Akram我在第二阶段应该是6次21@Marco:这就是(美国)保龄球可以……而且只有在前一帧尝试了两次才得到10。如果任何一帧在第一次尝试中得到10,那么接下来的两次尝试将被加入(并重复计数)。谢谢你的时间。我得到的是15和6,而不是15和21。还有一个问题是,第二次循环时,它似乎没有添加它up@user231465:帧长是多少?