步驟 3:將隨機圖示指派給每個標籤
如果遊戲永遠將相同的圖示隱藏在相同的位置,它就不具挑戰性。 您需要將圖示隨機指派給表單中的 Label 控制項。 若要這樣做,您可以加入 AssignIconsToSquares() 方法。
若要將隨機圖示指派給每一個標籤
在加入下列程式碼之前,請考慮方法的運作方式。 有新的關鍵字:在 Visual C# 中為 foreach,而在 Visual Basic 中為 For Each (其中一行會被故意標記為註解,而在此程序的結尾處予以說明)。
''' <summary> ''' Assign each icon from the list of icons to a random square ''' </summary> ''' <remarks></remarks> Private Sub AssignIconsToSquares() ' The TableLayoutPanel has 16 labels, ' and the icon list has 16 icons, ' so an icon is pulled at random from the list ' and added to each label For Each control In TableLayoutPanel1.Controls Dim iconLabel = TryCast(control, Label) If iconLabel IsNot Nothing Then Dim randomNumber = random.Next(icons.Count) iconLabel.Text = icons(randomNumber) ' iconLabel.ForeColor = iconLabel.BackColor icons.RemoveAt(randomNumber) End If Next End Sub
/// <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 list 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 = icons[randomNumber]; // iconLabel.ForeColor = iconLabel.BackColor; icons.RemoveAt(randomNumber); } } }
如上一個步驟所示,加入 AssignIconsToSquares() 方法。 您可以將它放在您於步驟 2:加入隨機物件和圖示清單中加入的程式碼下方。
您的 AssignIconsToSquares() 方法中有新項目:在 Visual C# 中為 foreach,而在 Visual Basic 中為 For Each。 您隨時要一再地執行相同的動作時,可以使用 For Each 迴圈。 在這種情況下,您要對 TableLayoutPanel 中的每一個標籤執行相同的陳述式,如下列程式碼所說明。 第一行會建立一個名為變數control儲存每個控制項其中之一時,一次控制項在其上執行迴圈中,具有陳述式。
For Each 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 Next
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 }
注意事項 因為 iconLabel 和控制項這兩個名稱都屬描述性,所以會加以使用。您可以使用任何名稱,來取代這些名稱,並可以這樣做完全相同,只要您變更了在迴圈內的每個陳述式中的名稱。
AssignIconsToSquares() 方法會通過 TableLayoutPanel 中的每一個 Label 控制項,並為每一個控制項執行相同的陳述式。 這些陳述式會從您在步驟 2:加入隨機物件和圖示清單中加入的清單提取一個隨機圖示 (這就是您為何將兩個圖示都包含在清單中的緣故,所以會有一對圖示指派給隨機 Label 控制項)。
仔細研究內所執行的程式碼foreach或For Each迴圈。 這裡重現這段程式碼時。
Dim iconLabel = TryCast(control, Label) If iconLabel IsNot Nothing Then Dim randomNumber = random.Next(icons.Count) iconLabel.Text = icons(randomNumber) ' iconLabel.ForeColor = iconLabel.BackColor icons.RemoveAt(randomNumber) End If
Label iconLabel = control as Label; if (iconLabel != null) { int randomNumber = random.Next(icons.Count); iconLabel.Text = icons[randomNumber]; // iconLabel.ForeColor = iconLabel.BackColor; icons.RemoveAt(randomNumber); }
第一行會將轉換control變數] 以Label名為iconLabel。 行之後, if陳述式,會檢查以確定轉換工作。 如果轉換不會運作,陳述式if執行的陳述式。 第一行的if陳述式會建立一個名為變數randomNumber包含分別在 [圖示] 清單中的項目對應到一個隨機數字。 若要這樣做,它會使用Next方法的Random您稍早建立的物件。 Next方法會傳回隨機數字。 這行也會使用Count屬性的icons清單以決定可供選擇的隨機數字範圍。 下一行會指派其中一個圖示,清單項目Text標籤屬性。 本主題中稍後說明的標記註解的行。 最後,最後一行的if陳述式從清單中移除已新增至表單的圖示。
請記住,是否您不確定有關某部分程式碼的作用,您可以將滑鼠指標停留在程式碼項目,並檢閱產生的工具提示。
當程式啟動時,您需要立即呼叫 AssignIconsToSquares() 方法。 如果撰寫 Visual C# 程式碼,在 Form1 建構函式中將陳述式加入至對 InitializeComponent() 方法的呼叫下方,因此您的表單會呼叫新方法,以在顯示之前進行本身的設定。
public Form1() { InitializeComponent(); AssignIconsToSquares(); }
對於 Visual Basic,請先加入建構函式,然後將方法呼叫加入至建構函式。 在您剛才建立的 AssignIconsToSquares() 方法之前,由輸入程式碼 Public Sub New() 開始著手。 當您按下 ENTER 鍵移至下一行時,IntelliSense 應該會顯示下列程式碼,以完成建構函式。
Public Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call End Sub
加入 AssignIconsToSquares() 方法呼叫,您的建構函式看起來會如下所示。
Public Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call AssignIconsToSquares() End Sub
儲存並執行您的程式。 它應該會顯示一個表單,內含已指派給每一個標籤的隨機圖示。
關閉程式,然後再執行一次。 現在不同的圖示會指派給每一個標籤,如下列圖片所示。
含有隨機圖示的配對遊戲
現在停止程式,並取消 For Each 迴圈內該程式碼行的註解。
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
按一下 [全部儲存] 工具列按鈕,即可儲存您的程式,然後執行它。 圖示似乎都已消失,只有一個藍色背景會出現。 不過,會隨機指派圖示,而且都還在那裡。 因為圖示與背景的色彩相同,所以才會看不見。
若要繼續或檢視
若要移到下一個教學課程步驟,請參閱步驟 4:將 Click 事件處理常式加入至每個標籤。
若要回到上一個教學課程步驟,請參閱步驟 2:加入隨機物件和圖示清單。