基于C#的游戏倒计时功能的实现
2018-07-05武岳
武 岳
(河南工业贸易职业学院 河南 郑州 451191)
1 引言
在C#中,不仅可以开发一些简单的控制台应用程序,还可以开发WinForm窗体应用程序。WinForm提供了一系列非常丰富的控件,用来创建Windows窗体应用程序。每一个控件模型都相当于一个类,每个类都有很多属性和事件来提供多种功能,通过继承和扩展这些控件类来使Windows窗体界面变得丰富多彩。在这些控件中,我们利用常用的Label、Button、Timer和ProgressBar控件,来实现简单的游戏倒计时功能。
2 Microsoft Visual Studio 2010开发环境介绍
Visual Studio是微软公司推出的一种程序开发环境,也是目前最流行的支持C#、C++等多语言开发的平台环境。本文所使用的Visual Studio 2010版本于2010年4月12日上市,重新设计和组织了其集成开发环境(IDE)的界面,变得更加简单明了。Visual Studio 2010同时带来了NET Framework 4.0、Microsoft Visual Studio 2010 CTP(Community Technology Preview--CTP),并且支持开发面向Windows 7的应用程序。它同时支持Microsoft SQL Server、IBM DB2和Oracle数据库,可以来创建网络服务,智能设备应用程序,Windows平台下的网络应用程序和Windows应用程序。
3 需求分析
该程序是进入游戏之前的界面,主要实现在游戏加载过程中的倒计时功能。当用户点击“开始游戏”按钮时,窗体上出现10秒钟倒计时,并且进度条每秒钟增加%10,当倒计时结束时,弹出“进入游戏?”的提示框,通过选择消息对话框中的“是”和“否”按钮来确定是否进入游戏。如果点击“是”按钮,则显示另外一个窗体Game,即打开游戏。游戏部分的功能在本程序中不做实现。而游戏窗体关闭后则整个应用程序结束。如果点击“否”按钮,则整个应用程序结束。界面设计如图1、2所示。
图1 游戏倒计时界面
图2 消息对话框界面
4 功能实现
该程序需要使用三个Label控件来显示提示信息和倒计时时间,一个Button控件来开始计时,倒计时使用Timer控件实现,使用进度条ProgressBar来实现可视化的倒计时效果。
4.1 界面设计
在VS2010开发环境下,选择【文件】-【新建】-【项目】,选择Visual C#下的Windows窗体应用程序,命名为Time。更改默认窗体Form1的Name属性为“FormMain”、Text属性为“倒计时”。在项目名上右键,选择添加一个新的Windows窗体,窗体名为Game,用来表示游戏界面,该窗体不做设计。
从工具箱中分别拖放三个Label控件,一个Button控件、一个Timer组件和一个ProgressBar控件。分别设置三个Label的Name属性为“Textlabel1”、“Textlabel2”和“Timelabel”,设置它们的Text属性为“启动游戏倒计时:”、“游戏加载中:”和“”空字符。设置“Timelabel”的Font属性为“宋体, 15pt, style=Bold”。其中,“Textlabel1”和“Textlabel2”用来显示提示信息,“Timelabel”用来显示倒计时时间。设置Button的Name属性为“buttonStart”、Text属性为“开始游戏”。Timer组件的作用是周期性的执行某个操作,其默认事件Tick用来执行这些操作,而Tick事件的执行周期,则由Interval属性控制。将Timer组件的Interval属性修改为1000,即每1000毫秒(1秒)触发一次Tick事件。ProgressBar控件,又叫进度条控件。该控件最常用的三个属性分别为:Value、Maximum和Minimum。Value属性表示进度条的当前数值,取值为整数;Minimum表示进度条的最小值,默认值为0;Maximum表示进度条的最大值,默认值为100。ProgressBar控件的属性均采用默认值,不做修改。
4.2 代码实现
在窗体的设计视图下,鼠标双击ButtonStart按钮,则自动生成该按钮的Click事件,代码如下:
private int time;
//私有字段time,用来表示倒计时的剩余时间。
private void buttonStart_Click(object sender,EventArgs e)
//单击“开始游戏”按钮所触发的事件
{
time = 9;
progressBar1.Value = 0;
timer1.Start();
}
定义一个int类型的字段time,用来表示倒计时的剩余时间。由于需要在多个事件中使用该值,所以定义成字段。在Click事件中,将time的初值定义为9,将进度条的初始值定义为0,然后调用Start方法启动Timer控件,开始进入周期计时。
在窗体的设计视图下,鼠标双击Timer1控件,则自动生成它的Tick事件,代码如下:
private void timer1_Tick(object sender,EventArgs e)
{
if (time!=10)
{
progressBar1.Value += (int)(progressBar1.Maximum*0.1);
//每一个Interval周期里,进度条增加进度条最大值的百分之十。
}
Timelabel.Text = time.ToString();
if (time==0)
//当倒计时剩余时间为0时,停止计时,即Timer控
件停止使用
{
timer1.Stop();
DialogResult r=MessageBox.Show("进入游戏?",
"开 始",M e s s a g e B o x B u t t o n s.YesNo,MessageBoxIcon.Question);
//用消息对话框给出相应提示
if (r==DialogResult. Yes)
{Game g = new Game();g.ShowDialog();
Application.Exit();
}
else
{
Application.Exit();
}
}
time--;
//每一次Tick事件结束,将倒计时剩余时间减一。
}
在Tick事件中,首先通过if语句判断剩余时间是否为10,如果不为10,则每个Interval周期里,进度条增加百分之十。将当前time的值转换为字符串类型后,赋值给Timelabel.Text,通过Timelabel显示剩余的时间。当剩余时间为0时,停止计时,即Timer控件停止使用,通过timer1的Stop方法将控件停用。通过调用MessageBox类的Show方法,弹出消息对话框提示,界面如图2所示。Show方法的返回值是DialogResult枚举值之一。枚举值有:OK、Cancel、Yes、No和None。通过枚举值的判断可以确定在对话框中单击了哪个按钮。Show方法有多种重载,其四个参数依次表示对话框显示的文本、标题、按钮和图标。最后,判断Show方法的返回值,如果为枚举值Yes,则调用ShowDialog方法显示游戏窗体Game,并在Game关闭后通过调用Application类的Exit方法结束应用程序。否则,直接结束应用程序。
[1]传智播客高教产品研发部. C#程序设计基础入门教程.人民邮电出版社.2014年6月.
[2]马骏.C#网络应用编程基础.人民邮电出版社.2006年10月.
[3]马骏,郑逢斌,沈夏炯.C#网络应用高级编程.人民邮电出版社,2006年10月.