8.2.2 創(chuàng)建游戲窗體
將Form1重命名為MainForm,并對其屬性進行更新,將Text屬性設(shè)置為GemDrops,將BackColor屬性設(shè)置為Black。
還要在窗體的頂端添加兩個標簽,分別命名為lblScore和lblNextPiece。它們各自的Text屬性分別為“Score:0”及“Next piece:”。lblScore標簽停靠在窗體的頂部,所以它有足夠的空間來顯示玩家得分。lblNextPiece標簽被固定在右上角,這樣當屏幕的尺寸發(fā)生改變時(例如手機的方向發(fā)生改變),它還會保持在屏幕的右上角。將lblNextPiece標簽的TextAlign屬性設(shè)置為TopRight。
對MainMenu控件進行更新,添加一個Pause項和一個彈出菜單Menu項。彈出菜單中包含兩個菜單項NewGame和ExitGame,用于開始游戲和退出游戲。最初的窗體設(shè)計。
在窗體的代碼中,聲明一個CGemDropsGame對象作為類級別的變量,名為_game。在窗體的構(gòu)造函數(shù)中來對它進行實例化和初始化,如程序清單8-1所示。
程序清單8-1 對GemDrops游戲?qū)ο筮M行實例化和初始化
// 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();
}
在該窗體中再添加一個名為SetScore的函數(shù)。它只是簡單地以一個int變量作為參數(shù),并將該值賦給lblScore標簽的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ù),也與前面的示例相同。
將這些代碼編譯后,只能得到一個空的黑屏。接下來我們就開始開發(fā)游戲引擎。