前几天手机上玩了个游戏叫《彩珠传奇》,想没事想拿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