public int CalculateScore(List <int> dice, ScoreCategoryEnum.ScoreCategoryType category) { if (dice.Count > 6) { return(0); } int result = 0; if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.ACE)) { for (int i = 0; i < dice.Count; i++) { if (dice[i] == 1) { result += dice[i]; } } return(result); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.TWO)) { for (int i = 0; i < dice.Count; i++) { if (dice[i] == 2) { result += dice[i]; } } return(result); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.THREE)) { for (int i = 0; i < dice.Count; i++) { if (dice[i] == 3) { result += dice[i]; } } return(result); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.FOUR)) { for (int i = 0; i < dice.Count; i++) { if (dice[i] == 4) { result += dice[i]; } } return(result); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.FIVE)) { for (int i = 0; i < dice.Count; i++) { if (dice[i] == 5) { result += dice[i]; } } return(result); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.SIX)) { for (int i = 0; i < dice.Count; i++) { if (dice[i] == 6) { result += dice[i]; } } return(result); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.THREE_A_KIND)) { for (int i = 0; i < dice.Count; i++) { result += dice[i]; } return(ScoreCategory.isNOfKind(dice, 3) ? result : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.FOUR_A_KIND)) { for (int i = 0; i < dice.Count; i++) { result += dice[i]; } return(ScoreCategory.isNOfKind(dice, 4) ? result : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.FULLHOUSE)) { return(ScoreCategory.isFullHouse(dice) ? 25 : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.TINY_STRAIGHT)) { return(ScoreCategory.isTinyStraight(dice) ? 20 : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.SMALL_STRAIGHT)) { return(ScoreCategory.isSmallStraight(dice) ? 30 : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.LARGE_STRAIGHT)) { return(ScoreCategory.isLargeStraight(dice) ? 40 : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.YAHTZEE)) { return(ScoreCategory.isYahtzee(dice) ? 50 : 0); } else if (category.Equals(ScoreCategoryEnum.ScoreCategoryType.CHANCE)) { for (int i = 0; i < dice.Count; i++) { result += dice[i]; } return(result); } return(0); }