Beispiel #1
0
        // Return the upper section bonus if player submits score for category; playerScores
        // is reference to array of player's submitted scores for all categories.
        public int CalculateUpperSectionBonus(Rules.Category category, int score,
                                              int [] playerScores)
        {
            int cat = (int)category;

            if ((ActivePlayer == Player.Player1 && UpperBonusPlayer1) ||
                (ActivePlayer == Player.Player2 && UpperBonusPlayer2))
            {
                return(0); // return 0 if player has already earned the bonus.
            }
            if (cat < 1 || cat > 6 || playerScores [(int)category] != -1)
            {
                return(0);               // return 0 if the category is not upper section or was used already.
            }
            int sumUpperSection = score; // add the current score

            for (int i = 1; i <= Rules.DiceSides; i++)
            {
                if (playerScores [i] != -1)
                {
                    sumUpperSection += playerScores [i];
                }
            }
            if (sumUpperSection >= Rules.UpperSectionThreshold)
            {
                return(Rules.UpperSectionBonus);
            }
            return(0);
        }
Beispiel #2
0
 // Returns what a player has scored in given category.
 public int GetPlayerScore(Player player, Rules.Category category)
 {
     if (player == Player.Player1)
     {
         return(CategoriesPlayer1 [(int)category]);
     }
     else
     {
         return(CategoriesPlayer2 [(int)category]);
     }
 }
Beispiel #3
0
        // Submit score
        private void SubmitScore(int index)
        {
            YahtzeeGame.Player player   = Game.ActivePlayer;
            Rules.Category     category = (Rules.Category)index;
            Label         scoreLabel;
            DiceContainer container;

            int [] finalDice = new int [DiceSet.DiceCount];
            for (int i = 0; i < DiceSet.DiceCount; i++)
            {
                finalDice [i] = Game.Dice [i];
            }
            if (Game.SubmitScore(category))
            {
                SelectCategoryButtons [index].Visible = false;
                if (player == YahtzeeGame.Player.Player1)
                {
                    scoreLabel = Player1Scores [index];
                    container  = Player1Categories [index];
                }
                else
                {
                    scoreLabel = Player2Scores [index];
                    container  = Player2Categories [index];
                }
                for (int i = 0; i < DiceSet.DiceCount; i++)
                {
                    container.SetDie(i, DiceImages [finalDice [i]]);
                }
                UpdateScores();
                DisableButtons();
                SetButtonPositions();
                CurrentDice.ClearDice();
                UpdateStatus();
                LabelWarning.Text = "";
                if (Game.Round < Rules.TotalRounds)
                {
                    ButtonRoll.Enabled = true;
                }
                else
                {
                    ButtonRoll.Enabled = false;
                    string date = System.DateTime.Now.ToShortDateString() + " " +
                                  System.DateTime.Now.ToShortTimeString();
                    HighScores.SubmitScore(FormInputPlayerNames.Player1Name,
                                           Game.ScorePlayer1, date);
                    HighScores.SubmitScore(FormInputPlayerNames.Player2Name,
                                           Game.ScorePlayer2, date);
                }
            }
        }
Beispiel #4
0
        // Score the dice according to category from Yahtzee
        public int ScoreDice(Rules.Category c)
        {
            switch (c)
            {
            case Rules.Category.Aces:
                return(ScoreNumbers(1));

            case Rules.Category.Twos:
                return(ScoreNumbers(2));

            case Rules.Category.Threes:
                return(ScoreNumbers(3));

            case Rules.Category.Fours:
                return(ScoreNumbers(4));

            case Rules.Category.Fives:
                return(ScoreNumbers(5));

            case Rules.Category.Sixes:
                return(ScoreNumbers(6));

            case Rules.Category.ThreeOfAKind:
                return(ScoreThreeOfAKind());

            case Rules.Category.FourOfAKind:
                return(ScoreFourOfAKind());

            case Rules.Category.FullHouse:
                return(ScoreFullHouse());

            case Rules.Category.SmallStraight:
                return(ScoreSmallStraight());

            case Rules.Category.LargeStraight:
                return(ScoreLargeStraight());

            case Rules.Category.Yahtzee:
                return(ScoreYahtzee());

            case Rules.Category.Chance:
                return(ScoreChance());

            default:
                return(-10);
            }
        }
Beispiel #5
0
        // Add the score of the dice in selected category to active player's total score.
        // Then end the turn.
        public bool SubmitScore(Rules.Category category)
        {
            Tuple <int, int> score = ScoreDice(category);

            if (RollsUsed > 0 && Round < Rules.TotalRounds)
            {
                if (ActivePlayer == Player.Player1)
                {
                    if (CategoriesPlayer1 [(int)category] != -1)
                    {
                        return(false); // cancel if player 1 has already used scoring category
                    }
                    if (CalculateUpperSectionBonus(category, score.Item1, CategoriesPlayer1) > 0)
                    {
                        UpperBonusPlayer1 = true; // register player 1 has received upper sect. bonus
                    }
                    CategoriesPlayer1 [(int)category] = score.Item1;
                    BonusPlayer1 += score.Item2;
                    ScorePlayer1 += score.Item1 + score.Item2;
                    ActivePlayer  = Player.Player2;
                }
                else
                {
                    if (CategoriesPlayer2 [(int)category] != -1)
                    {
                        return(false); // cancel if player 2 has already used scoring category
                    }
                    if (CalculateUpperSectionBonus(category, score.Item1, CategoriesPlayer2) > 0)
                    {
                        UpperBonusPlayer2 = true; // register player 2 has received upper sect. bonus
                    }
                    CategoriesPlayer2 [(int)category] = score.Item1;
                    BonusPlayer2 += score.Item2;
                    ScorePlayer2 += score.Item1 + score.Item2;
                    ActivePlayer  = Player.Player1;
                    Round++;
                }
                Dice.Reset();
                RollsUsed = 0;
                return(true);
            }
            return(false);
        }
Beispiel #6
0
        // Evaluate the score + potential bonus of the current dice for given category.
        public Tuple <int, int> ScoreDice(Rules.Category category)
        {
            int [] playerScores = (ActivePlayer == Player.Player1) ?
                                  CategoriesPlayer1 : CategoriesPlayer2;
            int score = Dice.ScoreDice(category);
            int bonus = 0;

            if (Dice.ScoreDice(Rules.Category.Yahtzee) > 0 &&   // if player rolled a yahtzee
                playerScores [(int)Rules.Category.Yahtzee] > 0) // and already scored one,
            {                                                   // add bonus
                bonus = Rules.YahtzeeBonus;
                int diceValue = Dice [0];
                if (playerScores [diceValue] != -1) // if upper section for dice value used
                {
                    switch (category)               // allow the yahtzee as joker for some lower section categories
                    {
                    case Rules.Category.FullHouse:
                        score = Rules.ScoreFullHouse;
                        break;

                    case Rules.Category.SmallStraight:
                        score = Rules.ScoreSmallStraight;
                        break;

                    case Rules.Category.LargeStraight:
                        score = Rules.ScoreLargeStraight;
                        break;

                    default:
                        break;
                    }
                }
            }
            bonus += CalculateUpperSectionBonus(category, score, playerScores);

            return(new Tuple <int, int> (score, bonus));
        }