武 岳
(河南工業(yè)貿(mào)易職業(yè)學(xué)院 河南 鄭州 451191)
在C#中,不僅可以開發(fā)一些簡單的控制臺(tái)應(yīng)用程序,還可以開發(fā)WinForm窗體應(yīng)用程序。WinForm提供了一系列非常豐富的控件,用來創(chuàng)建Windows窗體應(yīng)用程序。每一個(gè)控件模型都相當(dāng)于一個(gè)類,每個(gè)類都有很多屬性和事件來提供多種功能,通過繼承和擴(kuò)展這些控件類來使Windows窗體界面變得豐富多彩。在這些控件中,我們利用常用的Label、Button、Timer和ProgressBar控件,來實(shí)現(xiàn)簡單的游戲倒計(jì)時(shí)功能。
Visual Studio是微軟公司推出的一種程序開發(fā)環(huán)境,也是目前最流行的支持C#、C++等多語言開發(fā)的平臺(tái)環(huán)境。本文所使用的Visual Studio 2010版本于2010年4月12日上市,重新設(shè)計(jì)和組織了其集成開發(fā)環(huán)境(IDE)的界面,變得更加簡單明了。Visual Studio 2010同時(shí)帶來了NET Framework 4.0、Microsoft Visual Studio 2010 CTP(Community Technology Preview--CTP),并且支持開發(fā)面向Windows 7的應(yīng)用程序。它同時(shí)支持Microsoft SQL Server、IBM DB2和Oracle數(shù)據(jù)庫,可以來創(chuàng)建網(wǎng)絡(luò)服務(wù),智能設(shè)備應(yīng)用程序,Windows平臺(tái)下的網(wǎng)絡(luò)應(yīng)用程序和Windows應(yīng)用程序。
該程序是進(jìn)入游戲之前的界面,主要實(shí)現(xiàn)在游戲加載過程中的倒計(jì)時(shí)功能。當(dāng)用戶點(diǎn)擊“開始游戲”按鈕時(shí),窗體上出現(xiàn)10秒鐘倒計(jì)時(shí),并且進(jìn)度條每秒鐘增加%10,當(dāng)?shù)褂?jì)時(shí)結(jié)束時(shí),彈出“進(jìn)入游戲?”的提示框,通過選擇消息對(duì)話框中的“是”和“否”按鈕來確定是否進(jìn)入游戲。如果點(diǎn)擊“是”按鈕,則顯示另外一個(gè)窗體Game,即打開游戲。游戲部分的功能在本程序中不做實(shí)現(xiàn)。而游戲窗體關(guān)閉后則整個(gè)應(yīng)用程序結(jié)束。如果點(diǎn)擊“否”按鈕,則整個(gè)應(yīng)用程序結(jié)束。界面設(shè)計(jì)如圖1、2所示。
圖1 游戲倒計(jì)時(shí)界面
圖2 消息對(duì)話框界面
該程序需要使用三個(gè)Label控件來顯示提示信息和倒計(jì)時(shí)時(shí)間,一個(gè)Button控件來開始計(jì)時(shí),倒計(jì)時(shí)使用Timer控件實(shí)現(xiàn),使用進(jìn)度條ProgressBar來實(shí)現(xiàn)可視化的倒計(jì)時(shí)效果。
在VS2010開發(fā)環(huán)境下,選擇【文件】-【新建】-【項(xiàng)目】,選擇Visual C#下的Windows窗體應(yīng)用程序,命名為Time。更改默認(rèn)窗體Form1的Name屬性為“FormMain”、Text屬性為“倒計(jì)時(shí)”。在項(xiàng)目名上右鍵,選擇添加一個(gè)新的Windows窗體,窗體名為Game,用來表示游戲界面,該窗體不做設(shè)計(jì)。
從工具箱中分別拖放三個(gè)Label控件,一個(gè)Button控件、一個(gè)Timer組件和一個(gè)ProgressBar控件。分別設(shè)置三個(gè)Label的Name屬性為“Textlabel1”、“Textlabel2”和“Timelabel”,設(shè)置它們的Text屬性為“啟動(dòng)游戲倒計(jì)時(shí):”、“游戲加載中:”和“”空字符。設(shè)置“Timelabel”的Font屬性為“宋體, 15pt, style=Bold”。其中,“Textlabel1”和“Textlabel2”用來顯示提示信息,“Timelabel”用來顯示倒計(jì)時(shí)時(shí)間。設(shè)置Button的Name屬性為“buttonStart”、Text屬性為“開始游戲”。Timer組件的作用是周期性的執(zhí)行某個(gè)操作,其默認(rèn)事件Tick用來執(zhí)行這些操作,而Tick事件的執(zhí)行周期,則由Interval屬性控制。將Timer組件的Interval屬性修改為1000,即每1000毫秒(1秒)觸發(fā)一次Tick事件。ProgressBar控件,又叫進(jìn)度條控件。該控件最常用的三個(gè)屬性分別為:Value、Maximum和Minimum。Value屬性表示進(jìn)度條的當(dāng)前數(shù)值,取值為整數(shù);Minimum表示進(jìn)度條的最小值,默認(rèn)值為0;Maximum表示進(jìn)度條的最大值,默認(rèn)值為100。ProgressBar控件的屬性均采用默認(rèn)值,不做修改。
在窗體的設(shè)計(jì)視圖下,鼠標(biāo)雙擊ButtonStart按鈕,則自動(dòng)生成該按鈕的Click事件,代碼如下:
private int time;
//私有字段time,用來表示倒計(jì)時(shí)的剩余時(shí)間。
private void buttonStart_Click(object sender,EventArgs e)
//單擊“開始游戲”按鈕所觸發(fā)的事件
{
time = 9;
progressBar1.Value = 0;
timer1.Start();
}
定義一個(gè)int類型的字段time,用來表示倒計(jì)時(shí)的剩余時(shí)間。由于需要在多個(gè)事件中使用該值,所以定義成字段。在Click事件中,將time的初值定義為9,將進(jìn)度條的初始值定義為0,然后調(diào)用Start方法啟動(dòng)Timer控件,開始進(jìn)入周期計(jì)時(shí)。
在窗體的設(shè)計(jì)視圖下,鼠標(biāo)雙擊Timer1控件,則自動(dòng)生成它的Tick事件,代碼如下:
private void timer1_Tick(object sender,EventArgs e)
{
if (time!=10)
{
progressBar1.Value += (int)(progressBar1.Maximum*0.1);
//每一個(gè)Interval周期里,進(jìn)度條增加進(jìn)度條最大值的百分之十。
}
Timelabel.Text = time.ToString();
if (time==0)
//當(dāng)?shù)褂?jì)時(shí)剩余時(shí)間為0時(shí),停止計(jì)時(shí),即Timer控
件停止使用
{
timer1.Stop();
DialogResult r=MessageBox.Show("進(jìn)入游戲?",
"開 始",M e s s a g e B o x B u t t o n s.YesNo,MessageBoxIcon.Question);
//用消息對(duì)話框給出相應(yīng)提示
if (r==DialogResult. Yes)
{Game g = new Game();g.ShowDialog();
Application.Exit();
}
else
{
Application.Exit();
}
}
time--;
//每一次Tick事件結(jié)束,將倒計(jì)時(shí)剩余時(shí)間減一。
}
在Tick事件中,首先通過if語句判斷剩余時(shí)間是否為10,如果不為10,則每個(gè)Interval周期里,進(jìn)度條增加百分之十。將當(dāng)前time的值轉(zhuǎn)換為字符串類型后,賦值給Timelabel.Text,通過Timelabel顯示剩余的時(shí)間。當(dāng)剩余時(shí)間為0時(shí),停止計(jì)時(shí),即Timer控件停止使用,通過timer1的Stop方法將控件停用。通過調(diào)用MessageBox類的Show方法,彈出消息對(duì)話框提示,界面如圖2所示。Show方法的返回值是DialogResult枚舉值之一。枚舉值有:OK、Cancel、Yes、No和None。通過枚舉值的判斷可以確定在對(duì)話框中單擊了哪個(gè)按鈕。Show方法有多種重載,其四個(gè)參數(shù)依次表示對(duì)話框顯示的文本、標(biāo)題、按鈕和圖標(biāo)。最后,判斷Show方法的返回值,如果為枚舉值Yes,則調(diào)用ShowDialog方法顯示游戲窗體Game,并在Game關(guān)閉后通過調(diào)用Application類的Exit方法結(jié)束應(yīng)用程序。否則,直接結(jié)束應(yīng)用程序。
[1]傳智播客高教產(chǎn)品研發(fā)部. C#程序設(shè)計(jì)基礎(chǔ)入門教程.人民郵電出版社.2014年6月.
[2]馬駿.C#網(wǎng)絡(luò)應(yīng)用編程基礎(chǔ).人民郵電出版社.2006年10月.
[3]馬駿,鄭逢斌,沈夏炯.C#網(wǎng)絡(luò)應(yīng)用高級(jí)編程.人民郵電出版社,2006年10月.