1

我正在用 C# 编写一个基本的写作游戏。游戏会随机在图片框中显示图片。图片存储在与主类不同的类中的数组中。

该类的代码如下所示:

public class bildelisteDyr
{

    public static Bitmap bildeListe (int index)
    {
        Bitmap[] bildeListe = new Bitmap[21];

        bildeListe[0] = Properties.Resources.ål;
        bildeListe[1] = Properties.Resources.ant;
        bildeListe[2] = Properties.Resources.bird; 
        bildeListe[3] = Properties.Resources.bear;
        bildeListe[4] = Properties.Resources.butterfly;
        bildeListe[5] = Properties.Resources.cat;
        bildeListe[6] = Properties.Resources.chicken;
        bildeListe[7] = Properties.Resources.dog;
        bildeListe[8] = Properties.Resources.elephant;
        bildeListe[9] = Properties.Resources.fish;
        bildeListe[10] = Properties.Resources.goat;
        bildeListe[11] = Properties.Resources.horse;
        bildeListe[12] = Properties.Resources.ladybug;
        bildeListe[13] = Properties.Resources.lion;
        bildeListe[14] = Properties.Resources.moose;
        bildeListe[15] = Properties.Resources.polarbear;
        bildeListe[16] = Properties.Resources.reke;
        bildeListe[17] = Properties.Resources.sheep;
        bildeListe[18] = Properties.Resources.snake;
        bildeListe[19] = Properties.Resources.spider;
        bildeListe[20] = Properties.Resources.turtle;
        return bildeListe[index];
    }    
}

当调用数组中的值以在图片框中随机显示图片时,一切正常。这样做是这样的:

pictureBox1.Image = bildelisteDyr.bildeListe(r.Next(0, 20));

但是我有三次需要代码来检查图片框的值来做某事。我有一个播放声音按钮,一个为标签提供文本的按钮和一个用于检查文本框中给定答案的按钮。它们似乎都不起作用。这是一些代码:

给标签文本:

 if (pictureBox1.Image == bildelisteDyr.bildeListe(0))
 {
     svarPåOppgave.Text = "ÅL";
 }
 else if (pictureBox1.Image == bildelisteDyr.bildeListe(1))
 {
     svarPåOppgave.Text = "MAUR";
 }
 // etc.

播放声音按钮:

if (pictureBox1.Image == bildelisteDyr.bildeListe(0))
{
    SoundPlayer player = new SoundPlayer();
    player = new SoundPlayer("lyd/dyr/ål.wav");
    player.PlaySync();
}
else if (pictureBox1.Image == bildelisteDyr.bildeListe(1))
{
    SoundPlayer player = new SoundPlayer();
    player = new SoundPlayer("lyd/dyr/enmaur.wav");
    player.PlaySync();
}

// etc.

检查是否给出正确答案:

if (pictureBox1.Image == bildelisteDyr.bildeListe(0))
{
    if (textBox1.Text.Trim().ToLower() == "ål")
    {
        riktigLyd.Play();

        poengInt += 1;

        textBox1.Text = "";

        pictureBox1.Image = bildelisteDyr.bildeListe(tilfeldigBildet);

        tekstTilLabel();

        svarPåOppgave.Visible = false;
    }
    else
    {

        feilLyd.Play();

        poengInt -= 1;

        textBox1.Text = "";
    }

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

}
else if (pictureBox1.Image == bildelisteDyr.bildeListe(1))
{
    if (textBox1.Text.Trim().ToLower() == "maur")
    {
        riktigLyd.Play();

        poengInt += 1;

        textBox1.Text = "";

        pictureBox1.Image = bildelisteDyr.bildeListe(tilfeldigBildet);

        tekstTilLabel();

        svarPåOppgave.Visible = false;
    }
    else
    {

        feilLyd.Play();

        poengInt -= 1;

        textBox1.Text = "";
    }

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

} // etc.

我猜if语句有问题

if (textBox1.Text.Trim().ToLower() == "ål")

但我似乎无法理解什么?

总而言之,当我调试程序时,我从其他类中获取了随机图片。但是当我按下程序上的按钮时,什么也没有发生。没有声音,没有要标记的文本,也没有检查答案。

4

1 回答 1

1

这里有一些不寻常的架构选择,但您面临的具体问题是您Bitmap每次都在重新创建 s,并且比较是通过引用而不是值来执行的。

bildelisteDyr按如下方式更改您的课程:

public class bildelisteDyr
{
    static Bitmap[] bildeListeInternal;

    static bildelisteDyr() {
        bildeListeInternal = new Bitmap[21];
        bildeListeInternal[0] = Properties.Resources.ål;
        //...
        bildeListeInternal[20] = Properties.Resources.turtle;
    }

    public static Bitmap bildeListe (int index) {
        return bildeListeInternal[index];
    }
}

关于概念问题的更多资源:

于 2013-06-05T05:32:58.450 回答