匹配游戏的运行原理如下所示:
当玩家选择一个带有隐藏图标的方块时,程序会通过将图标颜色更改为黑色来向玩家显示该图标。
然后玩家选择另一个隐藏的图标。
如果图标互相匹配,则它们保持可见。如果不匹配,则两个图标都会再次隐藏。
为了使程序按此方式运行,你需要添加一个 Click 事件处理程序以更改所选择的标签的颜色。
向每个标签添加一个 Click 事件处理程序
在“Windows 窗体设计器”中打开窗体。在解决方案资源管理器中,选择 Form1.cs 或 Form1.vb。在菜单栏上,依次选择**“视图”->“设计器”**。
选择第一个标签控件以选中它。然后,按住 Ctrl 键选择其他每个标签,以将它们选中。确保选中每个标签。
选择**“属性”窗口中工具栏上的“事件”按钮,在“属性”窗口中查看“事件”页面。向下滚动到“Click”**事件,在框中输入 label_Click,如下图所示。
显示 Click 事件的“属性”窗口
按 Enter 键。IDE 将称为 label_Click() 的 Click 事件处理程序添加到代码中,并将其挂钩到窗体上的每个标签。
填写其余代码,如下所示:
''' <summary> ''' Every label's Click event is handled by this event handler ''' </summary> ''' <param name="sender">The label that was clicked</param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub label_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click, Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click, Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click Dim clickedLabel = TryCast(sender, Label) If clickedLabel IsNot Nothing Then ' If the clicked label is black, the player clicked ' an icon that's already been revealed -- ' ignore the click If clickedLabel.ForeColor = Color.Black Then Exit Sub clickedLabel.ForeColor = Color.Black End If End Sub
/// <summary> /// Every label's Click 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 != 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) return; clickedLabel.ForeColor = Color.Black; } }
说明
如果你复制和粘贴 label_Click() 代码块,而不是手动输入代码,请确保替换现有的 label_Click() 代码。否则,你将得到重复的代码块。
说明
你可能发现事件处理程序顶部的 object sender 与Tutorial 2: Create a Timed Math Quiz教程中使用的相同。这是因为你将不同的标签控件 Click 事件与一个事件处理程序方法挂钩,因此无论用户选择哪个标签,都调用同一方法。该事件处理程序方法需要知道选择了哪个标签,以便使用名称“sender”标识该标签控件。该方法的第一行通知程序,它并不是一般的对象,而是专门的标签控件,而且它使用名称“clickedLabel”访问标签的属性和方法。
该方法首先检查是否已将**“clickedLabel”成功从对象转换(强制转换)为标签控件。如果不成功,其值为 null (C#) 或 Nothing (Visual Basic),你不需要执行该方法中的其余代码。接下来,该方法使用标签的“ForeColor”**属性检查选择的标签的文本颜色。如果标签的文本颜色为黑色,则表示已选择该图标并且该方法执行完毕。(这就是 return 语句的作用:它通知程序停止执行该方法。)否则,表示图标尚未被选择,因此程序将标签的文本颜色更改为黑色。
在菜单栏上依次选择**“文件”->“全部保存”以保存你的进度,然后在菜单栏上选择“调试”->“开始调试”**以运行程序。你应该看到一个背景为蓝色的空窗体。在窗体中选择任意单元格,其中一个图标应变为可见。继续在窗体中选择不同位置。当选择图标时,它们应显示。
继续或查看
若要转到下一个教程步骤,请参阅Step 5: Add Label References。
若要返回上一个教程步骤,请参阅Step 3: Assign a Random Icon to Each Label。