读书人

手机游戏《彩珠传奇》winform实现。

发布时间: 2013-09-17 13:35:59 作者: rapoo

手机游戏《彩珠传奇》,winform实现。如何判断连续的几个图片相同
前几天手机上玩了个游戏叫《彩珠传奇》,想没事想拿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;//空
}
} 遍历 winform picturebox imagelist click
[解决办法]
你应该建立个二维数组什么的,里面存点 1,2,3,4 这样的数字,计算的时候比较数字,而不是比较你的UI
[解决办法]
加载图片的时候用一个变量数组保存图片的数字,直接判断。
[解决办法]
亲,我刚写完这个程序,你可以到我的博客去看看http://blog.csdn.net/qinyuanpei,里面第一篇就有这个问题的答案,还有我的实例程序!简单来说,第一,pictureBox放一个控件数组,然后根据图片索引和pictureBox的索引判断就可以实现了
[解决办法]
图片有个MD5值 可通过这个来判断

读书人网 >C#

热点推荐