武 岳
(河南工業(yè)貿易職業(yè)學院 河南 鄭州 451191)
在C#中,不僅可以開發(fā)一些簡單的控制臺應用程序,還可以開發(fā)WinForm窗體應用程序。WinForm提供了一系列非常豐富的控件,用來創(chuàng)建Windows窗體應用程序。每一個控件模型都相當于一個類,每個類都有很多屬性和事件來提供多種功能,通過繼承和擴展這些控件類來使Windows窗體界面變得豐富多彩。在這些控件中,我們利用常用的Label、Button、Timer和ProgressBar控件,來實現(xiàn)簡單的游戲倒計時功能。
Visual Studio是微軟公司推出的一種程序開發(fā)環(huán)境,也是目前最流行的支持C#、C++等多語言開發(fā)的平臺環(huán)境。本文所使用的Visual Studio 2010版本于2010年4月12日上市,重新設計和組織了其集成開發(fā)環(huán)境(IDE)的界面,變得更加簡單明了。Visual Studio 2010同時帶來了NET Framework 4.0、Microsoft Visual Studio 2010 CTP(Community Technology Preview--CTP),并且支持開發(fā)面向Windows 7的應用程序。它同時支持Microsoft SQL Server、IBM DB2和Oracle數(shù)據(jù)庫,可以來創(chuàng)建網(wǎng)絡服務,智能設備應用程序,Windows平臺下的網(wǎng)絡應用程序和Windows應用程序。
該程序是進入游戲之前的界面,主要實現(xiàn)在游戲加載過程中的倒計時功能。當用戶點擊“開始游戲”按鈕時,窗體上出現(xiàn)10秒鐘倒計時,并且進度條每秒鐘增加%10,當?shù)褂嫊r結束時,彈出“進入游戲?”的提示框,通過選擇消息對話框中的“是”和“否”按鈕來確定是否進入游戲。如果點擊“是”按鈕,則顯示另外一個窗體Game,即打開游戲。游戲部分的功能在本程序中不做實現(xiàn)。而游戲窗體關閉后則整個應用程序結束。如果點擊“否”按鈕,則整個應用程序結束。界面設計如圖1、2所示。
圖1 游戲倒計時界面
圖2 消息對話框界面
該程序需要使用三個Label控件來顯示提示信息和倒計時時間,一個Button控件來開始計時,倒計時使用Timer控件實現(xiàn),使用進度條ProgressBar來實現(xiàn)可視化的倒計時效果。
在VS2010開發(fā)環(huán)境下,選擇【文件】-【新建】-【項目】,選擇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組件的作用是周期性的執(zhí)行某個操作,其默認事件Tick用來執(zhí)行這些操作,而Tick事件的執(zhí)行周期,則由Interval屬性控制。將Timer組件的Interval屬性修改為1000,即每1000毫秒(1秒)觸發(fā)一次Tick事件。ProgressBar控件,又叫進度條控件。該控件最常用的三個屬性分別為:Value、Maximum和Minimum。Value屬性表示進度條的當前數(shù)值,取值為整數(shù);Minimum表示進度條的最小值,默認值為0;Maximum表示進度條的最大值,默認值為100。ProgressBar控件的屬性均采用默認值,不做修改。
在窗體的設計視圖下,鼠標雙擊ButtonStart按鈕,則自動生成該按鈕的Click事件,代碼如下:
private int time;
//私有字段time,用來表示倒計時的剩余時間。
private void buttonStart_Click(object sender,EventArgs e)
//單擊“開始游戲”按鈕所觸發(fā)的事件
{
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)
//當?shù)褂嫊r剩余時間為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方法有多種重載,其四個參數(shù)依次表示對話框顯示的文本、標題、按鈕和圖標。最后,判斷Show方法的返回值,如果為枚舉值Yes,則調用ShowDialog方法顯示游戲窗體Game,并在Game關閉后通過調用Application類的Exit方法結束應用程序。否則,直接結束應用程序。
[1]傳智播客高教產品研發(fā)部. C#程序設計基礎入門教程.人民郵電出版社.2014年6月.
[2]馬駿.C#網(wǎng)絡應用編程基礎.人民郵電出版社.2006年10月.
[3]馬駿,鄭逢斌,沈夏炯.C#網(wǎng)絡應用高級編程.人民郵電出版社,2006年10月.