1

私はC#が初めてです。私は実際に何年も前に大学でJavaを勉強しましたが、明らかにあまりよく学びませんでした! 今、私は C# をゼロから学ぶことに非常に熱心です。私は絶対的な基本についてはまともな考えを持っていますが、今は行き詰まっています.

WPF を使用して、比較的単純なクイズ「ゲーム」アプリケーションを構築しています。ユーザーが [クイズの読み込み] ボタンをクリックすると、質問と回答を含むテキスト ファイルが読み込まれます。次に、ユーザーが [次の質問] をクリックすると、最初の質問と 4 つの複数の選択肢がテキスト ボックスに読み込まれます。これはすべて正常に機能しているようです。

次に、ユーザーは正解に対応するボタン 1/2/3/4 をクリックします。彼らがこれを行うとき、正しい答えが選択された場合は「正解!よくやった」というテキストをtResultに表示し、答えが間違っている場合は他のテキストを表示します。

ただし、ボタンをクリックしても、bNextQ_Click がクリックされるまで、すぐにはアクションが実行されません。最終的に「申し訳ありませんが、それは正しくありません」が tResult に表示されます。

ブール フラグが false のままであるように見えるため、クリック イベントが認識されません。

注意してください: 私は自分のコードがめちゃくちゃになることを認識しており、これを悪い非効率的な方法で行っていると確信しています. どんなアドバイスもありがたく受け入れました!

とにかく、これがコードです。フィードバックは大歓迎です:

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.";

        }

bool フラグ buttonxClicked などを設定した後に、この関数を呼び出します。

于 2012-08-09T11:42:44.497 に答える
0

ただし、ボタンをクリックしても、bNextQ_Clickがクリックされるまで、すぐにアクションは実行されません。最後に「申し訳ありませんが、正しくありません」がtResultに表示されます。

それは、そのコードがそのように書かれているからです。バグなどはなく、設計上の欠陥です。ボタン(1〜4)をクリックすると、実際にはフラグを設定するだけです。そのため、何も起こりません。[次へ]ボタンは、実際にいくつかのメッセージを設定するコードを実行します。解決策について、何がどのような順序で行われるかについて、より慎重に考える必要があります。今あなたのコードはそのようなことをします:

1ユーザーがロードボタンをクリックします-クイズがロードされます

2ユーザーが1-4をクリックします-フラグが設定されます

3ユーザーが[次へ]をクリックします-質問が再度読み込まれ(何のために?)、各質問に対して(なぜ、ユーザーが1つの質問に回答した場合):

3A回答が設定されています(ここでも-何のために?)

3Bユーザーが正しい答えを得たかどうかを確認します

3Cリセットフラグ

次の質問を3Dチェックします(フラグをリセットして...)

次のようになります。

1ユーザーが[ボタンの読み込み]をクリックします-クイズが読み込まれ、準備ができたことを示すメッセージが表示されます

2ユーザーが[次へ]をクリックします-次の質問を読み込みます

3ユーザークリック1-4-答えが正しいかどうかのチェックがあり、メッセージが表示されます

4ユーザーが[次へ]をクリックします...

あなたの解決策について考え、一枚の紙とコードにいくつかの順序、いくつかの「アルゴリズム」を書き留めてください。

于 2012-08-09T11:50:43.943 に答える