VB2010入門(mén)教程4:創(chuàng)建匹配游戲_第1頁(yè)
VB2010入門(mén)教程4:創(chuàng)建匹配游戲_第2頁(yè)
VB2010入門(mén)教程4:創(chuàng)建匹配游戲_第3頁(yè)
VB2010入門(mén)教程4:創(chuàng)建匹配游戲_第4頁(yè)
VB2010入門(mén)教程4:創(chuàng)建匹配游戲_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、教程 4:創(chuàng)建匹配游戲Visual Studio 2010在本教程中,將生成一個(gè)匹配游戲,在該游戲中,玩家必須匹配隱藏的圖標(biāo)對(duì)。 您將學(xué)習(xí)如何:· 使用 List 對(duì)象來(lái)包含對(duì)象。· 使用 foreach 循環(huán)(Visual C# 中)或 For Each 循環(huán)(Visual Basic 中)。· 使用引用變量跟蹤窗體的狀態(tài)。· 生成可用于多個(gè)對(duì)象的事件處理程序。· 使計(jì)時(shí)器啟動(dòng)時(shí)正好激發(fā)一次。當(dāng)您完成時(shí),程序?qū)㈩?lèi)似下圖所示。在本教程中創(chuàng)建的游戲 說(shuō)明在本教程中,同

2、時(shí)涉及 Visual C# 和 Visual Basic,因此請(qǐng)關(guān)注特定于您使用的編程語(yǔ)言的信息。相關(guān)主題標(biāo)題說(shuō)明步驟 1:創(chuàng)建項(xiàng)目并向窗體添加表通過(guò)創(chuàng)建項(xiàng)目并添加 TableLayoutPanel 控件開(kāi)始操作。步驟 2:添加隨機(jī)對(duì)象和圖標(biāo)列表添加 Random 對(duì)象和 List 對(duì)象,以創(chuàng)建圖標(biāo)列表。步驟 3:向每個(gè)標(biāo)簽分配一個(gè)隨機(jī)圖標(biāo)向 Label 控件隨機(jī)分配圖標(biāo)。步驟 4:向每個(gè)標(biāo)簽添加一個(gè) Click 事件處理程序添加一個(gè) Click 事件處理程序,該處理程序更改被單擊的標(biāo)簽的顏色。步驟 5:添加標(biāo)簽引

3、用添加引用變量以跟蹤哪些標(biāo)簽被單擊。步驟 6:添加計(jì)時(shí)器向窗體添加計(jì)時(shí)器。步驟 7:保持對(duì)可見(jiàn)保持圖標(biāo)對(duì)可見(jiàn)(如果選擇了匹配的對(duì))。步驟 8:添加方法以驗(yàn)證玩家是否獲勝添加 CheckForWinner() 方法以驗(yàn)證玩家是否獲勝。步驟 9:嘗試其他功能?chē)L試其他功能,例如更改圖標(biāo)和顏色、添加網(wǎng)格以及添加聲音。 嘗試使圖板變大并調(diào)整計(jì)時(shí)器。© 2016 Microsoft步驟 1:創(chuàng)建項(xiàng)目并向窗體添加表Visual Studio 2010創(chuàng)建匹配游戲的第一步是創(chuàng)建項(xiàng)目并向窗體添加表。創(chuàng)建項(xiàng)目并向窗體添加表1. 在“文件”菜單上,單擊“新建項(xiàng)目”。2. 如果

4、沒(méi)有使用 Visual Studio 學(xué)習(xí)版,您需要先選擇一種語(yǔ)言。 從“安裝的模板”列表中選擇“C#”或“Visual Basic”。3. 單擊“Windows 窗體應(yīng)用程序”圖標(biāo),然后鍵入“匹配游戲”作為名稱(chēng)。4. 設(shè)置窗體屬性:a. 將窗體的“Text”屬性更改為“匹配游戲”。b. 通過(guò)使用“Size”屬性將大小更改為 550 像素寬、550 像素高,或者拖動(dòng)直到您在集成開(kāi)發(fā)環(huán)境 (IDE) 的左下角看到合適的大小。5. 將 TableLayoutPanel 控件從工具箱中拖出,然后設(shè)置其屬性:a. 將“BackColor”屬性設(shè)置為“CornflowerB

5、lue”。 (在顏色選取器中選擇“Web”選項(xiàng)卡可以查看顏色名稱(chēng)。)b. 通過(guò)單擊屬性旁邊的下拉按鈕并單擊大的中間按鈕,將“Dock”屬性設(shè)置為“Fill”。c. 單擊 TableLayoutPanel 右上角的三角形按鈕,以顯示任務(wù)菜單。d. 單擊“添加行”兩次以多添加兩行,然后單擊“添加列”兩次以再添加兩列。e. 單擊“編輯行和列”打開(kāi)“列和行樣式”窗口。 選擇每一列,單擊“百分比”按鈕并將每個(gè)列的寬度設(shè)置為總寬度的 25%。 然后從窗口頂部的下拉框選擇“行”,并將每個(gè)行的高度設(shè)置為 25%。 單擊“確定”按鈕。TableLayoutPanel 現(xiàn)在

6、應(yīng)該有十六個(gè)相等大小的方塊單元格。6. 確保在窗體編輯器中選擇了該 TableLayoutPanel。 選中后,打開(kāi)工具箱,然后雙擊“Label”以將 Label 控件添加到左上方的方塊中。 現(xiàn)在,Label 控件在 IDE 中應(yīng)處于選中狀態(tài)。 設(shè)置其屬性:a. 將“BackColor”屬性設(shè)置為“CornflowerBlue”。b. 將“AutoSize”屬性設(shè)置為“False”。c. 將“Dock”屬性設(shè)置為“Fill”。d. 通過(guò)單擊“TextAlign”屬性旁的下拉按鈕并單擊中間的按鈕,將該屬性設(shè)置為“MiddleCenter

7、”。e. 單擊“Font”屬性。 應(yīng)顯示一個(gè)省略號(hào)按鈕。f. 單擊該省略號(hào)按鈕,并將字體設(shè)置為“Webdings 72 point Bold”。g. 將“Text”屬性設(shè)置為字母“c”。TableLayoutPanel 中的左上角單元格現(xiàn)在應(yīng)包含一個(gè)在藍(lán)色背景上居中的大黑色框。 說(shuō)明Webdings 字體是 Microsoft Windows 操作系統(tǒng)附帶的圖標(biāo)字體。 在匹配游戲中,玩家需要匹配圖標(biāo)對(duì),因此您使用此字體顯示要匹配的圖標(biāo)。 不要在“Text”屬性中輸入“c”,請(qǐng)嘗試輸入其他字母以查看顯示哪些圖標(biāo)。 感嘆號(hào)是一個(gè)蜘蛛,大寫(xiě) N 是一

8、個(gè)眼球,而逗號(hào)是一個(gè)辣椒。7. 選擇 Label 控件并進(jìn)行復(fù)制。 (按 Ctrl+C,或從“編輯”菜單中單擊“復(fù)制”。)然后粘貼。 (按 Ctrl+V,或從“編輯”菜單中單擊“粘貼”。)在 TableLayoutPanel 中的第二個(gè)單元格中出現(xiàn)另一個(gè)標(biāo)簽。 再次粘貼它,在第三個(gè)單元格中會(huì)出現(xiàn)另一個(gè)標(biāo)簽。 一直粘貼 Label 控件,直到填充完所有單元格。 說(shuō)明如果粘貼次數(shù)太多,IDE 會(huì)將一個(gè)新行添加到該 TableLayoutPanel,以便具有可添加新 Label 控件的位置。

9、 您可以撤消此操作。 若要移除新單元格,請(qǐng)按 Ctrl+Z 或在“編輯”菜單上單擊“撤消”。8. 現(xiàn)在,窗體布局已設(shè)置完畢。 其外觀類(lèi)似于下圖。9. 初始匹配游戲窗體10. 繼續(xù)或查看· 若要轉(zhuǎn)到下一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 2:添加隨機(jī)對(duì)象和圖標(biāo)列表。· 若要返回概述主題,請(qǐng)參見(jiàn)教程 4:創(chuàng)建匹配游戲。© 2016 Microsoft步驟 2:添加隨機(jī)對(duì)象和圖標(biāo)列表Visual Studio 2010您需要使用兩個(gè) new 語(yǔ)句創(chuàng)建兩個(gè)對(duì)象并將它們添加到您的窗體。 第一個(gè)是 Random

10、0;對(duì)象,類(lèi)似于數(shù)學(xué)測(cè)驗(yàn)游戲中使用的對(duì)象。 第二個(gè)是一個(gè)新對(duì)象:List 對(duì)象。添加隨機(jī)對(duì)象和圖標(biāo)列表1. 在添加以下代碼以創(chuàng)建列表之前,請(qǐng)考慮它的運(yùn)行方式。C#public partial class Form1 : Form / Use this Random object to choose random icons for the squares Random random = new Random(); / Each of these letters is an interesting icon / in the Webdings font, / and each

11、 icon appears twice in this list List<string> icons = new List<string>() "!", "!", "N", "N", ",", ",", "k", "k", "b", "b", "v", "v", "w", "w", "

12、;z", "z" ;2. 通過(guò)右擊“解決方案資源管理器”中的“Form1.cs”,然后從菜單中單擊“查看代碼”,轉(zhuǎn)到代碼編輯器。 開(kāi)始鍵入上一步中所示的代碼。 如果編寫(xiě) Visual C# 代碼,請(qǐng)確保將代碼放在左大括號(hào)后面,緊靠類(lèi)聲明 (public partial class Form1 : Form) 之后。 如果編寫(xiě) Visual Basic 代碼,請(qǐng)將代碼放在緊靠類(lèi)聲明 (Public Class Form1) 之后。3. 添加 List 對(duì)象時(shí),請(qǐng)仔細(xì)查看打開(kāi)的“IntelliSense”窗口。

13、0;下面是一個(gè) Visual C# 示例。 (如果在 Visual Basic 中添加列表,會(huì)顯示類(lèi)似文本。)“IntelliSense”窗口 說(shuō)明如果您分小段查看代碼,則理解會(huì)顯得更簡(jiǎn)單。 程序可以使用 List 對(duì)象跟蹤多個(gè)項(xiàng)目。 列表可以包含數(shù)字、true/false 值、文本或其他對(duì)象。 您甚至可以有一個(gè)包含其他 List 對(duì)象的 List 對(duì)象。 列表中的項(xiàng)目稱(chēng)為“元素”,每個(gè)列表只包含一種元素。 所以數(shù)字列表只包含數(shù)字 - 您不能向其中添加文本。

14、0;同樣,您也不能向 true/false 值列表添加數(shù)字。 說(shuō)明當(dāng)使用 new 語(yǔ)句創(chuàng)建 List 對(duì)象時(shí),需要指示您希望在其中存放的內(nèi)容。 這就是“IntelliSense”窗口頂部工具提示顯示列表中的元素類(lèi)型的原因。 同樣,這也是 List<string>(Visual C# 中)和 List(Of String)(Visual Basic 中)的含義:它是一個(gè)包含字符串的 List 對(duì)象。 程序使用字符串來(lái)存儲(chǔ)文本,該文本是“IntelliSense”窗口

15、右側(cè)的工具提示將告訴您的文本。4. 請(qǐng)考慮為什么在 Visual Basic 中必須首先創(chuàng)建臨時(shí)數(shù)組,但在 Visual C# 中可以使用一條語(yǔ)句創(chuàng)建列表。 這是因?yàn)?Visual C# 語(yǔ)言具有“集合初始值設(shè)定項(xiàng)”。 在 Visual Basic 2010 中,可以使用集合初始值設(shè)定項(xiàng)。 但是,為了與以前版本的 Visual Basic 兼容,我們建議您使用上面的代碼。 說(shuō)明當(dāng)您將集合初始值設(shè)定項(xiàng)與 new 語(yǔ)句一同使用時(shí),在創(chuàng)建新的 List 對(duì)象后,程序?qū)⑹褂么罄ㄌ?hào)內(nèi)的任何內(nèi)容填充它。 在本例中,您

16、獲取名為“圖標(biāo)”的字符串列表,該列表將初始化以包含十六個(gè)字符串。 其中每個(gè)字符串都是單個(gè)字母,它們都對(duì)應(yīng)于將在標(biāo)簽中出現(xiàn)的圖標(biāo)。 因此,游戲?qū)⒕哂幸粚?duì)感嘆號(hào)、一對(duì)大寫(xiě)的 N 字母、一對(duì)逗號(hào)等。 List 對(duì)象將包含全部十六個(gè)字符串,每個(gè)對(duì)應(yīng)于 TableLayoutPanel 中的一個(gè)單元格。 說(shuō)明在 Visual Basic 中,可以獲得相同的結(jié)果,但是字符串首先放入臨時(shí)數(shù)組中,該數(shù)組然后轉(zhuǎn)換為 List 對(duì)象。 數(shù)組類(lèi)似于列表,但也有不同之處,例如數(shù)組在創(chuàng)建時(shí)具有固定大小。 列表可以根據(jù)需要收縮或增長(zhǎng)

17、,這在此程序中非常重要。繼續(xù)或查看· 若要轉(zhuǎn)到下一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 3:向每個(gè)標(biāo)簽分配一個(gè)隨機(jī)圖標(biāo)。· 若要返回上一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 1:創(chuàng)建項(xiàng)目并向窗體添加表。© 2016 Microsoft步驟 3:向每個(gè)標(biāo)簽分配一個(gè)隨機(jī)圖標(biāo)Visual Studio 2010如果游戲始終將同一圖標(biāo)隱藏在相同的位置,這就沒(méi)有挑戰(zhàn)性了。 您需要向窗體中的 Label 控件隨機(jī)分配圖標(biāo)。 為此,需要添加 AssignIconsToSquares() 方法。向每個(gè)標(biāo)簽分配一個(gè)隨機(jī)圖標(biāo)1. 在添加以下代碼之前,請(qǐng)

18、考慮該方法的工作原理。 有一個(gè)新的關(guān)鍵字:foreach(Visual C# 中)或 For Each(Visual Basic 中)。 (其中有一行被故意注釋掉,本過(guò)程的結(jié)尾對(duì)此進(jìn)行了解釋?zhuān)#/ <summary>/ Assign each icon from the list of icons to a random square/ </summary>private void AssignIconsToSquares() / The TableLayoutPanel has 16 labels, / and the icon li

19、st has 16 icons, / so an icon is pulled at random from the list / and added to each label foreach (Control control in tableLayoutPanel1.Controls) Label iconLabel = control as Label; if (iconLabel != null) int randomNumber = random.Next(icons.Count); iconLabel.Text = iconsrandomNumber; / iconLabel.Fo

20、reColor = iconLabel.BackColor; icons.RemoveAt(randomNumber); 2. 按上一步驟所示,添加 AssignIconsToSquares() 方法。 可以將它放在緊靠步驟 2:添加隨機(jī)對(duì)象和圖標(biāo)列表中添加的代碼的下方。在 AssignIconsToSquares() 方法中有一個(gè)新增功能:foreach 循環(huán)(在 Visual C# 中)或 For Each(在 Visual Basic 中)。 無(wú)論何時(shí)想要重復(fù)執(zhí)行相同操作,您都可以使用 foreac

21、h 循環(huán)。 在本例中,您要對(duì) TableLayoutPanel 中的每個(gè)標(biāo)簽執(zhí)行相同的語(yǔ)句,下面的代碼對(duì)此進(jìn)行了解釋。C#foreach (Control control in tableLayoutPanel1.Controls) / The statements you want to execute / for each label go here / The statements use iconLabel to access / each label's properties and methods 說(shuō)明其中使用了名稱(chēng) iconLabel 和控件

22、,因?yàn)樗鼈兙哂忻枋鲂浴?#160;您可以將這些名稱(chēng)替換為任何名稱(chēng),其作用完全相同(只要您更改了大括號(hào)內(nèi)每個(gè)語(yǔ)句中的名稱(chēng))。AssignIconsToSquares() 方法遍歷 TableLayoutPanel 中的每個(gè) Label 控件,并對(duì)每個(gè)控件執(zhí)行相同的語(yǔ)句。 這些語(yǔ)句從您在步驟 2:添加隨機(jī)對(duì)象和圖標(biāo)列表中添加的列表提取隨機(jī)圖標(biāo)。 (這就是該列表中每個(gè)圖標(biāo)都有兩個(gè)的原因,因此將向隨機(jī) Label 控件分配一對(duì)圖標(biāo)。)3. 一旦程序啟動(dòng),您就需要調(diào)用 AssignIconsToSquares() 

23、方法。 如果編寫(xiě) Visual C# 代碼,則在 Form1 構(gòu)造函數(shù)中緊靠對(duì) InitializeComponent() 方法的調(diào)用下方添加一條語(yǔ)句,這樣窗體便可以調(diào)用新方法以在顯示之前對(duì)自身進(jìn)行設(shè)置。C#public Form1() InitializeComponent(); AssignIconsToSquares();對(duì)于 Visual Basic,首先添加該構(gòu)造函數(shù),然后添加對(duì)該構(gòu)造函數(shù)的方法調(diào)用。 在剛創(chuàng)建的 AssignIconsToSquares() 方法之前,首先請(qǐng)鍵入代碼 Publi

24、c Sub New()。 當(dāng)您按 Enter 鍵移動(dòng)到下一行時(shí),IntelliSense 應(yīng)顯示下面的代碼來(lái)完成該構(gòu)造函數(shù)。VBPublic Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() callEnd Sub添加 AssignIconsToSquares() 方法調(diào)用以使構(gòu)造函數(shù)如下所示。VBPublic Sub New

25、() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call AssignIconsToSquares()End Sub4. 保存并運(yùn)行程序。 它應(yīng)該顯示一個(gè)窗體,其中每個(gè)標(biāo)簽都分配了隨機(jī)圖標(biāo)。5. 關(guān)閉程序,然后重新運(yùn)行。 現(xiàn)在每個(gè)標(biāo)簽都分配了不同的圖標(biāo),如下圖所示。具有隨機(jī)圖標(biāo)的匹配游戲6. 現(xiàn)在停止該程序,并在 foreach 

26、;循環(huán)中取消注釋該代碼行。C#iconLabel.ForeColor = iconLabel.BackColor;7. 單擊“全部保存”工具欄按鈕保存您的程序,然后運(yùn)行該程序。 圖標(biāo)看起來(lái)消失了 - 只顯示藍(lán)色背景。 但是,圖標(biāo)是隨機(jī)分配的,仍然存在。 因?yàn)閳D標(biāo)與背景顏色相同,所以它們不可見(jiàn)。繼續(xù)或查看· 若要轉(zhuǎn)到下一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 4:向每個(gè)標(biāo)簽添加一個(gè) Click 事件處理程序。· 若要返回上一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 2:添加隨機(jī)對(duì)象和圖標(biāo)列表。© 2016 Microsoft步驟 4:向每個(gè)標(biāo)簽添加一個(gè) Click 事件

27、處理程序Visual Studio 2010匹配游戲的運(yùn)行原理如下所示:1. 當(dāng)玩家單擊其中一個(gè)帶有隱藏圖標(biāo)的方塊時(shí),程序通過(guò)將圖標(biāo)顏色更改為黑色來(lái)向玩家顯示該圖標(biāo)。2. 然后玩家單擊另一個(gè)隱藏的圖標(biāo)。3. 如果圖標(biāo)互相匹配,則它們保持可見(jiàn)。 如果不匹配,則兩個(gè)圖標(biāo)都會(huì)再次隱藏。為了使程序按此方式運(yùn)行,您需要添加一個(gè) Click 事件處理程序以更改所單擊的標(biāo)簽的顏色。向每個(gè)標(biāo)簽添加一個(gè) Click 事件處理程序1. 轉(zhuǎn)到 Windows 窗體設(shè)計(jì)器,然后單擊第一個(gè) Label 控件以將其選中。 然后,在單擊其他每個(gè)標(biāo)簽時(shí)按住 Ctrl 鍵,以將它們選中。

28、 確保選中每個(gè)標(biāo)簽。2. 然后,轉(zhuǎn)到“屬性”窗口中的“事件”頁(yè)。 向下滾動(dòng)到 Click 事件,在框中鍵入“l(fā)abel_Click”,如下圖所示。顯示 Click 事件的“屬性”窗口3. 按 Enter。 IDE 將稱(chēng)為 label_Click() 的 Click 事件處理程序添加到代碼中,并將其掛鉤到每個(gè)標(biāo)簽。4. 填寫(xiě)其余代碼,如下所示:C#/ <summary>/ Every label's Click event is handled by this event handler/ </summary>/

29、<param name="sender">The label that was clicked</param>/ <param name="e"></param>private void label_Click(object sender, EventArgs e) Label clickedLabel = sender as Label; if (clickedLabel != null) / If the clicked label is black, the player clicked / an i

30、con that's already been revealed - / ignore the click if (clickedLabel.ForeColor = Color.Black) return; clickedLabel.ForeColor = Color.Black;  說(shuō)明您可以從“創(chuàng)建數(shù)學(xué)測(cè)驗(yàn)”教程識(shí)別事件處理程序頂部的 object sender。 您將不同的 Label 控件 Click 事件與單個(gè)事件處理程序方法掛鉤,因此無(wú)論用戶(hù)單擊哪個(gè)標(biāo)簽,都調(diào)用同一方法。 該方法需要知道單擊了哪個(gè)標(biāo)簽,因此它使用該

31、 Label 控件的名稱(chēng)“發(fā)送方”。 該方法的第一行告訴程序,它并不只是一個(gè)對(duì)象,而是專(zhuān)門(mén)的 Label 控件,它使用名稱(chēng)“clickedLabel”訪問(wèn)其屬性和方法。該方法首先檢查是否已將“clickedLabel”成功從對(duì)象轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)為 Label 控件。 如果不成功,它具有一個(gè) null 值 (C#) 或 Nothing 值 (Visual Basic),您不需要執(zhí)行該方法中的其余代碼。 接下來(lái),該方法使用“ForeColor”屬性檢查被單擊的標(biāo)簽的文本顏色。 如果已經(jīng)為黑色,則該圖標(biāo)已被單擊,因此該方

32、法完成。 (這就是返回語(yǔ)句的作用:它告訴程序停止執(zhí)行該方法。)如果該圖標(biāo)尚未被單擊,它會(huì)將其文本顏色更改為黑色。5. 保存并運(yùn)行程序。 您應(yīng)該看到一個(gè)背景為藍(lán)色的空窗體。 在窗體中單擊,其中一個(gè)圖標(biāo)應(yīng)變?yōu)榭梢?jiàn)。 繼續(xù)在窗體中的不同位置單擊。 當(dāng)單擊圖標(biāo)時(shí),它們應(yīng)顯示。繼續(xù)或查看· 若要轉(zhuǎn)到下一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 5:添加標(biāo)簽引用。· 若要返回上一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 3:向每個(gè)標(biāo)簽分配一個(gè)隨機(jī)圖標(biāo)。© 2016 Microsoft步驟 5:添加標(biāo)簽引用Visual Studio 2010程序需要跟蹤玩家單擊了

33、哪些 Label 控件。 在第一個(gè)標(biāo)簽被單擊后,程序顯示該標(biāo)簽的圖標(biāo)。 在第二個(gè)標(biāo)簽被單擊后,程序需要同時(shí)顯示兩個(gè)圖標(biāo)很短的時(shí)間,然后再次使這兩個(gè)圖標(biāo)不可見(jiàn)。 程序?qū)⑹褂靡米兞扛櫟谝淮魏偷诙畏謩e單擊了哪個(gè) Label 控件。添加標(biāo)簽引用1. 通過(guò)使用下面的代碼向窗體中添加標(biāo)簽引用。C#public partial class Form1 : Form / firstClicked points to the first Label control / that the player clicks, but it wil

34、l be null / if the player hasn't clicked a label yet Label firstClicked = null; / secondClicked points to the second Label control / that the player clicks Label secondClicked = null; 說(shuō)明引用變量看上去類(lèi)似于用來(lái)向窗體添加對(duì)象(如 Timer 對(duì)象、List 對(duì)象和 Random 對(duì)象)的語(yǔ)句。 但是,這些語(yǔ)句不會(huì)導(dǎo)致窗體中顯示兩個(gè)額外

35、的 Label 控件,因?yàn)檫@兩個(gè)語(yǔ)句中沒(méi)有任何一個(gè)語(yǔ)句具有 new。 而沒(méi)有 new 就不能創(chuàng)建對(duì)象。 這就是將 firstClicked 和 secondClicked 稱(chēng)為引用變量的原因:它們只跟蹤(或引用)Label 對(duì)象。 說(shuō)明當(dāng)某變量不跟蹤對(duì)象時(shí),它設(shè)置為特殊的值:null(Visual C# 中)或 Nothing(Visual Basic 中)。 因此,當(dāng)程序啟動(dòng)時(shí),firstClicked 和 secondCl

36、icked 都設(shè)置為 null 或 Nothing,這意味著該變量不會(huì)跟蹤任何內(nèi)容。2. 修改 Click 事件處理程序,以使用新的 firstClicked 引用變量。 移除 label_Click() 事件處理程序方法中的最后一個(gè)語(yǔ)句 (clickedLabel.ForeColor = Color.Black;),并將它替換為下面的 if 語(yǔ)句。 (確保包含了注釋和大括號(hào)之間的所有內(nèi)容。)C#/ <summary>/ Every label's Cli

37、ck event is handled by this event handler/ </summary>/ <param name="sender">The label that was clicked</param>/ <param name="e"></param>private void label_Click(object sender, EventArgs e) Label clickedLabel = sender as Label; if (clickedLabel != nul

38、l) / If the clicked label is black, the player clicked / an icon that's already been revealed - / ignore the click if (clickedLabel.ForeColor = Color.Black) return; / If firstClicked is null, this is the first icon / in the pair that the player clicked, / so set firstClicked to the label that th

39、e player / clicked, change its color to black, and return if (firstClicked = null) firstClicked = clickedLabel; firstClicked.ForeColor = Color.Black; return; 3. 保存并運(yùn)行程序。 單擊其中一個(gè) Label 控件,它的圖標(biāo)將出現(xiàn)。4. 單擊下一個(gè) Label 控件,并注意是否沒(méi)有任何反應(yīng)。 程序已跟蹤玩家單擊的第一個(gè)標(biāo)簽,因此 firstClicked 不等于

40、 Visual C# 中的 null 或 Visual Basic 中的 Nothing。 當(dāng) if 語(yǔ)句檢查 firstClicked 以確定它是否等于 null 或Nothing 時(shí),它發(fā)現(xiàn)它不等于,因而不會(huì)在 if 語(yǔ)句中執(zhí)行語(yǔ)句。 因此,只有被單擊的第一個(gè)圖標(biāo)變?yōu)楹谏?,其他圖標(biāo)是不可見(jiàn)的,如下圖所示。顯示一個(gè)圖標(biāo)的匹配游戲繼續(xù)或查看· 若要轉(zhuǎn)到下一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 6:添加計(jì)時(shí)器。· 若要返回上一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 4

41、:向每個(gè)標(biāo)簽添加一個(gè) Click 事件處理程序。© 2016 Microsoft步驟 6:添加計(jì)時(shí)器Visual Studio 2010接下來(lái),您要向匹配游戲中添加計(jì)時(shí)器。添加計(jì)時(shí)器1. 轉(zhuǎn)到 Windows 窗體設(shè)計(jì)器中的工具箱。 雙擊“Timer”(在“組件”類(lèi)別中)并向窗體添加計(jì)時(shí)器,其圖標(biāo)出現(xiàn)在窗體下方的灰框中,如下圖所示。Timer2. 單擊“timer1”圖標(biāo)以選擇計(jì)時(shí)器。 將“Interval”屬性設(shè)置為 750,但將“Enabled”屬性保留設(shè)置為“False”。 “Interval”屬性通知計(jì)時(shí)器在計(jì)時(shí)周期之間等待的時(shí)間長(zhǎng)度,因此,該屬

42、性通知計(jì)時(shí)器在觸發(fā)第一個(gè) Tick 事件之前等待四分之三秒(750 毫秒)。 您不希望計(jì)時(shí)器在程序啟動(dòng)時(shí)啟動(dòng)。 而是在玩家單擊第二個(gè)標(biāo)簽時(shí)使用 Start() 方法啟動(dòng)計(jì)時(shí)器。3. 雙擊 Windows 窗體設(shè)計(jì)器中的 Timer 控件圖標(biāo)以添加 Tick 事件處理程序,如下面的代碼所示。C#/ <summary>/ This timer is started when the player clicks / two icons that don't match,/ so it counts three quart

43、ers of a second / and then turns itself off and hides both icons/ </summary>/ <param name="sender"></param>/ <param name="e"></param>private void timer1_Tick(object sender, EventArgs e) / Stop the timer timer1.Stop(); / Hide both icons firstClicked.F

44、oreColor = firstClicked.BackColor; secondClicked.ForeColor = secondClicked.BackColor; / Reset firstClicked and secondClicked / so the next time a label is / clicked, the program knows it's the first click firstClicked = null; secondClicked = null;Tick 事件處理程序執(zhí)行三個(gè)操作:首先,通過(guò)調(diào)用 Stop() 方法停止計(jì)時(shí)

45、器。 然后,它使用兩個(gè)引用變量 firstClicked 和 secondClicked 來(lái)捕獲玩家單擊的兩個(gè)標(biāo)簽,并再次使其圖標(biāo)不可見(jiàn)。 最后,它將 firstClicked 和secondClicked 引用變量重置為 null(Visual C# 中)或 Nothing(Visual Basic 中)。 這一點(diǎn)很重要,因?yàn)檫@是該程序重置本身的方式。 現(xiàn)在,它不跟蹤任何 Label 控件,并已準(zhǔn)備好再次捕獲玩家的第一次單擊。 說(shuō)明T

46、imer 對(duì)象具有 Start() 方法和 Stop() 方法,分別用以啟動(dòng)和停止計(jì)時(shí)器。 如果您在“屬性”窗口中將計(jì)時(shí)器的“Enabled”屬性設(shè)置為“True”,則只要程序開(kāi)始運(yùn)行,計(jì)時(shí)器就會(huì)開(kāi)始計(jì)時(shí)。 但是,如果將該屬性保留設(shè)置為“False”,則在調(diào)用計(jì)時(shí)器的 Start() 方法之前,計(jì)時(shí)器不會(huì)開(kāi)始計(jì)時(shí)。 說(shuō)明通常,計(jì)時(shí)器會(huì)使用“Interval”屬性確定要在計(jì)時(shí)周期之間等待的毫秒數(shù),從而反復(fù)觸發(fā)其 Tick 事件。 您可能已經(jīng)注意到在 Tick 事件中調(diào)用計(jì)時(shí)器的 

47、;Stop() 方法的方式。 它會(huì)將計(jì)時(shí)器置于“單觸發(fā)模式”,這樣,當(dāng)調(diào)用 Start() 方法時(shí),它會(huì)等待間隔的時(shí)間長(zhǎng)度并觸發(fā)單一 Tick 事件。4. 若要查看正在使用的新計(jì)時(shí)器,請(qǐng)轉(zhuǎn)至代碼編輯器,將以下代碼添加到 label_Click() 事件處理程序方法的頂部和底部。 (您要將 if 語(yǔ)句添加到頂部,將三個(gè)語(yǔ)句添加到底部;該方法的其余部分保持相同。)C#/ <summary>/ Every label's Click event is handled by this even

48、t handler/ </summary>/ <param name="sender">The label that was clicked</param>/ <param name="e"></param>private void label_Click(object sender, EventArgs e) / The timer is only on after two non-matching / icons have been shown to the player, / so ign

49、ore any clicks if the timer is running if (timer1.Enabled = true) return; Label clickedLabel = sender as Label; if (clickedLabel != null) / If the clicked label is black, the player clicked / an icon that's already been revealed - / ignore the click if (clickedLabel.ForeColor = Color.Black) retu

50、rn; / If firstClicked is null, this is the first icon / in the pair that the player clicked, / so set firstClicked to the label that the player / clicked, change its color to black, and return if (firstClicked = null) firstClicked = clickedLabel; firstClicked.ForeColor = Color.Black; return; / If th

51、e player gets this far, the timer isn't / running and firstClicked isn't null, / so this must be the second icon the player clicked / Set its color to black secondClicked = clickedLabel; secondClicked.ForeColor = Color.Black; / If the player gets this far, the player / clicked two different

52、icons, so start the / timer (which will wait three quarters of / a second, and then hide the icons) timer1.Start(); 該方法頂部的代碼通過(guò)檢查“Enabled”屬性來(lái)檢查計(jì)時(shí)器是否已啟動(dòng)。 這樣,如果玩家單擊第一個(gè)和第二個(gè) Label 控件,且計(jì)時(shí)器啟動(dòng),則單擊第三個(gè)控件將不會(huì)執(zhí)行任何操作。該方法底部的代碼設(shè)置 secondClicked 引用變量,以便它跟蹤玩家單擊的第二個(gè) Label 控件,它將該標(biāo)簽的圖標(biāo)顏

53、色設(shè)置為黑色以使其可見(jiàn)。 然后,它在單觸發(fā)模式下啟動(dòng)計(jì)時(shí)器,以便它等待 750 毫秒,然后觸發(fā) Tick 事件。 然后,計(jì)時(shí)器的 Tick 事件處理程序會(huì)隱藏這兩個(gè)圖標(biāo),并重置 firstClicked 和 secondClicked 引用變量,以便窗體準(zhǔn)備就緒以供玩家單擊另一個(gè)圖標(biāo)。5. 保存并運(yùn)行程序。 單擊一個(gè)圖標(biāo),它將變得可見(jiàn)。6. 單擊另一個(gè)圖標(biāo)。 它會(huì)短暫顯示,然后兩個(gè)圖標(biāo)都消失。 多次重復(fù)此操作。 窗體現(xiàn)在跟蹤您單擊的第一個(gè)和第二個(gè)圖標(biāo),并在使圖標(biāo)消失之前使用計(jì)時(shí)器暫停。繼續(xù)或查看

54、· 若要轉(zhuǎn)到下一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 7:保持對(duì)可見(jiàn)。· 若要返回上一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 5:添加標(biāo)簽引用。© 2016 Microsoft步驟 7:保持對(duì)可見(jiàn)Visual Studio 2010只要玩家僅單擊不匹配的圖標(biāo)對(duì),游戲即可順暢地運(yùn)行。 但是,請(qǐng)考慮玩家單擊匹配對(duì)時(shí)應(yīng)發(fā)生的情況。 游戲不是通過(guò)打開(kāi)計(jì)時(shí)器(使用 Start() 方法)來(lái)使圖標(biāo)消失,而應(yīng)當(dāng)進(jìn)行重置,這樣游戲就不再使用 firstClicked 和secondClicked 引用變量跟蹤任何標(biāo)簽,而且無(wú)需重置兩個(gè)已單擊

55、過(guò)的標(biāo)簽的顏色。保持對(duì)可見(jiàn)1. 將下面的 if 語(yǔ)句添加到 label_Click() 事件處理程序方法的尾部附近,緊靠啟動(dòng)計(jì)時(shí)器的語(yǔ)句的上方。 將代碼添加到程序時(shí),請(qǐng)仔細(xì)查看一下代碼。 考慮代碼如何運(yùn)行。C# / If the player gets this far, the timer isn't / running and firstClicked isn't null, / so this must be the second icon the player clicked / Set its color t

56、o black secondClicked = clickedLabel; secondClicked.ForeColor = Color.Black; / If the player clicked two matching icons, keep them / black and reset firstClicked and secondClicked / so the player can click another icon if (firstClicked.Text = secondClicked.Text) firstClicked = null; secondClicked =

57、null; return; / If the player gets this far, the player / clicked two different icons, so start the / timer (which will wait three quarters of / a second, and then hide the icons) timer1.Start(); 您剛添加的 if 語(yǔ)句的第一行檢查玩家單擊的第一個(gè)標(biāo)簽中的圖標(biāo)是否與第二個(gè)標(biāo)簽中的圖標(biāo)相同。 如果圖標(biāo)相同,則程序執(zhí)行 C# 中大括號(hào)之間的三個(gè)語(yǔ)句或 Visual Basic

58、中 if 語(yǔ)句內(nèi)的三個(gè)語(yǔ)句。 前兩個(gè)語(yǔ)句重置firstClicked 和 secondClicked 引用變量,使它們不跟蹤任何標(biāo)簽。 (您可以從計(jì)時(shí)器的 Tick 事件處理程序識(shí)別這兩個(gè)語(yǔ)句。)第三個(gè)語(yǔ)句是返回語(yǔ)句,它通知程序跳過(guò)方法中的其余語(yǔ)句,不執(zhí)行它們。如果使用 Visual C# 編程,您可能已注意到某些代碼使用單個(gè)等號(hào) (=),而其他語(yǔ)句使用雙等號(hào) (=)。 請(qǐng)考慮為什么在某些位置使用 =,但在其他位置使用 =。以下是一個(gè)顯示該區(qū)別的很好的示例。 請(qǐng)仔細(xì)查看 if

59、 語(yǔ)句括號(hào)之間的代碼。VBfirstClicked.Text = secondClicked.TextC#firstClicked.Text = secondClicked.Text再仔細(xì)查看 if 語(yǔ)句后的代碼塊中的第一個(gè)語(yǔ)句。VBfirstClicked = NothingC#firstClicked = null;這兩個(gè)語(yǔ)句中的第一句檢查兩個(gè)圖標(biāo)是否相同。因?yàn)橐容^兩個(gè)值,所以 Visual C# 程序使用 = 相等運(yùn)算符。第二個(gè)語(yǔ)句實(shí)際上更改值(稱(chēng)為“賦值”),將 firstClicked 引用變量設(shè)置為等于

60、0;null 以重置它。這就是使用= 賦值運(yùn)算符的原因。Visual C# 使用 = 設(shè)置值,使用 = 比較值。而,Visual Basic 將 = 既用于賦值,也用于比較。2. 保存并運(yùn)行程序,然后開(kāi)始在窗體中單擊。 如果單擊的是不匹配的對(duì),則將觸發(fā)計(jì)時(shí)器的 Tick 事件,兩個(gè)圖標(biāo)都會(huì)消失。 如果單擊的是匹配的對(duì),則將執(zhí)行新的 if 語(yǔ)句,而返回語(yǔ)句會(huì)使方法跳過(guò)啟動(dòng)計(jì)時(shí)器的代碼,因此圖標(biāo)保持可見(jiàn),如下圖所示。具有可見(jiàn)圖標(biāo)對(duì)的匹配游戲繼續(xù)或查看· 若要轉(zhuǎn)到下一個(gè)教

61、程步驟,請(qǐng)參見(jiàn)步驟 8:添加方法以驗(yàn)證玩家是否獲勝。· 若要返回上一個(gè)教程步驟,請(qǐng)參見(jiàn)步驟 6:添加計(jì)時(shí)器。© 2016 Microsoft步驟 8:添加方法以驗(yàn)證玩家是否獲勝Visual Studio 2010您已創(chuàng)建了一個(gè)有趣的游戲,但它需要添加附加項(xiàng)目。 該游戲應(yīng)當(dāng)在玩家獲勝時(shí)結(jié)束,因此您需要添加 CheckForWinner() 方法以驗(yàn)證玩家是否獲勝。添加方法以驗(yàn)證玩家是否獲勝1. 將 CheckForWinner() 方法添加到窗體,如下面的代碼所示。C#/ <summary>/ Check every icon to see if it is matched, by / comparing its foreground color to its background col

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論