一:在源码管理器中打开VS

注意,下文这样的打开方式是在 TFS 的源码服务器中打开解决方案。如果我们使用 SVN,则直接在硬盘上打开解决方案就可以了。

打开VS:

然后按上图中的步骤1和2(双击2处),打开我们的解决方案,如下:

注意,双击红框,会显示Solution Explorer。

我们在上一节中,只是创建了打老鼠的解决方案,还完全没有编写任何代码。这个时候运行解决方案一下(记得吗,菜单中Debug->Start without debug,或Ctrl+F5。我喜欢用快捷键,而且你也必须快速熟悉起这些快捷键,使用快捷键可以节约时间)。

运行起来后,是一个空白的Windows窗体,如下:

二:导入资源文件

现在我们就要在这个窗体上打老鼠了。

打老鼠这个游戏的最终效果图如下:

为了完成这个游戏,有两个图片资源要用到(请自行右键下载):

bg.png

mouse.png

请把这两个图片保存到我们的项目的根目录下,请查看下节视频进行图片资源的导入及背景设置:

最后,我们看到的整个VS画面应该是这样的:

三:实现最简单的功能

接下来,我们就该简单的把打老鼠游戏的整个编码实现思想说一下了。我们看到背景上有11个老鼠洞:

1:首先给11个老鼠洞都覆盖上老鼠形象;

2:把全体老鼠形象设置为不可见;

3:给程序设定一个始终,让时钟每隔1秒随机显示一个老鼠形象;

四:视频

非公开,请联系 最课程(www.zuikc.com

五:代码讲解

现在,我们来看看视频中的代码到底是什么意思:

private List<PictureBox> _mouses = new List<PictureBox>();
        private Timer _timer = new Timer();
        private Random _random = new Random();
        private PictureBox _oldMouse;
        private int _score = 0;

在这里,我们定义了一些变量,其中:

_mouses 用来存放全部的老鼠图片;
  _timer 是一个计时器;
  _random 在这里代表了一个随机数;
  _oldMouse 在这里当前正在出现的那只老鼠;
  _score 用于记录分数,暂时还没起到作用;

再看下面这段代码:

foreach (Control item in this.Controls)
            {
                if(item is PictureBox)
                {
                    _mouses.Add(item as PictureBox);
                }
            }

_timer.Interval = 1000;
            _timer.Tick += _timer_Tick;
            _timer.Start();

foreach 表示这是一个循环,我们需要把所有的老鼠都加入到 _mouses 这个变量中去,因为一开始这个变量中是空的,没有老鼠的;
   _timer.Interval = 1000; 表示为定时器的时间设置为 1 秒;
   _timer.Tick += _timer_Tick; 表示定时器定时时间到的时候,要触发一个函数,这个函数叫 _timer_Tick;
   _timer.Start(); 表示定时器开始计时吧;

再看定时器触发的这个函数:

void _timer_Tick(object sender, EventArgs e)
        {
            if(_oldMouse != null)
            {
                _oldMouse.Visible = false;
            }

int index = _random.Next(1, 11);
            _oldMouse = _mouses[index];

_oldMouse.Visible = true;
        }

在这个函数里面的逻辑就是,如果当前有老鼠正在显示着,就应该先隐藏,让另外一只老鼠出现;

运行程序,我们就会发现每隔 1 秒,就会随机出现一只老鼠;

现在,我们继续完善代码,要实现:当老鼠形象出现的时候,鼠标击中了老鼠则计分+1,并显示出来;

实际上,只要修改上面的 foreach 循环中的代码为:

foreach (Control item in this.Controls)
            {
                if(item is PictureBox)
                {
                    _mouses.Add(item as PictureBox);
                    item.MouseDoubleClick += item_MouseDoubleClick;
                }
            }

即,为老鼠增加鼠标双击事件,其事件方法为:

void item_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            _score++;
            _labelScore.Text = _score.ToString();
        }

这就完成了“鼠标击中了老鼠则计分+1,并显示出来”,我们看到,上面多了个没见过的变量  _labelScore,它是怎么出现的呢,看视频。

六:截止目前为止的打老鼠知识点

到目前为止,我们实现的打老鼠游戏虽然简单,却已经包含了很多的语法知识,如下11个知识点:

接下来,我们就需要一一学习一下这些知识。(注意,在本节下面的详细叙述当中,各个知识点我会只讲到当前必须知道的程度,随着课程的深入会逐步补充各个知识点的深入阐述。)

1和2:被引用的命名空间以及定义当前的类的命名空间

把类在归类一下,就叫命名空间。

命名空间和文件夹的关系?没有关系!当然,常用的做法是,一个命名空间就使用一个文件夹。

如果我们在当前类中要引用到别的类,则方便的做法是把别的类所在的命名空间用using引入进来,如上图的1;

反过来,我们现在在编写打老鼠这个类,就需要为当前的这个类定义一个命名空间,如上图的2;

3和4:类和实例

在C#的世界中,代码是以类为单位组织起来的,我们可以看到:

public partial class Form1 : Form

Form1就是一个类。关于一个类的最简单的形式如下:

class Mouse

{

}

至于打老鼠游戏中的Form1这个类声明当中的partial和后面的冒号后的内容,我们暂时可以不管它。

类和文件的关系?没有关系!当然,常用的做法是,一个类使用一个文件。

对类使用new关键字,就产生了类的一个实例,如:

Mouse aMouse = new Mouse();

5和10和11. 变量

在类以内,方法以外,没有修饰static的变量,为实例变量;

方法以内的变量,叫做局部变量;

变量在方法的声明内,叫做方法参数;

变量(或者说变量名),代表的就是某个你要操作的对象。

6和9. 方法

方法定义了类的行为,也就是类可以干什么。

有一类特殊的方法叫做构造器。它是在产生类的实例的时候首先被调用的。

7. 循环结构

foreach,for,while,都属于循环结构,光看代码,大家应该都能准确理解起意思,不在赘述。

8. 条件结构

If属于条件结构,很简单,不再赘述。

同属于条件结构的还有switch和三元运算符,等我们使用到的时候一并讲解,这里不再赘述。

微信扫一扫,关注最课程,获取每日一练

C#零基础入门03:打老鼠初级的更多相关文章

  1. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  2. 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)

    094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  3. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  4. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  5. 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)

    091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包

    090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  7. 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包

    089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  8. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  9. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

随机推荐

  1. linux convert mp3 to wav and opus to wav

    link :  https://www.cyberciti.biz/faq/convert-mp3-files-to-wav-files-in-linux/ Install mpg321 or mpg ...

  2. linux 时间戳

    一.https://www.cnblogs.com/33debug/p/6632172.html 二.显示前一小时时间 date -d '-1 hour' '+%F-%H-%M-%S'

  3. linux(centos)安装升级ruby

    参考文章:http://www.ruby-lang.org/zh_cn/documentation/installation/ 文章给出了不同平台的多种方法.我的是centos,我选择了一个比较简单的 ...

  4. 使用php mcrypt加密解密

    数字签名:对数据和私钥进行hash运算得到消息摘要,连同消息本身一块发给客户端.数据签名强调客户端接收到的数据是来自特定服务端,服务端具有对数据不可否认性.客户端通过确认此次签名的正确性来判断拿到的消 ...

  5. 使用<c:set>标签配置项目路径

    写在前面的话: 在java项目中,路径的配置是一项最基础也是最必不可少的工作,最初我们配置路径是根据<%=request.getContextPath()%>这个java代码块进行配置的, ...

  6. linux学习笔记-5.用户和组

    1.添加一个tom用户,设置它属于users组,并添加注释信息 分步完成: useradd tom usermod -g users tom usermod -c "hr tom" ...

  7. Jmeter脚本录制方法(一)分别使用Badboy录制和Jmeter自带的代理服务器录制

    Jmeter录制方式分三种,分别是:使用Badboy录制.Jmeter自带的代理服务器录制和手工录制,今天先介绍前两种录制方法. Badboy录制 Badboy是用C++开发的动态应用测试工具, 其拥 ...

  8. Xamarin iOS教程之申请付费开发者账号下载证书

    Xamarin iOS教程之申请付费开发者账号下载证书 Xamarin iOS使用真机测试应用程序 在讲解iOS Simulator时,已经提到了虽然iOS Simulator可以模仿真实的设备,但是 ...

  9. ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge

    ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge Arduino环境与Linux环境的桥梁——Bridge 在第一章中介绍Arduino Yun硬件的时候提到过,它上面有 ...

  10. 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。

    任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 当n=7共14种拆分方法: 7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2+2 ...