0

ゲームを開発しています。

シーンにはピクチャーボックスがあり、ピクチャーボックスの画像は、ユーザーがテキストボックスで画像の正しい名前に答えるとランダムに変化する配列に設定されます。

Int 変数が正しい場合に増加し、間違っている場合に減少するように設定しました。

正解の場合は特定の音を、不正解の場合は特定の音を再生します。

デバッグする理由は、数回は正常に動作し、ボタン 1 クリックで if ではなく else に移動するためです。

そのため、テキストボックスに正しい入力が設定されていても、Int を大きくせず、間違ったオーディオを再生します。コードは次のとおりです。

namespace AngelinaSkriver2
{
public partial class Form1 : Form
{

    Bitmap[] bildeListe = new Bitmap[4];

    int poengInt;

    Random r = new Random();


    public Form1()
    {
        InitializeComponent();

        bildeListe[0] = Properties.Resources.ål;
        bildeListe[1] = Properties.Resources.ant;
        bildeListe[2] = Properties.Resources.apple;
        bildeListe[3] = Properties.Resources.arm;

        pictureBox1.Image = bildeListe[r.Next(0, 3)];

    }

    public void button1_Click(object sender, EventArgs e)
    {
        int tilfeldigBildet = r.Next(0, 3);
        SoundPlayer riktigLyd = new SoundPlayer("lyd/applause.wav");
        SoundPlayer feilLyd = new SoundPlayer("lyd/feil.wav");

        if (pictureBox1.Image == bildeListe[0])
        {
            if (textBox1.Text.Trim().ToLower() == "ål")
            {

                riktigLyd.Play();

                poengInt += 1;

                textBox1.Text = "";

                pictureBox1.Image = bildeListe[tilfeldigBildet];

            }
            else
            {

                feilLyd.Play();

                poengInt -= 1;

                textBox1.Text = "";
            }

            String poengString = poengInt.ToString();
            label1.Text = poengString;

        }


        if (pictureBox1.Image == bildeListe[1])
        {
            if (textBox1.Text.Trim().ToLower() == "maur")
            {

                riktigLyd.Play();

                poengInt += 1;

                textBox1.Text = "";

                pictureBox1.Image = bildeListe[tilfeldigBildet];

            }
            else {

                feilLyd.Play();

                poengInt -= 1;

                textBox1.Text = "";
            }

            String poengString = poengInt.ToString();
            label1.Text = poengString;

        }

        if (pictureBox1.Image == bildeListe[2])
        {
            if (textBox1.Text.Trim().ToLower() == "eple")
            {

                riktigLyd.Play();

                poengInt += 1;

                textBox1.Text = "";

                pictureBox1.Image = bildeListe[tilfeldigBildet];
            }
            else
            {

                feilLyd.Play();

                poengInt -= 1;

                textBox1.Text = "";
            }

            String poengString = poengInt.ToString();
            label1.Text = poengString;

        }

        if (pictureBox1.Image == bildeListe[3])
        {
            if (textBox1.Text.Trim().ToLower() == "arm")
            {

                riktigLyd.Play();

                poengInt += 1;

                textBox1.Text = "";

                pictureBox1.Image = bildeListe[tilfeldigBildet];
            }
            else
            {

                feilLyd.Play();

                poengInt -= 1;

                textBox1.Text = "";
            }

            String poengString = poengInt.ToString();
            label1.Text = poengString;

        }

    }

機能しない原因が見つからないようです。何かを見落としていますか?

4

1 に答える 1

1

このコードから理由を言うことはできません。デバッグのテキスト ボックスにテキストが正確に表示されていることを確認しましたか?

ただし、いくつかの一般的な提案: textBox1.Text.Trim().ToLower() を使用して比較してください。そうすれば、それほど多くの異なるバージョンをチェックする必要はありません。

画像が配列にあるのに、なぜ単語も配列にないのですか? 次に、必要な比較は 1 つだけです。画像/単語のインデックスを保存するだけです。画像オブジェクトを比較することは、うまくいきますが、最善の方法ではありません。

poengInt += -1; ではありません。むしろ poengInt -= 1; の方が分かりやすいです。

最初に正しい場合と間違っている場合にSoundPlayerのインスタンスを作成し、実際にサウンドを再生するときに再度作成するのはなぜですか?

また、textBox1、Form1 などではなく、最初から説明変数名を使用してください。これにより、長期的には非常に簡単になります。

于 2013-05-20T12:11:55.907 に答える