8.2.2 創(chuàng)建游戲窗體
將Form1重命名為MainForm,并對其屬性進(jìn)行更新,將Text屬性設(shè)置為GemDrops,將BackColor屬性設(shè)置為Black。
還要在窗體的頂端添加兩個(gè)標(biāo)簽,分別命名為lblScore和lblNextPiece。它們各自的Text屬性分別為“Score:0”及“Next piece:”。lblScore標(biāo)簽??吭诖绑w的頂部,所以它有足夠的空間來顯示玩家得分。lblNextPiece標(biāo)簽被固定在右上角,這樣當(dāng)屏幕的尺寸發(fā)生改變時(shí)(例如手機(jī)的方向發(fā)生改變),它還會(huì)保持在屏幕的右上角。將lblNextPiece標(biāo)簽的TextAlign屬性設(shè)置為TopRight。
對MainMenu控件進(jìn)行更新,添加一個(gè)Pause項(xiàng)和一個(gè)彈出菜單Menu項(xiàng)。彈出菜單中包含兩個(gè)菜單項(xiàng)NewGame和ExitGame,用于開始游戲和退出游戲。最初的窗體設(shè)計(jì)。
在窗體的代碼中,聲明一個(gè)CGemDropsGame對象作為類級(jí)別的變量,名為_game。在窗體的構(gòu)造函數(shù)中來對它進(jìn)行實(shí)例化和初始化,如程序清單8-1所示。
程序清單8-1 對GemDrops游戲?qū)ο筮M(jìn)行實(shí)例化和初始化
// Our instance of the GemDrops game
CGemDropsGame _game;
/// <summary>
/// Form constructor
/// </summary>
public MainForm()
{
InitializeComponent();
// Instantiate our game and set its game form to be this form
_game = new CGemDropsGame(this);
_game.Reset();
}
在該窗體中再添加一個(gè)名為SetScore的函數(shù)。它只是簡單地以一個(gè)int變量作為參數(shù),并將該值賦給lblScore標(biāo)簽的Text屬性。該函數(shù)用于顯示玩家每次得分后的分值
程序清單8-2 顯示玩家得分的函數(shù)
/// <summary>
/// Display the score on the screen
/// </summary>
/// <param name="score">The player's new score</param>
internal void SetScore(int score)
{
lblScore.Text = "Score: " + score.ToString();
}
我們接下來完成窗體的OnPaintBackground函數(shù)和它的Load、Paint以及Closing事件處理程序。這些函數(shù)與前面章節(jié)中相應(yīng)的函數(shù)幾乎是相同的。此外還要添加RenderLoop函數(shù),也與前面的示例相同。
將這些代碼編譯后,只能得到一個(gè)空的黑屏。接下來我們就開始開發(fā)游戲引擎。