C# 这个代码有什么问题?
我写了一些代码来移动棋局中的国王;你能告诉我king不动的密码哪里出了问题吗?谢谢 EDITED2:C# 这个代码有什么问题?,c#,winforms,picturebox,chess,C#,Winforms,Picturebox,Chess,我写了一些代码来移动棋局中的国王;你能告诉我king不动的密码哪里出了问题吗?谢谢 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.Resou
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");
}
}
}
公共部分类表单1:表单
{
PictureBox[,]pic=新的PictureBox[8,8];
私有无效图片box34_单击(对象发送者,事件参数e)
{
if(pictureBox34.Image==chess9.Properties.Resources.siyahsah2)
{
f();
}
}
公共空间picarray()
{
pic[0,0]=pictureBox54;
pic[0,1]=picturebx64;
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;
.
.///太长了(64个数组)
.
}
公共空间f()
{
int x=3;
int y=3;
对于(int i=1;i
很难用这段代码告诉您在整个代码中要做什么,但它看起来不正确,不是
我看到的问题是,在f()
中,您创建了PictureBox pic
,设置了它的一些属性,但不对它做任何操作。在f()
结束时,该方法返回并且pic
被销毁
如果这段代码实际上是编译的,那么在picarray()
方法中使用pix[]
,我会说你在游戏板的某个地方有一个类级变量。在这种情况下,你不需要行:
PictureBox[,] pic = new PictureBox[8, 8];
在f()
中,因为它只是创建了一个仅存在于f()
中的新空板,而不是更新您的真实板。删除此行
PictureBox[,] pic = new PictureBox[8, 8]; from the f() function
我想,你又在用新图片初始化pic阵列了
if (pictureBox34.Image == Image.FromFile("pic/siyahsah2.jpg"))
你知道这行代码的含义吗
- 每次执行此语句时,都会使用存储在磁盘上的映像创建一个新实例
- 比较的计算结果永远不会为true,因为比较是基于引用的相等性,而对于新创建的对象,这显然不可能为true
if (pictureBox34.Image == Image.FromFile("pic/siyahsah2.jpg"))
FromFile
方法将创建一个新对象,由于该对象永远不会与图片框中存储的对象相同,因此该条件始终为false,并且永远不会调用方法f
在方法picarray
中,您使用的是变量pic
,但该变量与f
方法中使用的变量不同,因为该变量在该方法中局部声明
在f
方法中,您正在声明一个您操作的图片框数组,但随后您只需退出该方法,而不对该数组执行任何操作,因此该数组就会消失,结果将永远不会在任何地方可见
由于数组是新创建的,它只包含null referecens,因此将它们从数组中的一个项目复制到另一个项目不会有任何效果。您还将项目从两个位置复制到同一位置,因此第二个副本将覆盖第一个副本
由于变量i
和j
被设置为零,[i-1,j-1]
将尝试访问数组外的项,这将给您一个异常
您正试图在数组中某个项的Image
属性中存储某些内容,但由于数组中的所有项都为空,因此没有可以设置的Image
属性的图片框
很难说您想做什么,但这些信息至少可以帮助您理解代码没有做什么。老实说,这里几乎所有的事情都是错误的,比如函数名,使用图像引用来检查它们是否是相同的非法数组索引(i-1,j-1)这个新版本仍然没有意义,picarray函数有什么用?为什么f()中会有奇怪的数组赋值?第一个甚至不做任何事情,因为它被第二个覆盖了,即使这样它也会弄乱整个数组。你能试着解释一下这个想法吗?你想实现什么?我试图在国际象棋游戏中实现国王棋子的动作。那么你有什么建议吗?谢谢我也很理解,但为什么是硬编码的值像pic[0,4]x=3,y=3和pictureBox34等等?我认为使用PictureBox比其他的更容易,不是吗?这不是唯一的错误。你应该提供更多的解释,说明这将如何解决提问者所遇到的问题。而不是为什么你不指出这一点,因为吉姆提供的答案也是不完整的e、 这似乎是,你有偏见!!没有偏见,我没有投反对票。但是,我觉得Jim的答案更完整,因为它解释了特定代码行导致问题的原因和方式。如果我们要学习如何自己修复错误,了解错误发生的原因非常重要。@code Gray:谢谢,我会记住你在未来的答案!谢谢你指出这一点,但我没有编辑我的帖子,因为其他PPL已经在他们的答案中写了这么多,你的答案很清楚。但是我不理解你关于新创建的数组的答案以及你答案的第3段,第6段。非常感谢,我编辑了我的帖子question@arash:您正在声明数组变量在方法内部,这意味着variab