C#基础视频教程7.4 如何编写简单游戏
接下来我们实现整个的游戏流程,当点击开始游戏,则需要三个事情开始运行
1 小鸟初始化并往下掉(当然还是可以用按钮让他飞一下)
2 每隔一定时间从左侧产生一个管子(宽度和高度随机,产生周期2000ms左右)
3 每隔一定时间检测是否鸟撞到了管子(这个时间周期要50ms左右,也可以更大或者更小)
跟上一节不同的地方在于,小鸟是唯一的,而管子不唯一。我们之前只是判断一个小鸟和一个管子是否有碰撞,随着管子的不断生成,要检测小鸟和每个管子是否有碰撞。所以我们把生成管子放在了GameSense的一个list里面,list存储的是GameRectange的类的实例,在另一个判断的线程,就需要遍历list的每一个元素做判断,并且只要有任意一个撞击了,就认为撞击了
我们前面用了很多类都是静态的,这里管子的类却不能是静态的,因为每一个管子大小都是不一样的,每隔一定时间都会new一个出来。可想而知,如果我们要做成两只鸟双人游戏,鸟也不能做成静态的(所以读者在考虑是否有必要做成静态的类,方法的时候,只要想清楚这个类是否会需要多个实例,如果需要则不能是静态的),本例中只有场景是唯一的,裁判是唯一的,所以可以用静态的。
为了提高游戏的体验,每产生一个管子,没有撞上去,就可以给用户增加一点分数(我们在屏幕用了绘制文字的方法,这比用控件更加合理,至少不会有控件自带的背景色干扰)。在每个子线程中我们都把延时Sleep操作放到了最后,读者可以测试一下如果放到前面会有什么问题(多次的弹窗,或者游戏结束了还产生多余的一个管子)
把游戏开始,游戏结束,游戏清空场景也单独做成方法,注意游戏清空场景并不等同于游戏结束。结束的时候要弹窗告诉用户他挂了,但是此时还不能马上清空场景(画面要显示他撞在哪里了),点击确定按钮之后才去执行清空场景(原来的list保存的管子都扔掉,小鸟也回到初始位置等等,很多布尔值都要复位)
已经可以测试完整的运行了,点击小鸟飞行,绕过障碍物,则得分,撞上去就提示游戏结束,下一节我们继续完善
更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123
我的在线论坛:
http://csrobot.gz01.bdysite.com/
问题交流:
QQ:910358960
C#基础视频教程7.4 如何编写简单游戏的更多相关文章
- C#基础视频教程7.5 如何编写简单游戏
有一些BUG需要处理,比如小鸟太高或者太低都应该报错(不然直接掉到窗口下面去了),这个方法跟前面的HitTest应该独立开来,而不是掺和在一起 测试确实可以检测是否超过边界(如果要非常精确,那么就 ...
- C#基础视频教程7.3 如何编写简单游戏
前面我们大致实现了鸟的一圈轨迹(其实如果你不做这个,就用两个矩形块的碰撞检测代替也可以),跟所有前面的教程一样,草稿打完了就要设计封装成一个类.至少到目前为止我们已经知道了鸟的属性和方法,先不要管方法 ...
- C#基础视频教程7.2 如何编写简单游戏
前面一小节我们实现了简单的碰撞检测,但是实际上游戏的对象并不是一个标准的矩形(小鸟是一个不规则的物体,其实碰撞的管道也是不规则物体),所以如果真的要做的比较完美,我们自己要写一个方法,能够导入一个图像 ...
- C#基础视频教程7.1 如何编写简单游戏
要做一个FlappyBird,最核心的功能是创建几个区块,如果发生碰撞则游戏结束(小鸟撞到管子上,或者小鸟到地上),至于随机生成一些管子,小鸟如何跳跃,最后如何统计分数,都不难想通要怎么做. 首先 ...
- C#基础视频教程5.1 如何编写简单的超级热键
我们上一节介绍了编写简单计算器,实际上也是出于实用角度(这个计算器只要你肯改,肯定能做的比微软自带的计算器好用).这一节介绍做简单的超级热键(所谓的超级热键是指自定义快捷键的功能) 超级热键的最关键一 ...
- C#基础视频教程5.3 如何编写简单的超级热键
跟前面一章讲解计算器一样,到最后一小节,我们总是要把代码规整好,让整个程序显得非常简洁,先做个文件夹把我们自定义的类库都放进去 然后我们开始整理Form1里面的代码,为了实现超级热键的功能,我们应 ...
- C#基础视频教程5.2 如何编写简单的超级热键
我们前面已经理解了如何使用官方的代码实现鼠标键盘的监控,其实还差一点,因为他的代码只能捕捉单个的按键,而其实我们要的是组合键.什么是组合键呢?比如我想定义同时按下WIN+C是去执行屏幕截图.这只要理解 ...
- C#基础视频教程4.3 如何编写简单的计算器
我们接着往下改,为了让这个计算器更加实用,我们要像官方的计算器一样可以接着计算(你算出来一笔数据之后,可以接着累加累减,我们暂时不考虑加括号,优先级之类的,因为绝大部分情况下我们打开计算器就是为了进行 ...
- C#基础视频教程4.2 如何编写简单的计算器
用过VB6或者早期代码的人都应该能感觉到,C#目前也没看出来有什么特别之处,所谓的面向对象也没有什么体现.所以我们需要在原有基础上重写一份代码,然后比较两种做法的优缺点.我们在项目上右击添加一个Fun ...
随机推荐
- javascript中Date对象的应用
前面的话 简易日历作为javascript中Date对象的常见应用,用途较广泛.本文将详细说明简易日历的实现思路 效果演示 HTML说明 使用type=number的两个input分别作为年和月的输入 ...
- hdu 1114 dp动规 Piggy-Bank
Piggy-Bank Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- [BZOJ4554][TJOI2016&&HEOI2016]游戏(匈牙利)
4554: [Tjoi2016&Heoi2016]游戏 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 857 Solved: 506[Sub ...
- python开发_pprint()
python中的pprint.pprint(),类似于print() 下面是我做的demo: #python pprint '''python API中提供的Sample''' import json ...
- ROS知识(1)----ROS Jade安装
ROS入门难,进去之后会是很简单,这是很多人的经验.但是今天安装ROS就吃了闭门羹,安装成功后,回顾发现,关键是操作系统Ubantu14.04没有安装好,一些系统包没有及时更新导致的.这里总结下ROS ...
- linux基础命令学习(十二)yum命令
主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题 yum list|more 列出所有包文件,可搭配grep查 ...
- NativeXml: A native Delphi XML parser and writer
http://www.simdesign.nl/xml.html This software component contains a small-footprint Object Pascal (D ...
- 再见了,DM
在DM奋斗了20个月之后,我终于有机会DM说再见.这我不是我第一次和DM说再见,因此我也不确定这次的再见是再也不见,还是再次见面.但有一点可以确定的是,在接下来相当长的一段时间内,我是没有机会 ...
- sqlserver获取所有表和表字段
SELECT [number]=a.colorder, [column] =a.name, [datatype]=b.name, [length]=COLUMNPROPERTY(a.id,a.name ...
- (转)媒体格式分析之flv -- 基于FFMPEG
本来是应该先写一个媒体文件格式的简单讲解的,还没来得及写,以后再写.今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv. FLV 是FLASH V ...