教程4:创建匹配游戏VisualStudio2010在本教程中,将生成一个匹配游戏,在该游戏中,玩家必须匹配隐藏的图标对。您将学习如何:使用List对象来包含对象。使用foreach循环(VisualC#中)。使用引用变量跟踪窗体的状态。生成可用于多个对象的事件处理程序。使计时器启动时正好激发一次。当您完成时,程序将类似下图所示。在本教程中创建的游戏相关主题标题说明步骤1:创建项目并向窗体添加表通过创建项目并添加TableLayoutPanel控件开始操作。步骤2:添加随机对象和图标列表添加Random对象和List对象,以创建图标列表。步骤3:向每个标签分配一个随机图标向Label控件随机分配图标。步骤4:向每个标签添加一个Click事件处理程序添加一个Click事件处理程序,该处理程序更改被单击的标签的颜色。步骤5:添加标签引用添加引用变量以跟踪哪些标签被单击。步骤6:添加计时器向窗体添加计时器。步骤7:保持对可见保持图标对可见(如果选择了匹配的对)。步骤8:添加方法以验证玩家是否获胜添加CheckForWinner()方法以验证玩家是否获胜。步骤9:尝试其他功能尝试其他功能,例如更改图标和颜色、添加网格以及添加声音。尝试使图板变大并调整计时器。步骤1:创建项目并向窗体添加表VisualStudio2010创建匹配游戏的第一步是创建项目并向窗体添加表。创建项目并向窗体添加表1.在“文件”菜单上,单击“新建项目”。2.如果没有使用VisualStudio学习版,您需要先选择一种语言。从“安装的模板”列表中选择“C#”。3.单击“Windows窗体应用程序”图标,然后键入“匹配游戏”作为名称。4.设置窗体属性:a.将窗体的“Text”属性更改为“匹配游戏”。b.通过使用“Size”属性将大小更改为550像素宽、550像素高,或者拖动直到您在集成开发环境(IDE)的左下角看到合适的大小。5.将TableLayoutPanel控件从工具箱中拖出,然后设置其属性:a.将“BackColor”属性设置为“CornflowerBlue”。(在颜色选取器中选择“Web”选项卡可以查看颜色名称。)b.通过单击属性旁边的下拉按钮并单击大的中间按钮,将“Dock”属性设置为“Fill”。c.单击TableLayoutPanel右上角的三角形按钮,以显示任务菜单。d.单击“添加行”两次以多添加两行,然后单击“添加列”两次以再添加两列。e.单击“编辑行和列”打开“列和行样式”窗口。选择每一列,单击“百分比”按钮并将每个列的宽度设置为总宽度的25%。然后从窗口顶部的下拉框选择“行”,并将每个行的高度设置为25%。单击“确定”按钮。TableLayoutPanel现在应该有十六个相等大小的方块单元格。6.确保在窗体编辑器中选择了该TableLayoutPanel。选中后,打开工具箱,然后双击“Label”以将Label控件添加到左上方的方块中。现在,Label控件在IDE中应处于选中状态。设置其属性:a.将“BackColor”属性设置为“CornflowerBlue”。b.将“AutoSize”属性设置为“False”。c.将“Dock”属性设置为“Fill”。d.通过单击“TextAlign”属性旁的下拉按钮并单击中间的按钮,将该属性设置为“MiddleCenter”。e.单击“Font”属性。应显示一个省略号按钮。f.单击该省略号按钮,并将字体设置为“Webdings72pointBold”。g.将“Text”属性设置为字母“c”。TableLayoutPanel中的左上角单元格现在应包含一个在蓝色背景上居中的大黑色框。说明Webdings字体是MicrosoftWindows操作系统附带的图标字体。在匹配游戏中,玩家需要匹配图标对,因此您使用此字体显示要匹配的图标。不要在“Text”属性中输入“c”,请尝试输入其他字母以查看显示哪些图标。感叹号是一个蜘蛛,大写N是一个眼球,而逗号是一个辣椒。7.选择Label控件并进行复制。(按Ctrl+C,或从“编辑”菜单中单击“复制”。)然后粘贴。(按Ctrl+V,或从“编辑”菜单中单击“粘贴”。)在TableLayoutPanel中的第二个单元格中出现另一个标签。再次粘贴它,在第三个单元格中会出现另一个标签。一直粘贴Label控件,直到填充完所有单元格。说明如果粘贴次数太多,IDE会将一个新行添加到该TableLayoutPanel,以便具有可添加新Label控件的位置。您可以撤消此操作。若要移除新单元格,请按Ctrl+Z或在“编辑”菜单上单击“撤消”。8.现在,窗体布局已设置完毕。其外观类似于下图。9.初始匹配游戏窗体步骤2:添加随机对象和图标列表VisualStudio2010您需要使用两个new语句创建两个对象并将它们添加到您的窗体。第一个是Random对象,类似于数学测验游戏中使用的对象。第二个是一个新对象:List对象。添加随机对象和图标列表1.在添加以下代码以创建列表之前,请考虑它的运行方式。publicpartialclassForm1:Form{//UsethisRandomobjecttochooserandomiconsforthesquaresRandomrandom=newRandom();//Eachoftheselettersisaninterestingicon//intheWebdingsfont,//andeachiconappearstwiceinthislistListstringicons=newListstring(){!,!,N,N,,,,,k,k,b,b,v,v,w,w,z,z};2.通过右击“解决方案资源管理器”中的“Form1.cs”,然后从菜单中单击“查看代码”,转到代码编辑器。开始键入上一步中所示的代码。如果编写VisualC#代码,请确保将代码放在左大括号后面,紧靠类声明(publicpartialclassForm1:Form)之后。如果编写VisualBasic代码,请将代码放在紧靠类声明(PublicClassForm1)之后。3.添加List对象时,请仔细查看打开的“IntelliSense”窗口。下面是一个VisualC#示例。(如果在VisualBasic中添加列表,会显示类似文本。)“IntelliSense”窗口说明如果您分小段查看代码,则理解会显得更简单。程序可以使用List对象跟踪多个项目。列表可以包含数字、true/false值、文本或其他对象。您甚至可以有一个包含其他List对象的List对象。列表中的项目称为“元素”,每个列表只包含一种元素。所以数字列表只包含数字-您不能向其中添加文本。同样,您也不能向true/false值列表添加数字。说明当使用new语句创建List对象时,需要指示您希望在其中存放的内容。这就是“IntelliSense”窗口顶部工具提示显示列表中的元素类型的原因。同样,这也是Liststring(VisualC#中)和List(OfString)(VisualBasic中)的含义:它是一个包含字符串的List对象。程序使用字符串来存储文本,该文本是“IntelliSense”窗口右侧的工具提示将告诉您的文本。4.请考虑为什么在VisualBasic中必须首先创建临时数组,但在VisualC#中可以使用一条语句创建列表。这是因为VisualC#语言具有“集合初始值设定项”。在VisualBasic2010中,可以使用集合初始值设定项。但是,为了与以前版本的VisualBasic兼容,我们建议您使用上面的代码。说明当您将集合初始值设定项与new语句一同使用时,在创建新的List对象后,程序将使用大括号内的任何内容填充它。在本例中,您获取名为“图标”的字符串列表,该列表将初始化以包含十六个字符串。其中每个字符串都是单个字母,它们都对应于将在标签中出现的图标。因此,游戏将具有一对感叹号、一对大写的N字母、一对逗号等。List对象将包含全部十六个字符串,每个对应于TableLayoutPanel中的一个单元格。说明在VisualBasic中,可以获得相同的结果,但是字符串首先放入临时数组中,该数组然后转换为List对象。数组类似于列表,但也有不同之处,例如数组在创建时具有固定大小。列表可以根据需要收缩或增长,这在此程序中非常重要。步骤3:向每个标签分配一个随机图标VisualStudio2010如果游戏始终将同一图标隐藏在相同的位置,这就没有挑战性了。您需要向窗体中的Label控件随机分配图标。为此,需要添加AssignIconsToSquares()方法。向每个标签分配一个随机图标1.在添加以下代码之前,请考虑该方法的工作原理。有一个新的关键字:foreach(VisualC#中)或ForEach(VisualBasic中)。(其中有一行被故意注释掉,本过程的结尾对此进行了解释)。///summary///Assigneachiconfromthelistoficonstoarandomsquare////summaryprivatevoidAssignIconsToSquares(){//TheTableLayoutPanelhas16labels,//andtheiconlisthas16icons,//soaniconispulledatrandomfromthelist//andaddedtoeachlabelforeach(ControlcontrolintableLayoutPanel1.Controls){LabeliconLabel=controlasLabel;if(iconLabel!=null){intrandomNumber=random.Next(icons.Count);iconLabel.Text=icons[randomNumber];//iconLabel.ForeColor=iconLabel.BackColor;icons.RemoveAt(randomNumber);}}}2.按上一步骤所示,添加AssignIconsToSquares()方法。可以将它放在紧靠步骤2:添加随机对象和图标列表中添加的代码的下方。在AssignIconsToSquares()方法中有一个新增功能:foreach循环(在VisualC#中)或ForEach(在VisualBasic中)。无论何时想要重复执行相同操作,您都可以使用foreach循环。在本例中,您要对TableLayoutPanel中的每个标签执行相同的语句,下面的代码对此进行了解释。foreach(ControlcontrolintableLayoutPanel1.Controls){//Thestatementsyouwanttoexecute//foreachlabelgohere//ThestatementsuseiconLabeltoaccess//eachlabel'spropertiesandmethods}说明其中使用了名称iconLabel和控件,因为它们具有描述性。您可以将这些名称替换为任何名称,其作用完全相同(只要您更改了大括号内每个语句中的名称)。AssignIconsToSquares()方法遍历TableLayoutPanel中的每个Label控件,并对每个控件执行相同的语句。这些语句从您在步骤2:添加随机对象和图标列表中添加的列表提取随机图标。(这就是该列表中每个图标都有两个的原因,因此将向随机Label控件分配一对图标。)3.一旦程序启动,您就需要调用AssignIconsToSquares()方法。如果编写VisualC#代码,则在Form1构造函数中紧靠对InitializeComponent()方法的调用下方添加一条语句,这样窗体便可以调用新方法以在显示之前对自身进行设置。publicForm1(){InitializeComponent();A