1

だから私はと呼ばれるラベルを持っています.wherelblScore.TextlblScore.Text = iCorrectACount.ToString();基本iCorrectACount的にユーザーが正解した質問の数のカウンターです. ここで私がやりたいことは、基本的に、選択した難易度に応じてこの数値が最終スコアを乗算するようにすることです。つまり、簡単な質問が選択された場合はiCorrectACount、0 を掛けて文字列にキャストし、中程度の質問が選択された場合はiCorrectACount、1.5 を掛けてキャストします。文字列と難しい質問が選択された場合は、2 を掛けiCorrectACountて文字列にキャストしますが、これをどのように行うかはわかりません。

私のコードは次のようなものです:

private void QuizReset()
{
    // Resets the difficulty selection control and shows it again upon resetting the quiz
    difficultySelectionControl.Reset();
    difficultySelectionControl.BringToFront();

    // Disabled the 'Next' button and prompts the user to select a difficulty - User cannot continue without choosing
    btnNext.Enabled = false;
    lblStatus.Text = "Please select a difficulty";

    // Sets the number of questions and correct answers to zero
    iCorrectACount = 0;
    iCurrentQIndex = 0;
}

private void LoadQuestions(Difficulty difficulty)
{
    // Defines a random variable to be used to shuffle the order of the questions and answers
    var rand = new Random();
    // Loads the corresponding XML document with 'Easy', 'Medium' or 'Hard' questions depending on difficulty chosen
    var xdoc = XDocument.Load(GetFileNameFor(difficulty));

    // List of questions that are filtered from the XML file based on them being wrapped in question tags
    _questions = xdoc.Descendants("question")
        .Select(q => new Question()
        {
            ID = (int)q.Attribute("id"),
            Difficulty = (int)q.Attribute("difficulty"),
            QuestionText = (string)q.Element("text"),
            Answers = q.Element("answers")
                .Descendants()
                // Stores all answers into a string
                .Select(a => (string)a)
                // Randomizing answers
                .OrderBy(a => rand.Next()) 
                .ToArray(),
            CorrectAnswer = (string)q.Element("answers")
                .Descendants("correctAnswer")
                // Use value instead of index
                .First() 
        })
        // Selects questions that match the difficulty integer of the option the user chose
        .Where(q => q.Difficulty == (int)difficulty + 1)
        // Randomizing questions
        .OrderBy(q => rand.Next())
        .ToList(); 

    lblStatus.Text = String.Format("There are {0} questions in this section", _questions.Count);
}

private string GetFileNameFor(Difficulty difficulty)
{
    switch (difficulty)
    {
        case Difficulty.Easy: return "quiz_easy.xml";
        case Difficulty.Medium: return "quiz_medium.xml";
        case Difficulty.Hard: return "quiz_hard.xml";
        default:
            throw new ArgumentException();
    }
}       

private void PickQuestion()
{
    questionControl.DisplayQuestion(_questions[iCurrentQIndex]);
    questionControl.BringToFront();
    iCurrentQIndex++;
}

private void FormMain_Load(object sender, EventArgs e)
{
    QuizReset();
    lblScore.Text = "0";
}

private void miNewQuiz_Click(object sender, EventArgs e)
{         
    QuizReset();
    lblScore.Text = "0";
}

private void miExit_Click(object sender, EventArgs e)
{
    Close();
}

private void miHelp_Click(object sender, EventArgs e)
{
    FormHowToPlay form = new FormHowToPlay(); 
    form.ShowDialog();
}

private void miAbout_Click(object sender, EventArgs e)
{
    AboutBox1 aboutForm = new AboutBox1();
    aboutForm.ShowDialog();
}

private void btnNext_Click(object sender, EventArgs e)
{
    if (iCurrentQIndex < _questions.Count)
    {
        PickQuestion();
        lblStatus.Text = String.Format("Question {0} of {1}", iCurrentQIndex, _questions.Count);
    }
    else
    {
        btnNext.Enabled = false;
        lblStatus.Text = String.Format("You answered {0} questions correctly out of a possible {1}",
                                      iCorrectACount, _questions.Count);

        this.Hide();

        SummaryForm sumForm = new SummaryForm();
        DialogResult result = sumForm.ShowDialog();

        MenuForm mnuform = new MenuForm();
        mnuform.ShowDialog();
    }
}

    private void difficultySelectionControl_DifficultySelected(object sender, DifficultySelectedEventArgs e)
    {
        iCurrentQIndex = 0;
        LoadQuestions(e.Difficulty);           

        btnNext.Enabled = true;
    }  


    private void questionControl_QuestionAnswered(object sender, QuestionAnsweredEventArgs e)
    {
        if (e.IsCorrect)
            iCorrectACount++;

        lblScore.Text = iCorrectACount.ToString();

    }

それは私が理解する必要がある最後の小さなことであり、難易度が簡単/中/難しい場合、iCorrectAmount1/1.5/2/0 を掛ける方法がわからない.

助けやアドバイスをありがとう。

4

2 に答える 2

1

difficultySelectionControl_DifficultySelected、選択した難易度をクラス変数 に保存しますm_difficulty
次に、アクセスするだけですquestionControl_QuestionAnswered

クラス定義に を追加しprivate Difficulty m_difficultyます。
difficultySelectionControl_DifficultySelected、という行を追加しますm_difficulty = e.Difficulty。次に、 @Michael Perrenoudが提案したように、
その難しさを で使用できます。questionControl_QuestionAnswered

于 2013-03-14T23:45:46.380 に答える
1

これを行うだけです:

int modifier = 1;
if (difficulty == Difficulty.Medium) { modifier = 1.5; }
if (difficulty == Difficulty.Hard) { modifier = 2; }

lblScore.Text = (iCorrectACount * modifier).ToString();

明らかにどこかからを取得する必要がありますがdifficulty、今は正確にどこにあるかはわかりませんが、メソッドLoadQuestionsandGetFileNameForに渡したので取得できます。それを取得してコードを実行すると、BAM で修飾子を取得できます。 .

注:私は修飾子をデフォルトで に設定しましたが、毎回結果として正味になるため、1設定したくないと確信しています。00

于 2013-03-14T23:47:19.443 に答える