一:上图
二:相关代码
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;namespace gessNumGame
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
System.Threading.Thread G_thread;//定义线程
Random G_random = new Random();//定义随机数对象int G_int_num;//定义变量用于存放存机数
private void btn_start_Click(object sender, EventArgs e)
{
RemoveControl();//清理上一局
btn_start.Enabled = false;//停用开始按钮
int p_int_x=10;//第一个按钮横坐标
int p_int_y=60;//第一个按钮纵坐标
for (int i = 0; i < 100; i++)//生成100个按钮
{
Button btn = new Button();//生成一个按钮
btn.Name = (i + 1).ToString();//设定名字
btn.Text = (i + 1).ToString();//设定文本显示
btn.Width = 35;//按钮宽度
btn.Height = 35;//按钮高度
btn.Location = new Point(p_int_x, p_int_y);//按钮位置
btn.Click += new EventHandler(bt_Click);//定义button按钮的事件p_int_x += 36;//下一个按钮横坐标
if ((i+1) % 10 == 0)//下一行
{
p_int_x = 10;//下一行第一个按钮横坐标
p_int_y += 36;//下一行第一个按钮纵坐标
}
Controls.Add(btn);//将button按钮放入窗体控件集合中G_thread = new System.Threading.Thread
(//新建一个计时和产生随机数的线程
delegate()//使用匿名方法将代码块传递为委托参数
{
int P_int_count = 0;//初始化计数器
while (true)//开始无限循环
{
P_int_count = //计数器累加
++P_int_count > 100000000 ? 0 : P_int_count;//设置最大数值
this.Invoke(//将代码交给主线程执行
(MethodInvoker)delegate//使用匿名方法
{
lbl_time.Text = //窗体中显示计数
P_int_count.ToString();
});
System.Threading.Thread.Sleep(1000);//线程睡眠1秒
}
}
);
G_thread.IsBackground = true;//设置线程为后台线程
G_thread.Start();//开始执行线程
G_int_num = G_random.Next(1, 100);//生成随机数
}
}
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_thread.Abort();//终止计数线程
MessageBox.Show(string.Format(//显示游戏信息
"恭喜你猜对了!共猜了{0}次 用时{1}秒",
GetCount(), lbl_time.Text), "恭喜!");
btn_start.Enabled = true;//启用开始按钮
}
}
/// <summary>
/// 用于查找窗体中Enable属性为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();//返回计数器信息
}
/// <summary>
/// 用于清空窗体中动态生成的按钮
/// </summary>
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);//强行关闭窗体,应用程序即强制退出。
}
}
}
三:程序下载
加载如下地址即可下载:
http://files.cnblogs.com/hongmaju/NumGame.zip