这是利用C#语言写的一个小游戏。

i_f24.gif游戏规则:在游戏开始时,点击图片,将相同的两个图片消去。

听着还蛮简单的,做起来是真难呀!

好不容易一边完成了,赶紧记下来:

private void Form1_Load(object sender, EventArgs e)
       {
           //准备一个画板
           GraphicsPath gp = new GraphicsPath();
           //在画板的左上角(0,0)开始画一个椭圆,椭圆的长度与宽度与原来窗体相同
           gp.AddEllipse(0,0,this.Width,this.Height);
           this.Region = new Region(gp);
       }
       //给窗体镶上金边
       private void Form1_Paint(object sender, PaintEventArgs e)
       {
           Graphics g = e.Graphics;
           g.DrawEllipse(new Pen(new SolidBrush(Color.Gold),5),2,2,this.Width-4,this.Height-4);
           g.Save();
       }
       //单击“开始”按钮后首先将16张图片全部展示一遍,便于用户记住位置
       //3秒钟后,将所有图片都编程蘑菇
       int[]arry=new int [16];
       //定义一个全局变量,统计某个数与它之前的数比较的次数(有相同的就加1)
       int count = 0;
       Random r = new Random();
       //将16个数分成两组不同顺序的8(0-7)个数
       private void btnGo_Click(object sender, EventArgs e)
       {
           //当单击开始按钮时将“开始”按钮隐藏
           this.btnGo.Visible = false;
           //为16个数一次产生随机数,保证只有两个数时一样的,也就是8对
           for (int i = 0; i < arry.Length; i++)
           {
               arry[i]=r.Next(0,p_w_picpathList1.Images.Count-1);
               count = 0;//将统计次数变为0
               //将目前的数与它前面的比较
               for (int j = 0; j < i; j++)
               {
                   //如果有相同的则count+1
                   if (arry[i]==arry[j])
                   {
                       count++;
                       //当统计次数为2(即有三个数相同)时,当前这个数需要重新生成
                       if (count==2)
                       {
                           i--;//i--完成后进入break,跳出包含break的最内层循环,进入i++(相当于这一位置上的随机数粗要重新生成)
                           break;
                       }
                   }
               }
           }
           count = 0;
           foreach (object obj in this.Controls)
           {
               if (obj.GetType().Name=="MyPictureBox")
                   {
                       //确定每一个控件上的图形应该如何显示,这里选择拉伸或收缩
                       ((PictureBox)obj).SizeMode = PictureBoxSizeMode.StretchImage;
                       //确定当前控件缩放的图片
                       ((PictureBox)obj).Image=p_w_picpathList1.Images[arry[count]];
                       //记录每一个图片的tag属性(图片的序号),后面有用
                       ((PictureBox)obj).Tag=arry[count];
                       count++;
                   }
           }
           this.timer1.Start();
           this.timer2.Start();
       }
       private void btnCancel_Click_1(object sender, EventArgs e)
       {
           this.Close();
       }
       int time = 3;
       //timer1用来控制显示的时间(3秒钟)
       private void timer1_Tick(object sender, EventArgs e)
       {
           //判断时间是否在1-3之间,如果在分别将3的数字显示出来
           if(time>0)
           {
               //设置字体级大小
               this.lblContent.Font = new Font("宋体",30);
               //往标签上写字
               this.lblContent.Text = time.ToString();
           }
           //如果时间为0了,那么将标签显示为“开始”
           else if (time==0)
           {
               //this.lblContent.Font = new Font("微软雅黑", 30);
               this.lblContent.Text = "开始";
           }
           //如果时间小于0了,那么timer1的任务就完成了,此时将所有的图片都变成蘑菇,开始游戏
           else
           {
               this.timer1.Stop();//Timer1停止计时
               foreach (object obj in this.Controls)
               {
                   if (obj.GetType().Name=="MyPictureBox")
                   {
                       ((MyPictureBox)obj).Image=p_w_picpathList1.Images[8];
                   }
               }
           }
           time -= 1;
       }
       //控制“Time”变化的速度,什么时候开始变,什么时候不变
       private void timer2_Tick(object sender, EventArgs e)
       {
           //当标签上的字的大小小于1时,timer2停止 并返回
           if (this.lblContent.Font.Size<1)
           {
               this.timer2.Stop();
               return;
           }
           //获取标签上的字体的大小
           float f = this.lblContent.Font.Size;
           //设置字符的字体和大小
           this.lblContent.Font = new Font("宋体",f-0.5f);
       }
       int clickCount = 0;//点击PictureBox的次数
       PictureBox oncePicture;//第一次点击的图片
       PictureBox secondPicture;//第二次点击的图片
       bool cleanTwoPictures = false;
       private void myPictureBox1_Click(object sender, EventArgs e)
       {
           MyPictureBox mpb = (MyPictureBox)sender;
           //判断是否两次都点击的是同一张照片
           if (clickCount == 1 && mpb.Name == oncePicture.Name)
           {
               return;
           }
           //在设置当前位置图片的图像
           mpb.Image=p_w_picpathList1.Images[int.Parse((mpb.Tag).ToString())];
           clickCount++;
           if (clickCount == 2)
           {
               //this.Enabled = false;//使当前控件不可用
               clickCount = 0;
               secondPicture = mpb;//将当前控件作为第二次单击的图片
               //判断两次单击的图片的序号是否相同(上面刚进入游戏时,图片的Tag属性存放的是图片的序号)
               //如果图片的序号相同那么久清除这两张图片
               if (oncePicture.Tag.ToString() == secondPicture.Tag.ToString())
               {
                   cleanTwoPictures = true;
               }
               //如果不同,则不清除图片
               else
               {
                   cleanTwoPictures = false;
               }
               //在判断是否清除这两张照片之后,再做相应处理
               this.timer3.Start();
           }
           else
           {
               oncePicture = mpb;//将当前的图片作为第一次点击的图片
           }
       }
       private void timer3_Tick(object sender, EventArgs e)
       {
           if (cleanTwoPictures == true)
           {
               //将两次点击的图片清除
               oncePicture.Dispose();
               secondPicture.Dispose();
               //初始化两个控件(在上一轮中它们已经被赋值)
               oncePicture = null;
               secondPicture = null;
           }
           else
           {
               //将当前的两个控件的图像都变成蘑菇
               foreach (object obj in this.Controls)
               {
                   if (obj.GetType().Name == "MyPictureBox")
                   {
                       ((PictureBox)obj).Image = p_w_picpathList1.Images[8];
                   }
               }
           }
           this.timer3.Stop();
           //this.Enabled = true;
       }

很简单的游戏而已居然写这么久,要是个大型游戏我不得搞几天啊!

汗颜。。。惭愧。。

不过,还是Ajax的姑娘,加油!