无法检查主类中其他类的数组值是否为true

时间:2013-06-05 05:16:08

标签: c# arrays class if-statement boolean

我正在用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")

但我似乎无法明白什么?

总结一下,当我调试程序时,我得到了来自其他类的随机图片。但是当我按下程序上的按钮时没有任何反应。没有声音,没有要标记的文字,也没有检查答案。

1 个答案:

答案 0 :(得分:1)

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

按如下方式更改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];
    }
}

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