0

我写了一些代码在国际象棋游戏中移动国王;你能告诉我这个国王不动的代码的问题在哪里吗?谢谢。

编辑2:

public partial class Form1 : Form
{
    PictureBox[,] pic = new PictureBox[8, 8];

private void pictureBox34_Click(object sender, EventArgs e)
    {

if (pictureBox34.Image == chess9.Properties.Resources.siyahsah2)

{

f();
}
}

public void picarray()
{
        pic[0, 0] = pictureBox54;
        pic[0, 1] = pictureBox64;
        pic[0, 2] = pictureBox48;
        pic[0, 3] = pictureBox42;
        pic[0, 4] = pictureBox34;
        pic[0, 5] = pictureBox26;
        pic[0, 6] = pictureBox18;
        pic[0, 7] = pictureBox8;
        pic[1, 0] = pictureBox1;
        pic[1, 1] = pictureBox2;
        pic[1, 2] = pictureBox3;
        pic[1, 3] = pictureBox4;
              .
              .///thats so long(64 arrays)
              .
 }

public void f()
{



        int x = 3;
        int y = 3;

       for (int i = 1; i < x; i++)
       {
            for (int j = 1; j < y; j++)
            {
                pic[i, j] = new PictureBox();

                pic[i, j] = pic[i + 1, j + 1];

                pic[i, j] = new PictureBox();
                pic[i, j].Image = Image.FromFile("pic/siyahsah2.jpg");

          }

}
}
4

4 回答 4

5
if (pictureBox34.Image == Image.FromFile("pic/siyahsah2.jpg"))

你知道这行代码的含义吗?

  • 每次执行此语句时,都会使用存储在磁盘上的映像创建一个新实例
  • 比较永远不会评估为真,因为比较是基于引用的相等性,这对于新创建的对象显然不能为真
于 2010-12-04T10:55:28.743 回答
4

不,您没有正确定义返回类型,因为您在该代码的任何地方都没有任何返回值。

让我们看看代码可能会做什么......

第一个问题是这一行:

if (pictureBox34.Image == Image.FromFile("pic/siyahsah2.jpg"))

FromFile方法将创建一个新对象,并且由于该对象永远不会与存储在图片框中的对象相同,因此条件始终为假并且f永远不会调用该方法。

picarray您使用变量的方法中pic,但这与方法中使用的变量不同f,因为该变量是在该方法中本地声明的,

在该f方法中,您声明了一个您操作的图片框数组,但是您只需退出该方法而不对数组进行任何操作,因此该数组就消失了,结果将永远不会在任何地方可见。

由于数组是新创建的,它只包含空引用,因此将它们从数组中的一项复制到另一项不会完成任何事情。您还将项目从两个位置复制到同一位置,因此第二个副本将覆盖第一个。

由于变量ij设置为零,[i - 1, j - 1]将尝试访问数组外部的项目,这会给您一个异常。

您试图Image在数组中的一项的属性中存储一些内容,但由于数组中的所有项都为空,因此没有可以设置Image属性的图片框。

很难说出你想要做什么,但这些信息至少应该可以帮助你理解代码没有做什么。

于 2010-12-04T11:02:54.627 回答
1

很难用这个代码段告诉你在整个代码中试图做什么,但它看起来不正确,不。

我看到的问题是,在f()您创建时PictureBox pic,设置了它的一些属性,但随后不做任何事情。在方法结束时f()返回并被pic销毁。

如果此代码实际编译,那么根据您pix[]picarray()方法中的使用,我会说您在某处有一个类级别变量,即您的游戏板。在这种情况下,您不需要该行:

PictureBox[,] pic = new PictureBox[8, 8];

因为f()它只是创建一个新的空板,它只存在于内部f()而不是更新你的真实板。

于 2010-12-04T10:53:05.717 回答
1

删除此行

PictureBox[,] pic = new PictureBox[8, 8]; from the f() function

我想,你又在用新图片初始化图片数组了

于 2010-12-04T10:54:30.547 回答