C#零基础入门03:打老鼠初级
一:在源码管理器中打开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:打老鼠初级的更多相关文章
- # 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封装 ...
- 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封装 ...
- 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封装 ...
- 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封装 ...
- 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封装 ...
- 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封装 ...
- 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封装 ...
- 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
随机推荐
- 最小二乘法 及python 实现
参考 最小二乘法小结 机器学习:Python 中如何使用最小二乘法 什么是” 最小二乘法” 呢 定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳 ...
- 【LOJ】 #2547. 「JSOI2018」防御网络
题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为\(a\)和\(b\) 那么这条边被统计的方案数是\((2^a - 1)(2^b - 1)\) 如果是一个环的话,我们枚举环上至少有\(N ...
- 040 DataFrame中的write与read编程
一:SparkSQL支持的外部数据源 1.支持情况 2.External LIbraries 不是内嵌的,看起来不支持. 但是现在已经有很多开源插件,可以进行支持. 3.参考材料 · 支持的格式:ht ...
- Python装饰器进阶
装饰器进阶 现在,我们已经明白了装饰器的原理.接下来,我们还有很多事情需要搞清楚.比如:装饰带参数的函数.多个装饰器同时装饰一个函数.带参数的装饰器和类装饰器. 装饰带参数函数 def foo(fun ...
- django 项目运行时static静态文件不能加载问题处理
一.首先检查网页中的加载路径是否正确,如果和文件所在路径不一致,就把html改下路径 二.加载路径和文件实际路径一致,看下配置文件: STATIC_URL = '/static/'STATIC_ROO ...
- Linux下多节点SSH无密码互联实现
需求:有3个主机192.168.0.191.192.168.0.192.192.168.0.193,需要实现无密码ssh互联访问 我使用的是root用户进行操作的: 1.每个节点分别检查是否安装ope ...
- 使用 IntraWeb (13) - 基本控件之 TIWLabel、TIWLink、TIWURL、TIWURLWindow
TIWLabel // TIWLink //内部链接 TIWURL //外部链接 TIWURLWindow //页内框架, 就是 <iframe></iframe> TIWLa ...
- 用 consul + consul-template + registrator + nginx 打造真正可动态扩展的服务架构
https://mp.weixin.qq.com/s?src=3×tamp=1503654544&ver=1&signature=UcJdgd4vgt*3AR ...
- 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接(转)
前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html.个 ...
- Calculate CAN bit timing parameters -- STM32
Calculate CAN bit timing parameters Calculate CAN bit timing parameters typedef struct { //char name ...