综合实践_猜数字小游戏

Posted on 2018-10-27 13:54  努力成长静待花开  阅读(298)  评论(0编辑  收藏  举报

用到的主要有线程,随机数

为了实现多余组件的清空,用到了panel面板

以及按钮的一些属性,注解很详尽

代码如下:

 1 namespace Number_Games
 2 {
 3     public partial class Form1 : Form
 4     {
 5         public Form1()
 6         {
 7             Controls.Clear();
 8             InitializeComponent();
 9         }
10         int rand_num;//定义随机数
11         int i = 0;//定义计数
12         Thread RunTime;//定义一条线程
13 
14         private void button1_Click(object sender, EventArgs e)
15         {
16             Clear_btn();//清掉多余组件
17             int int_x = 20;//定义初始x坐标
18             int int_y = 20;//定义初始y坐标
19             for (int i = 1; i <= 100; i++)
20             {   //按钮布局部分
21                 Button bt = new Button();//创建button对象
22                 bt.Text = i.ToString();//设置按钮文本
23                 bt.Name ="bt_"+i.ToString();//按钮名字
24                 bt.Size = new Size(35, 35);//按钮大小
25                 bt.Click += new EventHandler(bt_click);//建立該按鈕的 Click 事件
26                 bt.Location = new Point(int_x, int_y);//按钮位置
27                 if (i % 10 == 0)
28                 {
29                     int_x = 20;
30                     int_y += 37;
31                 }
32                 else
33                 {
34                     int_x += 37;
35                 }
36                 panel1.Controls.Add(bt);//向面板中添加按钮
37             }
38             //时间线程部分
39             RunTime = new Thread(//使用一条线程 需要引用System.Threading空间
40                 new ThreadStart(Count));//使用委托执行方法部分
41             RunTime.IsBackground = true;//设置线程为后台线程(-与前台应用同时退出-)
42             RunTime.Start();//启动线程
43             rand_num = new Random().Next(1, 100);//设置随机数
44             button1.Enabled = false;//开始按钮为不可用状体
45                                     //避免多线程问题
46         }
47 
48         //Click事件的实现
49         void bt_click(object sender, EventArgs e)
50         {
51             
52             Button b = (Button)sender;//向下转型为Button类型
53             int num = int.Parse(b.Text.ToString());//获取按钮对应数字
54             if (num != rand_num)
55             {
56                 b.BackColor = Color.Red;
57                 if (num < rand_num)
58                     b.Text = "";
59                 else
60                     b.Text = ""; 
61             }
62             else {
63                 b.BackColor = Color.Green;
64                 MessageBox.Show("恭喜你!任务完成\n用时:"+i+"","恭喜:");
65                 RunTime.Abort();//停止线程
66                 button1.Enabled = true;//启用开始按钮
67                 i = 0;//计时器归0
68             }
69             
70         }
71         //计时方法
72         void Count() {
73             //int i = 0;
74             while (true)
75             {
76                 i = ++i > 1000000 ? 0 : i++;
77                 this.label2.Text = i.ToString()+"";
78                 Thread.Sleep(1000);
79             };
80         }
81         //清掉多余组件方法
82         void Clear_btn() { 
83             foreach(Button b in panel1.Controls){
84                 panel1.Controls.Clear();//清除面板按钮
85             }
86         }
87     }
88 }

经过多番调试,最终如下

1>开始界面

2>游戏运行

3>游戏结束