丶制作一个数字猜猜看小游戏
2011-10-17 23:31
471 查看
效果图 ----
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); //强行关闭窗体
}
}
}
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); //强行关闭窗体
}
}
}
相关文章推荐
- 使用CocosBuilder制作一个跳跃小游戏
- 用cocos2d 2.1制作一个过河小游戏(1): 总概
- 数字输入golang实现的一个小游戏–猜数字
- 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
- 使用vue编写一个点击数字计时小游戏
- 用cocos2d 2.1制作一个过河小游戏(3): 船与河岸Sprite设计
- js小游戏,猜一个1~99的数字(version2.in 2012.11.2)
- 制作一个小游戏 俄罗斯方块代码
- 开发一个数字华容道的小游戏
- 修改的一个Css + JS制作的数字时钟
- 用cocos2d 2.1制作一个过河小游戏(2): 牧师与魔鬼Sprite设计
- hacking 麦步手表之(4)制作一个大数字表盘xzy-big-number
- 制作一个数字钟表及时间选择器
- 一个简单的帮助文档制作工具 Treeview控件
- 从零开始制作一个个人网站(2017.12.8更新,未完成)
- 如何制作一个塔防游戏 Cocos2d-x 2.0.4
- 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号
- 排序含有数字的字符串:一个巧妙地方法
- c编程:输入一个数字n,则n代表n行,每行输入2个数字a,b计算每行的a+b问题。
- 制作一个简单的文本框输入的网页