Exemplo n.º 1
0
        public void DifficultyCheck(Enum_Difficulty saken)
        {
            switch (saken)
            {
            case Enum_Difficulty.Easy:
                GameForm.ActiveForm.Text += " - Easy";
                break;

            case Enum_Difficulty.Medium:
                GameForm.ActiveForm.Text += " - Medium";
                break;

            case Enum_Difficulty.Hard:
                GameForm.ActiveForm.Text += " - Hard";
                break;

            case Enum_Difficulty.Hardcore:
                GameForm.ActiveForm.Text += " - Hardcore";
                break;

            default:
                GameForm.ActiveForm.Text += " - fel";
                break;
            }
        }
Exemplo n.º 2
0
 private void pBox_Hardcore_Click(object sender, EventArgs e)
 {
     difficulty = Enum_Difficulty.Hardcore;
     newForm.Show();
     newForm.DifficultyCheck(difficulty);
     this.Hide();
 }
    public QuestionAndAnswer GenerateQuestionAndAnswer(Enum_Difficulty difficultyEnum)
    {
        // Placeholder object.
        QuestionAndAnswer tempQuestionAndAnswer = null;

        // List of valid operators that can be used.
        List <string> validOperators = new List <string>();

        // Determines which operators are specified to use.
        foreach (KeyValuePair <string, bool> entry in gameSetupData.OperatorsAndSymbols)
        {
            if (entry.Value == true)
            {
                validOperators.Add(entry.Key); // Adds the 3 letter operator name
            }
        }
        // Variables used to construct QuestionAndAnswer object.
        string operatorToUse    = validOperators[random.Next(0, validOperators.Count)];
        string question         = null;
        int answer              = 0;
        List <int> wrongAnswers = new List <int>();

        // Sets values based on difficulty.
        switch (difficultyEnum)
        {
        case Enum_Difficulty.EASY:
            // EASY
            // single digits
            // up to 12 x 12
            // positive differences
            ModifyDifficultyFactors(1, 12);
            break;

        case Enum_Difficulty.MEDIUM:
            // MEDIUM
            // double digits
            // up to 15 x 15
            // positive differences
            ModifyDifficultyFactors(2, 15);
            break;

        case Enum_Difficulty.HARD:
            // HARD
            // triple dgits
            // up to 20 x 20
            // negative differences
            ModifyDifficultyFactors(3, 20);
            break;

        default:
            break;
        }

        // Creates equation, answer and data needed for return-object.
        switch (operatorToUse)
        {
        case "div":

            // maxValue equation: f(x) = 10 ^ x - 1.
            // f(1) = 10 ^ 1 - 1 = 9
            // f(2) = 10 ^ 2 - 1 = 99
            int dividend = random.Next(2, gameSetupData.MaxMultiple);
            int divisor  = random.Next(2, gameSetupData.MaxMultiple);
            int quotient = dividend * divisor;

            question = "" + quotient + " ÷ " + dividend;
            answer   = divisor;

            break;

        case "mul":

            int mulTerm1 = random.Next(2, gameSetupData.MaxMultiple);
            int mulTerm2 = random.Next(2, gameSetupData.MaxMultiple);

            // Places larger number first.
            if (mulTerm1 < mulTerm2)
            {
                int tempMulTerm = mulTerm1;

                mulTerm1 = mulTerm2;
                mulTerm2 = tempMulTerm;
            }

            int mulProduct = mulTerm1 * mulTerm2;

            question = "" + mulTerm1 + " x " + mulTerm2;
            answer   = mulProduct;

            break;

        case "add":

            // maxValue equation: f(x) = 10 ^ x - 1.
            // f(1) = 10 ^ 1 - 1 = 9
            // f(2) = 10 ^ 2 - 1 = 99
            int addTerm1 = random.Next(1, Convert.ToInt32(Math.Pow(10, gameSetupData.DigitRange[1]) - 1));
            //int addTerm2 = random.Next(1, Convert.ToInt32(Math.Pow(10, gameSetupData.DigitRange[1]) - 1));
            int addTerm2 = random.Next(1, Convert.ToInt32(Math.Pow(10, gameSetupData.DigitRange[1]) - 1));

            // Places larger number first.
            if (addTerm1 < addTerm2)
            {
                int tempAddTerm = addTerm1;

                addTerm1 = addTerm2;
                addTerm2 = tempAddTerm;
            }

            int addSum = addTerm1 + addTerm2;

            question = addTerm1 + " + " + addTerm2;
            answer   = addSum;

            break;

        case "sub":

            int subTerm1 = random.Next(1, Convert.ToInt32(Math.Pow(10, gameSetupData.DigitRange[1]) - 1));
            int subTerm2 = random.Next(1, Convert.ToInt32(Math.Pow(10, gameSetupData.DigitRange[1]) - 1));

            // Places larger number first.
            if (subTerm1 < subTerm2)
            {
                int tempSubTerm = subTerm1;

                subTerm1 = subTerm2;
                subTerm2 = tempSubTerm;
            }

            int subTerm2Temp = subTerm2;

            for (int i = random.Next(1, 2); i == 2; i++)
            {
                if (subTerm2 > 20)
                {
                    subTerm2 = random.Next(1, 10);
                    Debug.Log("subTerm2 changed from " + subTerm2Temp + "  to " + subTerm2);
                }
            }

            int subDif = subTerm1 - subTerm2;

            question = subTerm1 + " - " + subTerm2;
            answer   = subDif;

            break;

        default:
            Debug.LogWarning("<color=orange>No operator used!</color>");
            break;
        }

        // Determines wrong answers.
        for (int i = 0; wrongAnswers.Count < gameSetupData.NumberOfWrongAnswers; i++)
        {
            int offsetAnswer = answer + random.Next(-15, 15);

            // Ensures divWrongAnswers has unique values only.
            while (wrongAnswers.Contains(offsetAnswer) || offsetAnswer == 0 || offsetAnswer == answer)
            {
                offsetAnswer = answer + random.Next(-15, 15);
            }

            wrongAnswers.Add(offsetAnswer);
        }

        // Prevents sequential duplicate questions. If there is a duplicate, this statement recursively creates another/more questions.
        if (questionsAndAnswers.Count >= 1 && questionsAndAnswers[questionsAndAnswers.Count - 1].question.Equals(question))
        {
            Debug.LogWarning("Duplicate question \"" + question + "\" found at index: " + (questionsAndAnswers.Count) + ". Creating a replacement.");
            tempQuestionAndAnswer = GenerateQuestionAndAnswer(gameSetupData.Difficulty);
        }
        else
        {
            tempQuestionAndAnswer = new QuestionAndAnswer(question, answer, wrongAnswers);
        }

        return(tempQuestionAndAnswer);
    }