效果图 ----

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Threading;  //用到了线程 

namespace Example33

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        Thread G_th; //定义一个线程

        Random G_random = new Random(); //定一个随机数对象

        int G_int_num; //定义一个变量用存放随机数

        private void btn_begin_Click(object sender, EventArgs e)

        {

            RemoveControl(); //清空所有对象

            int p_int_x = 10; //X坐标的初始值

            int p_int_y = 60; //Y坐标的初始值

            for (int i = 0; i < 100; i++)   //添加100个按钮

            {

                Button bt = new Button();   //创建按钮

                bt.Text = (i + 1).ToString(); // 按钮赋值

                bt.Name = (i + 1).ToString(); // 名称

                bt.Width = 35;

                bt.Height = 35;

                bt.Location = new Point(p_int_x, p_int_y); //按钮的位置 

                bt.Click += new EventHandler(bt_Click);    //按钮的Click事件

                p_int_x += 36; //下一个按钮的位置

                if ((i+1) % 10 == 0) //设置换行

                {

                    p_int_x = 10;    //重新设置坐标

                    p_int_y += 36;   //重新设置坐标

                }

                Controls.Add(bt);    //将按钮放入窗体控件中

            }

            G_th = new Thread(  // 新建一个线程 

                delegate()      // 使用匿名方法

                {

                    int P_int_count = 0; //初始化 计数器

                    while (true)     //无限循环 

                    {

                        P_int_count = ++P_int_count > 100000000 ? 0 : P_int_count; //计数器累加

                        this.Invoke((MethodInvoker)delegate     //将代码交给主线程 运行 匿名方法

                        {

                            lb_time.Text = P_int_count.ToString();  //窗体中 显示 计数  

                        });

                        Thread.Sleep(1000);

                    }

                }

                );

            G_th.IsBackground = true;  //设置为 后台 线程

            G_th.Start();              //开始执行

            G_int_num = G_random.Next(1, 100); //生成随机数

            btn_begin.Enabled = false;  //停用 按钮 

        }

        void bt_Click(object sender, EventArgs e)

        {

            Control P_control = sender as Control; //将 sender 转换成 Control

            if (int.Parse(P_control.Name) > G_int_num) //判断是否大于 随机数 

            {

                P_control.BackColor = Color.Red;    //背景 设置 红色

                P_control.Enabled = false;          //按钮停用

                P_control.Text = "大";              //按钮赋值

            }

            if (int.Parse(P_control.Name) < G_int_num)

            {

                P_control.BackColor = Color.Red;    //背景 设置 红色

                P_control.Enabled = false;          //按钮停用

                P_control.Text = "小";              //按钮赋值

            }

            if (int.Parse(P_control.Name) == G_int_num)

            {

                G_th.Abort();  // 线程终止 

                MessageBox.Show(string.Format("恭喜你猜对了,用时{1}秒,共猜了{0}次!", GetCount(), lb_time.Text), "恭喜");

            }

        }

        /// <summary>

        /// 用于查找窗口中 Enabled 属性为 false 的控件有多少 

        /// 也就是 说 有多少次 么有猜中 

        /// </summary>

        /// <returns> 返回没有猜中的次数 </returns>>

        string GetCount()

        {

            int P_int_temp = 0; //初始化计数器

            foreach (Control c in Controls)

            {

                if (!c.Enabled) P_int_temp++; // 计数器累加 

            }

            return P_int_temp.ToString();

        }

        private void Form1_Shown(object sender, EventArgs e)

        {

            this.Text = "制作一个数字猜猜看小游戏";

        }

        //

        void RemoveControl()

        {

            for (int i = 0; i < 100; i++)  //遍历 100 个按钮

            {

                if (Controls.ContainsKey((i+1).ToString())) //判断中 是否 有此按钮

                {

                    for (int j = 0; j < Controls.Count; j++)

                    {

                        if (Controls[j].Name == (i+1).ToString())

                        {

                            Controls.RemoveAt(j);

                            break;

                        }  

                    }   

                }  

            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            Environment.Exit(0);    //强行关闭窗体

        }

    }

}

posted on 2011-10-17 23:31  C#_初学者  阅读(2150)  评论(0编辑  收藏  举报