1

我是 C# 的新手。实际上,我几年前在大学学习过 Java,但显然学得不是很好!现在我非常热衷于从头开始学习 C#。我对绝对基础有一个不错的想法,但现在已经失败了。

我正在使用 WPF 构建一个相对简单的测验“游戏”应用程序。用户点击“加载测验”按钮,加载一个包含问题和答案的文本文件。用户然后单击“下一个问题”,这会将第一个问题和四个多项选择加载到文本框中。这一切似乎工作正常。

然后用户点击对应于正确答案的按钮1/2/3/4。当他们这样做时,如果选择了正确的答案,我希望“正确!做得好”文本显示在 tResult 中,或者如果答案不正确,则显示其他文本。

但是,单击按钮不会立即执行任何操作,直到单击 bNextQ_Click 时,最终在 tResult 中显示“对不起,这是不正确的”。

布尔标志似乎仍然为假,因此无法识别点击事件。

请注意:我意识到我的代码会一团糟,而且我确信我这样做的方式不好而且效率低下。任何建议都欣然接受!

无论如何,这是代码,非常感谢任何反馈:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;

namespace QuizGame
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
    }

    private bool button1Clicked = false;
    private bool button2Clicked = false;
    private bool button3Clicked = false;
    private bool button4Clicked = false;

    private int score = 0;

    private void txtQuestion_TextChanged()
    {
        throw new NotImplementedException();
    }

    private void bNextQ_Click(object sender, RoutedEventArgs e)
    {
        questionIteration();

    }

    private void numQuestions_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        button1Clicked = true;
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        button2Clicked = true;
    }

    private void button3_Click(object sender, RoutedEventArgs e)
    {
        button3Clicked = true;
    }

    private void button4_Click(object sender, RoutedEventArgs e)
    {
        button4Clicked = true;
    }

    private void txtQuestion_TextChanged(object sender, TextChangedEventArgs e)

    {
        //txtQuestion.Text = splitted[];

    }

    private void button_Load_Quiz_Click(object sender, RoutedEventArgs e)
    {
        int lineCount = File.ReadLines(@"C:\\Users\Morgan\Documents\Visual Studio 2010\Projects\QuizGame\QuizGame\Quiz.txt").Count();

        numQuestions.Text = lineCount.ToString();

        txtQuestion.Text = "Press 'Next Question' to start.";
    }

    private void questionIteration()
    {


        int i = 0;

        string[] questionArray = File.ReadAllLines(@"C:\\Users\Morgan\Documents\Visual Studio 2010\Projects\QuizGame\QuizGame\Quiz.txt");

        foreach (string qArrays in questionArray)
        {


            string question = questionArray[i];

            string[] splitted = question.Split('|');

            txtQuestion.Text = splitted[0];
            textBox1.Text = splitted[1];
            textBox2.Text = splitted[2];
            textBox3.Text = splitted[3];
            textBox4.Text = splitted[4];

            string correct = splitted[5];

            if (button1Clicked == true)
            {
                if (correct == textBox1.Text)
                {
                    score++;

                    tResult.Text = "Correct! Well done.";
                }
                else tResult.Text = "Sorry, that is incorrect.";

            }

            if (button2Clicked == true)
            {
                if (correct == textBox2.Text)
                {
                    score++;

                    tResult.Text = "Correct! Well done.";
                }
                else tResult.Text = "Sorry, that is incorrect.";

            }


            if (button3Clicked == true)
            {
                if (correct == textBox3.Text)
                {
                    score++;

                    tResult.Text = "Correct! Well done.";
                }
                else tResult.Text = "Sorry, that is incorrect.";

            }


            if (button4Clicked == true)
            {
                if (correct == textBox4.Text)
                {
                    score++;

                    tResult.Text = "Correct! Well done.";
                }
                else tResult.Text = "Sorry, that is incorrect.";

            }



            i++;
            button1Clicked = false;
            button2Clicked = false;
            button3Clicked = false;
            button4Clicked = false;
        }

    }

}
}
4

2 回答 2

1

单击按钮不会立即执行操作,直到单击 bNextQ_Click

那是因为您已经编写了“动作”部分,而不是立即编写,而是在 questionIteration() 函数中编写了代码,当单击下一个问题的按钮时,该函数显然会触发。要解决此问题,请将这部分代码放在一个单独的函数中,并在每次单击答案按钮时调用它:

if (button1Clicked == true)
        {
            if (correct == textBox1.Text)
            {
                score++;

                tResult.Text = "Correct! Well done.";
            }
            else tResult.Text = "Sorry, that is incorrect.";

        }

        if (button2Clicked == true)
        {
            if (correct == textBox2.Text)
            {
                score++;

                tResult.Text = "Correct! Well done.";
            }
            else tResult.Text = "Sorry, that is incorrect.";

        }


        if (button3Clicked == true)
        {
            if (correct == textBox3.Text)
            {
                score++;

                tResult.Text = "Correct! Well done.";
            }
            else tResult.Text = "Sorry, that is incorrect.";

        }


        if (button4Clicked == true)
        {
            if (correct == textBox4.Text)
            {
                score++;

                tResult.Text = "Correct! Well done.";
            }
            else tResult.Text = "Sorry, that is incorrect.";

        }

设置布尔标志 buttonxClicked 等后调用此函数。

于 2012-08-09T11:42:44.497 回答
0

但是,单击按钮不会立即执行任何操作,直到单击 bNextQ_Click 时,最终在 tResult 中显示“对不起,这是不正确的”。

那是因为该代码是这样编写的。没有错误或其他东西,这是设计缺陷。您的按钮(1-4)点击,实际上只是设置标志。这就是为什么什么都没有发生。下一步按钮实际上运行设置一些消息的代码。您必须更仔细地考虑解决方案,考虑会发生什么以及以什么顺序。现在你的代码做这样的事情:

1 用户点击加载按钮 - 测验已加载

2 用户点击 1-4 - 设置标志

3 用户单击下一步 - 再次加载问题(为什么?),并为每个问题(为什么,如果用户回答一个问题):

3A 答案已设置(再次 - 为什么?)

3B 检查用户是否回答正确

3C 复位标志

3D 检查下一个问题(带有重新设置的标志...)

它应该更像这样:

1 用户单击加载按钮 - 测验已加载,显示已准备就绪的消息

2 用户单击下一步 - 加载下一个问题

3 用户单击 1-4 - 检查答案是否正确,显示消息

4 用户单击下一步...

想想你的解决方案,在一张纸上写下一些顺序、一些“算法”和代码。

于 2012-08-09T11:50:43.943 回答