这个代码的问题是什么?

时间:2010-12-04 10:44:54

标签: c# winforms picturebox chess

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

EDITED2:

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 个答案:

答案 0 :(得分:5)

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

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

  • 每次执行此语句时,都会使用存储在磁盘上的图像
  • 创建一个新实例
  • 比较从不评估为真,因为比较是基于引用的相等性,对于新创建的对象显然不是这样的

答案 1 :(得分:4)

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

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

第一个问题是这一行:

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

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

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

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

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

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

您正在尝试将某些内容存储在数组中某个项的Image属性中,但由于数组中的所有项都为null,因此没有可以设置{{1}的图片框。的属性。

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

答案 2 :(得分:1)

很难用这个片段告诉你在整个代码中想要做什么,但它看起来不对,没有。

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

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

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

f()中,因为它只创建了一个仅存在于f()内的新空白板,而不是更新您的真实主板。

答案 3 :(得分:1)

删除此行

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

我想,你再次使用新图片

初始化pic数组