前几天手机上玩了个游戏叫《彩珠传奇》,想没事想拿winform做一个。首先imagelist里边存七张不同颜色的图片,然后界面左上方拖三个picturebox控件,随机的赋三张图片。
右上方,button控件一个,控件名——“开始”
然后正中间一个panel,拖9*9共81个picturebox,所有的绑定同一个click事件。
点击开始随机给左上方三个picturebox赋三张图片,panel中81个picturebox中随机的赋三张图片,其他picturebox仍然为空;点击panel中其中一个有图片的picturebox控件(P1),选中后,任意点击另一个为空的picturebox(P2),把P1的图片给P2(P1为空,P2有图片),这个过程结束后在81个picturebox中随机的选三个图片为空的,把左上角三个picturebox的图片随机的赋给他们,左上角三个picturebox重新随机的在imagelist中得到三张图片。
依此继续,当有横、竖、斜任意一个方向五张图片相同时,五张图片全部消失……解决状况
已解决:1.左上角三个picturebox赋图片
解决方法:
Picture[] picture = new Picture[3];
for (int i = 0; i < picture.Length; i++)
{
picture[i] = new Picture(r.Next(0, imageList1.Images.Count));
}
pic1.Image = imageList1.Images[picture[0].PicNum];
pic2.Image = imageList1.Images[picture[1].PicNum];
pic3.Image = imageList1.Images[picture[2].PicNum];
2.每次在81个picturebox中随机挑三个,赋给他们图片
解决方法:
List<PictureBox> pics = new List<PictureBox>();
foreach (Control c in panel1.Controls)
{
PictureBox pic = c as PictureBox;
pic.Image = null;
if (pic != null)
pics.Add(pic);
}
Random r = new Random();
第一个随机数: int i = r.Next(0, pics.Count);
if (pics[i].Image == null)
{
pics[i].Image = imageList1.Images[r.Next(0, imageList1.Images.Count)];
}
else
{
goto 第一个随机数;
}
第二个随机数:
int j = r.Next(0, pics.Count);
if (pics[j].Image == null)
{
pics[j].Image = imageList1.Images[r.Next(0, imageList1.Images.Count)];
}
else
{
goto 第二个随机数;
} 第三个随机数:
int k = r.Next(0, pics.Count);
if (pics[k].Image == null)
{
pics[k].Image = imageList1.Images[r.Next(0, imageList1.Images.Count)];
}
else
{
goto 第三个随机数;
}
}
3.通过两次点击移动picturebox中的图片
解决方法:
private void pictureBox2_Click(object sender, EventArgs e)
{
PictureBox p = (PictureBox)sender;
PictureBox p100;
if (p100.Image == null)
{
p100.Image = p.Image;
}
else
{
p.Image = p100.Image;
p100.Image = null;
}
}
仍存在的问题
1.用上述方法移动图片后,第一次点击的picturebox的图片仍然存在
2.用上述方法给81给picturebox随机赋图片后,无法用遍历控件的方法确定各个picturebox的image,并判断是否有五个picturebox的image是同一张图片
有问题代码:
List<PictureBox> pics = new List<PictureBox>();
foreach (Control c in panel1.Controls)
{
PictureBox pic = c as PictureBox;
pics.Add(pic);
}
for (int i = 0; i < pics.Count; i++)
MessageBox.Show(pics[i].Image != null ? "ok" : "error null");//这里是 error null
for (int i = 0; i < panel1.Controls.Count-1; i++)
{
if (i % 9 < 5 && pics[i].Image != null && pics[i + 1].Image != null && pics[i].Image == pics[i + 1].Image)
{
pics[i].Image = null;//空
pics[i + 1].Image = null;//空
}
}遍历winformpictureboximagelistclick
右上方,button控件一个,控件名——“开始”
然后正中间一个panel,拖9*9共81个picturebox,所有的绑定同一个click事件。
点击开始随机给左上方三个picturebox赋三张图片,panel中81个picturebox中随机的赋三张图片,其他picturebox仍然为空;点击panel中其中一个有图片的picturebox控件(P1),选中后,任意点击另一个为空的picturebox(P2),把P1的图片给P2(P1为空,P2有图片),这个过程结束后在81个picturebox中随机的选三个图片为空的,把左上角三个picturebox的图片随机的赋给他们,左上角三个picturebox重新随机的在imagelist中得到三张图片。
依此继续,当有横、竖、斜任意一个方向五张图片相同时,五张图片全部消失……解决状况
已解决:1.左上角三个picturebox赋图片
解决方法:
Picture[] picture = new Picture[3];
for (int i = 0; i < picture.Length; i++)
{
picture[i] = new Picture(r.Next(0, imageList1.Images.Count));
}
pic1.Image = imageList1.Images[picture[0].PicNum];
pic2.Image = imageList1.Images[picture[1].PicNum];
pic3.Image = imageList1.Images[picture[2].PicNum];
2.每次在81个picturebox中随机挑三个,赋给他们图片
解决方法:
List<PictureBox> pics = new List<PictureBox>();
foreach (Control c in panel1.Controls)
{
PictureBox pic = c as PictureBox;
pic.Image = null;
if (pic != null)
pics.Add(pic);
}
Random r = new Random();
第一个随机数: int i = r.Next(0, pics.Count);
if (pics[i].Image == null)
{
pics[i].Image = imageList1.Images[r.Next(0, imageList1.Images.Count)];
}
else
{
goto 第一个随机数;
}
第二个随机数:
int j = r.Next(0, pics.Count);
if (pics[j].Image == null)
{
pics[j].Image = imageList1.Images[r.Next(0, imageList1.Images.Count)];
}
else
{
goto 第二个随机数;
} 第三个随机数:
int k = r.Next(0, pics.Count);
if (pics[k].Image == null)
{
pics[k].Image = imageList1.Images[r.Next(0, imageList1.Images.Count)];
}
else
{
goto 第三个随机数;
}
}
3.通过两次点击移动picturebox中的图片
解决方法:
private void pictureBox2_Click(object sender, EventArgs e)
{
PictureBox p = (PictureBox)sender;
PictureBox p100;
if (p100.Image == null)
{
p100.Image = p.Image;
}
else
{
p.Image = p100.Image;
p100.Image = null;
}
}
仍存在的问题
1.用上述方法移动图片后,第一次点击的picturebox的图片仍然存在
2.用上述方法给81给picturebox随机赋图片后,无法用遍历控件的方法确定各个picturebox的image,并判断是否有五个picturebox的image是同一张图片
有问题代码:
List<PictureBox> pics = new List<PictureBox>();
foreach (Control c in panel1.Controls)
{
PictureBox pic = c as PictureBox;
pics.Add(pic);
}
for (int i = 0; i < pics.Count; i++)
MessageBox.Show(pics[i].Image != null ? "ok" : "error null");//这里是 error null
for (int i = 0; i < panel1.Controls.Count-1; i++)
{
if (i % 9 < 5 && pics[i].Image != null && pics[i + 1].Image != null && pics[i].Image == pics[i + 1].Image)
{
pics[i].Image = null;//空
pics[i + 1].Image = null;//空
}
}遍历winformpictureboximagelistclick
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货