C# 尝试在数组中为c中的板创建PictureBox网格#
我正在尝试使用数组中的图片框制作一个无牌和交叉(tic-tac-toe)游戏的棋盘,我想到的就是这个。当我按下一个按钮时开始C# 尝试在数组中为c中的板创建PictureBox网格#,c#,multidimensional-array,picturebox,C#,Multidimensional Array,Picturebox,我正在尝试使用数组中的图片框制作一个无牌和交叉(tic-tac-toe)游戏的棋盘,我想到的就是这个。当我按下一个按钮时开始 for (int i = 0; i <= 3; i++) { for (int j = 0; j <= 3; j++) { PictureBox[,] pb = new PictureBox[i, j]; pb[i, j].Locat
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
PictureBox[,] pb = new PictureBox[i, j];
pb[i, j].Location = new Point(i * 150 + 100, j * 150 + 100);
pb[i, j].Width = 150;
pb[i, j].Height = 150;
pb[i, j].Visible = true;
pb[i, j].BorderStyle = BorderStyle.FixedSingle;
pb[i, j].BringToFront();
this.Controls.Add(pb[i, j]);
}
}
这里出了什么问题?您离这里不远了-您需要在循环之外声明数组,并在每次迭代中创建一张图片-这是有效的(已测试):
PictureBox[,]pb=新的PictureBox[3,3];
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{
pb[i,j]=新的PictureBox();
pb[i,j]。位置=新点(i*150+100,j*150+100);
pb[i,j].宽度=150;
pb[i,j].高度=150;
pb[i,j]。可见=真;
pb[i,j].BorderStyle=BorderStyle.FixedSingle;
pb[i,j].布林托夫隆();
this.Controls.Add(pb[i,j]);
}
}
(注意循环中的逻辑也错误,应该是<3而不是您已经在
for
循环中声明并实例化了多维数组。请尝试以下操作:
PictureBox[,] pb = new PictureBox[3, 3];
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
pb[i, j] = new PictureBox();
pb[i, j].Location = new Point(i * 150 + 100, j * 150 + 100);
pb[i, j].Width = 150;
pb[i, j].Height = 150;
pb[i, j].Visible = true;
pb[i, j].BorderStyle = BorderStyle.FixedSingle;
pb[i, j].BringToFront();
this.Controls.Add(pb[i, j]);
}
}
PictureBox[,]pb=新的PictureBox[3,3];
对于(inti=0;i我想说,您创建图片框数组来创建Ticktack-Toe游戏的方法是错误的。另外,您的代码效率很低
在代码中,重复创建冗余阵列
PictureBox[,] pb = new PictureBox[i, j];
您在这里浪费运行时内存
我建议创建一个继承自Picturebox类的新Picturebox类。
将该矩形区域划分为3X3矩阵(根据尺寸)
然后,您需要捕获单击事件并获取要点
private void pictureBox1_Click(object sender, EventArgs e)
{
MouseEventArgs eM = (MouseEventArgs)e;
//eM.X -X Coordinate eM.Y -Y Coordinate
}
使用此坐标标识用户单击的矩阵位置。然后重新绘制整个图片框以反映用户的输入。
这将分离维护picturebox数组的需要,您可以集中精力只维护3X3整数或布尔数组(0或1)。当出现赢的情况时,您只需要在匹配的数组项之间画一条线
使用Graphics.DrawLine
方法进行此操作这不就是设置位置的方法吗?这是我在查看其他人代码时想到的方法
PictureBox[,] pb = new PictureBox[i, j];
private void pictureBox1_Click(object sender, EventArgs e)
{
MouseEventArgs eM = (MouseEventArgs)e;
//eM.X -X Coordinate eM.Y -Y Coordinate
}