前言

这里给出教程原文地址

该项目已经放在github上托管。

菜单操作

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

现在我们希望在对应级别(初级、中级、高级)的按钮的前显示打勾,以表示目前的游戏等级,并且选择对应级别的按钮,能有相应的变化。我们双击菜单栏中的Beginner便会自动进入相应的函数代码区,在此函数中的代码,便是点击Beginner时所执行的代码。这里做一个说明:每个函数的首字母必须大学,所以此时你必须修改Beginner属性栏中的Name,同理,菜单栏下每个选项的属性中的Name都需要修改,否则会报错。

分别双击BeginnerIntermediateExport三个菜单栏,做如下修改:

private void BeginnerBToolStripMenuItem_Click(object sender, EventArgs e)
{
//我们令Beginner中的行数,列数,地雷的数量分别为:10,10,10
Sweep_width = 10;
Sweep_high = 10;
Sweep_num = 10;
}
private void IntermediateIToolStripMenuItem_Click(object sender, EventArgs e)
{
//我们令Beginner中的行数,列数,地雷的数量分别为:16,16,40
Sweep_width = 16;
Sweep_high = 16;
Sweep_num = 40;
}
private void ExpertEToolStripMenuItem_Click(object sender, EventArgs e)
{
//我们令Beginner中的行数,列数,地雷的数量分别为:16,30,99
Sweep_width = 30;
Sweep_high = 16;
Sweep_num = 99;
}

为了方便操作,我们自己定义一个NewGame()函数,一个SetLevel()函数,这里说明下,你可能觉得定义的NewGame()函数并多此一举,两个函数合并不就得了,NewGame()函数在后来会补进新的代码,在后面的章节,就会体现出来。操作如下:

private void SetLevel()
{
BeginnerBToolStripMenuItem.Checked = false;
IntermediateIToolStripMenuItem.Checked = false;
ExpertEToolStripMenuItem.Checked = false; //初始化
switch (Sweep_num)
{
case 10: BeginnerBToolStripMenuItem.Checked = true; break;
case 40: IntermediateIToolStripMenuItem.Checked = true; break;
case 99: ExpertEToolStripMenuItem.Checked = true; break;
default: break;
} //判断当前是设置哪个等级,菜单栏中当前等级前显示打钩符号
Properties.Settings.Default.Sweep_high = Sweep_high;
Properties.Settings.Default.Sweep_width = Sweep_width;
Properties.Settings.Default.Sweep_num = Sweep_num;
Properties.Settings.Default.Save(); //保存设置到Settings中
NewGame(); //调用NewGame()函数
}
private void NewGame()
{
UpdateSize(Sweep_width, Sweep_high);
Refresh();
}

此时需要在BeginnerBToolStripMenuItem_Click(object sender, EventArgs e)中调用SetLevel()函数,来保存设置,更改窗口大小,重绘雷区,另外两个函数做同样的修改。

private void BeginnerBToolStripMenuItem_Click(object sender, EventArgs e)
{
//我们令Beginner中的行数,列数,地雷的数量分别为:10,10,10
Sweep_width = 10;
Sweep_high = 10;
Sweep_num = 10;
SetLevel();
}

最后在函数public Form_Main()中,调用SetLevel(),使程序刚运行时,自动在相应的等级前显示打钩按钮。添加如下代码:

SetLevel();

最后按Ctrl + F5编译运行,得到最终结果:





双击菜单栏中的New Game,Exit,做如下修改:

private void NewGameToolStripMenuItem_Click(object sender, EventArgs e)
{
NewGame();
}
private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}

自此菜单栏的部分功能已经得到实现。

扫雷游戏制作过程(C#描述):第四节、菜单操作的更多相关文章

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

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 发布版已经分享到百度网盘 菜单操作(续) 接着节前一章节的内容,我们继续完善菜单栏的功能. 我们首先,先完善Rank的选项,我们希望我 ...

  2. 扫雷游戏制作过程(C#描述):第二节、界面设计

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 扫雷界面设计 界面的设计,首先需要创建一个菜单栏.具体方法在左边找到工具箱窗口,展开其中的菜单和工具栏,找到MenuStrip选项,双 ...

  3. 扫雷游戏制作过程(C#描述):第三节、雷区绘制

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 绘制雷区 这一节我们主要涉及界面中雷区的绘制.绘制雷区需要三个变量来保存雷区行数.列数.以及地雷的数量.而且我们希望能够自动获取上次游 ...

  4. 扫雷游戏制作过程(C#描述):第一节、创建项目

    前言 起初做扫雷是同学在做,我也跟着做了.做的比较low,其实第一次做这种东西,自己对自己的要求也不高,注重在了解一下,一个app应用程序是怎么产生的..net开发平台,用c#敲的.建议大家一些不懂的 ...

  5. Unity3D_(游戏)2D简单游戏制作过程:捕获高空掉落保龄球

      游戏介绍:通过鼠标的左右移动,可以控制帽子的移动,当帽子接到下落的保龄球时,会出现火花效果.没有接到保龄球时,保龄球落到草地上,过10S后会自动消失. 实现效果: 素材+Unity3D源代码:传送 ...

  6. 辛星跟您玩转vim第四节之操作文本内容

    首先值得一提的是.我的vim教程pdf版本号已经写完了.大家能够去下载,这里是csdn的下载地址:csdn下载,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http:// ...

  7. [NOIP2015 普及组] 扫雷游戏

    [NOIP2015 普及组] 扫雷游戏 难度:入门 题目描述 扫雷游戏是一款十分经典的单机小游戏.在nn行mm列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开 ...

  8. 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第四节:3D公告板

    <使用Cocos2d-x 开发3D游戏>系列在线课程 第四节:3D公告板 视频地址:http://edu.csdn.net/course/attend/1330/20804 交流论坛:mo ...

  9. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

随机推荐

  1. HTML 笔记 基础1

    html 笔记 20170807 晴 <h1>标题</h1> 标题分为6个 从1到6字体逐渐变小 <p>段落</p> <html> < ...

  2. 【NO.12-2】jmeter-执行脚本

    //拿jmeter举例 //要进入到jmeter工具的bin目录 //当使用其它的开源测试工具的时候,也可以参考上面这一点,即:进入到bin目录 //如果工具本身不包含bin文件,那么在工具的1级目录 ...

  3. 使用EasyWechat快速开发微信支付

    前期准备: 申请微信支付后, 会收到2个参数, 商户id,和商户key.注意,这2个参数,不要和微信的参数混淆.微信参数: appid, appkey, token支付参数: merchant_id( ...

  4. 几个简单的例子让你读懂什么是JAVA的堆栈跟踪

      简单的来说,堆栈跟踪就是我们的程序在抛出异常时使用的方法调用列表. 简单的例子 通过问题中给出的示例,我们可以准确地确定应用程序中抛出异常的位置. 我们来看看堆栈跟踪: Exception in ...

  5. 【Centos7】安装memcached

    1.Linux系统安装memcached,首先要先安装libevent库. 安装libevent库有两种方式 (1)rpm安装 yum install libevent libdeve (2)源码包安 ...

  6. Integer陷阱(0~127和其他 数值相等对象比较)

    Integer 类在对象中包装了一个基本类型 int 的值. 有一个陷阱存在,经常出现在面试题中,情况如下面代码 public class IntegerDemo { public static vo ...

  7. Notepad++使用图解

    Notepad++使用图解.. Notepad++的安装部分 -------------- -------------- --------------- -------------- -------- ...

  8. 九天学会Java,第四天,循环结构

    变量和数据类型,赋值和输出 算术运算 选择结构 循环结构 函数定义,函数调用 变量作用域 栈,程序运行的基石 面向对象 异常处理 语言提供的公用包 这次我们讲Java的循环结构.循环结构在编程中广泛使 ...

  9. Java温故而知新-冒泡法排序

    冒泡法排序是各种初学者在学习数组与循环结构时都会练习的一种简单排序算法. 冒泡法的精髓在于比较相邻的两个元素,较大的元素会不断的排到队伍后面去,就像水里的泡泡一样不断向上跑. 想像一下倒在一个透明玻璃 ...

  10. python的multiprocessing模块进程创建、资源回收-Process,Pool

    python的multiprocessing有两种创建进程的方式,每种创建方式和进程资源的回收都不太相同,下面分别针对Process,Pool及系统自带的fork三种进程分析. 1.方式一:fork( ...