共用方式為


步驟 3:將隨機圖示指派給每個標籤

如果遊戲永遠將相同的圖示隱藏在相同的位置,它就不具挑戰性。 您需要將圖示隨機指派給表單中的 Label 控制項。 若要這樣做,您可以加入 AssignIconsToSquares() 方法。

若要將隨機圖示指派給每一個標籤

  1. 在加入下列程式碼之前,請考慮方法的運作方式。 有新的關鍵字:在 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);
            }
        }
    } 
    
  2. 如上一個步驟所示,加入 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陳述式從清單中移除已新增至表單的圖示。

    請記住,是否您不確定有關某部分程式碼的作用,您可以將滑鼠指標停留在程式碼項目,並檢閱產生的工具提示。

  3. 當程式啟動時,您需要立即呼叫 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
    
  4. 儲存並執行您的程式。 它應該會顯示一個表單,內含已指派給每一個標籤的隨機圖示。

  5. 關閉程式,然後再執行一次。 現在不同的圖示會指派給每一個標籤,如下列圖片所示。

    含有隨機圖示的配對遊戲

    含有隨機圖示的配對遊戲

  6. 現在停止程式,並取消 For Each 迴圈內該程式碼行的註解。

    iconLabel.ForeColor = iconLabel.BackColor
    
    iconLabel.ForeColor = iconLabel.BackColor;
    
  7. 按一下 [全部儲存] 工具列按鈕,即可儲存您的程式,然後執行它。 圖示似乎都已消失,只有一個藍色背景會出現。 不過,會隨機指派圖示,而且都還在那裡。 因為圖示與背景的色彩相同,所以才會看不見。

若要繼續或檢視