扫雷游戏制作过程(C#描述):第四节、菜单操作

我们现在的程序单击菜单的时候不会有任何反应,这一节我们主要介绍菜单的相关代码,使得菜单能够正常使用。

在第二节中,我们曾经提出希望在对应级别(初级、中级、高级、自定义)的按钮的显示勾,以表示目前的游戏等级。我们有两个时候需要对它进行操作,一个是加载上次游戏设置的时候,一个是在游戏过程中进行设置的时候,我们先介绍第一种情况。按照下图修改代码:

4-1 选择对应的游戏等级

注意到beginnerBToolStripMenuItemintermediateIToolStripMenuItemexpertEToolStripMenuItemsettingSToolStripMenuItem分别表示四个等级的菜单的名称,通过修改它们的Checked属性来达到修改对应项目前面勾的状态。我们还需要在初始化函数中调用这个函数:

4-2 SelectLevel调用

这时候,我们运行就会发现Beginner菜单前面的勾被选中了:

4-3 阶段性结果

下面我们来处理一下各个菜单按钮的事件,我们只需要双击菜单上的按钮,程序会自动创建对应的单击事件,我们只需要在其中书写代码即可。我们首先来创建Beginner、Intermediate、Expert、Exit、About菜单项目对应的事件。我们先介绍Beginner、Intermediate、Expert菜单项目对应的代码:

4-4 初级、中级、高级菜单事件

接下来,我们处理Exit事件,我们希望在退出游戏之前询问游戏者是否确认退出,代码如下:

4-5 Exit

然后,我们来处理About事件,我们希望得到类似Windows默认关于窗口的界面。为此,首先我们需要引用一个类,在代码的开头部分加上下图高亮部分的代码:4-6 Using

为了实现这样的功能,我们需要调用Windows系统内部的一个API,添加这样一个函数:

4-7 API

 

在About事件中添加如下代码进行调用:

4-8 About

运行以后查看结果如下图所示:

4-9 阶段性结果1

可能细心的读者会发现,虽然我们通过菜单修改了游戏等级,但是我们窗口中的雷区却没有发生变化,因为我们没有在菜单被按下的时候没有调用UpdateSize函数。在三个按钮的事件中添加对UpdateSize函数的调用即可。代码如下:

4-10 UpdateSize

在此运行的时候,我们发现修改游戏等级的时候,游戏界面也会发生相应的变化。但是还有一点瑕疵,就是在大规模变成小规模的时候,边上会有多余的雷区。为了修正这个Bug,我们需要将原来Paint事件中代码放在一个新的函数PaintGame中,同时添加高亮区域的代码,并且在Paint事件中进行调用,代码如下:

4-11 PaintGame

 

除此之外,在UpdateSize最后也需要调用PaintGame函数,如下图所示:

4-12 UpdateSize

 

再次运行的时候,就会发现边上多余的雷区已经消失了。

接下来我们处理Mark以及Audio两个事件,我们需要定义两个变量来记录它们的数据,因为这对于我们以后的开发有很大的关系。如下图所示:

4-13 变量定义

同样我们需要在游戏开始的时候读取上次的数据,如果没有则都设置为真。我们首先看Setting文件:

4-14 Setting

同时加入以下代码:

4-15 初始化数据

同时为Mark以及Audio菜单项目添加如下的事件:

4-16 Mark Audio事件

至此,我们还剩New Game、Setting、Rank三个菜单选项的事件没有涉及,因为它们需用用到更多的内容,我们将会在下一节中进行讲解。

4 条评论扫雷游戏制作过程(C#描述):第四节、菜单操作

发表评论