我写了一些代码来移动国际象棋游戏中的国王;你能告诉我国王不动的代码问题在哪里?感谢。
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");
}
}
}
答案 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引用,因此在数组中将它们从一个项复制到另一个项并不能完成任何事情。您还将项目从两个位置复制到同一位置,因此第二个副本将覆盖第一个。
由于变量i
和j
设置为零,[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数组