- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
飞机游戏.doc
第六章???????????????? 飞机游戏
1.????????? 实现思想
?
飞机游戏,也是一种常见的小游戏。当然,它们的常见并不像扫雷或俄罗斯方块游戏一样的单一,它们是有许多不同的方案的。它们可以有各自的规则,各自的图像(这是当然的),各自的优点和缺点(这是必然的)。
而我们之所以要做这个游戏,是因为这种游戏还是有很多共同的地方,这种游戏对于我们的学习有帮助,这种游戏对于短时间的娱乐还是不错的。
当然,我们的重点是在于学习。
?
游戏的角色:
?
飞机游戏,主角当然是飞机。飞机分成两方:玩者的一方(分为单人和双人,由于前面已经实现了俄罗斯方块游戏和老鼠游戏的双人游戏,这里只是实现游戏的单人版,双人版就作为读者的练习)和计算机的一方。我们称为正方和对方。
正方:具有生命力(本游戏设置为5),有火力(本游戏包括三种:单火力、双火力和强火力),生命力每次被炸毁就减一,而当火力值大于5时,生命力和火力强度同增。而火力,开始是0,表示单火力,之后,每次添加一个火力值就加一。
反方:由计算机按时地、随机地产生飞机,按时地发射子弹,按时地移动子弹的位置。(游戏的实现,往往就是因为要实现计算机的这些按时的“智能”的操作。)
火力:之所以把火力作为一个角色,因为它的存在,是独立的;它的作用又是为正方服务的,它的产生也是我们对程序的专门设置而实现的。我们可以忽略它的存在,同时,由于本游戏的特点(其实也是许多游戏的特点),我们由必须依靠它的存在,它可以给我们生命力和火力。
背景:我把背景做为一个角色,确实有一点不大合理,但是,每个人做事都是有他的原因的。我在这里把它提出来,只是为了强调一下它的作用。之前的一下设置,背景都是静态的,我们只是操作程序的前景位图。而现在,(更多的是读者今后)我们将要实现的是动态的背景,我们必须利用背景的移动来映射飞机的前进飞行。(由于屏幕的限制,这种做法是必然的。)
?
游戏的实现:
?
依然是全屏,而且是更彻底的全屏,或许应该说是真正的全屏。
支持多种分辨率,当然,前面一章后面我们已经讲了一种方案,这里介绍的是另外一种。由于位图的限制,我们不可能总是画那么多的位图,我们也不可能利用放大缩小位图的方法,这样会产生严重的闪烁。那么,我们可以利用留空白的方法,我们制造最基本的位图,宽800,然后,利用获取屏幕大小的函数取得屏幕分辨率的大小,然后设法把位图显示在屏幕的中间。
背景位图的显示,由于我们的背景位图大小是有限制的,高度不可以大于2000(具体数字是2000多一点)。但是,我们要的是连续不断地显示背景,我们又不能只是背景位图显示完了,重新从头显示,这样会产生背景不连续的效果,是不允许的,那么,该怎样实现呢?
?
新建工程6_1,单文档。
?
2.????????? 相关位图
?
位图,作为游戏编程不可少的东东,我们还是先说明一下。
?
背景位图:800*600 IDB_BITMAP1
我方飞机:50*50 IDB_BITMAP2
敌方飞机:50*50 IDB_BITMAP3
我方子弹:50*50 IDB_BITMAP4
对方子弹:50*50 IDB_BITMAP6
炸毁飞机:60*60 IDB_BITMAP5 为了更好显示爆炸效果
火力位图:50*50 IDB_BITMAP7
?
?
3.????????? 变量与函数
?
上一章,我们为了各个角色的需要,建立了三个类。目的是为了利用类来建立对象。这一章,由于我们只有单人版游戏,而敌机又只是在固定位置,所以我们无须建立那么多的类,只是添加一个类就行了。(当然,如果你想实现双人游戏,或许想改进游戏,实现敌机移动的话,最好还是添加新类的好。)
既然是游戏,我们还是添加类名为:CGame
而由于我们只是添加一个新类,我们就必须把所有的变量和函数都添加到这个类里面。如下:
?
//显示信息
void DrawMessage(CDC*pDC,int width,int height);
//火力位图是否出现
void FireOutIf();
//子弹移动
void shotmove();
//敌机发射子弹
void Enemyshot();
//敌机出现
void Enemyplaneout();
//我方射击
void Shot();
//设置透明位图
void TransparentBitmap(HDC hdc, HBITMAP hBitmap,
short xStart, short yStart, short xadd,short yadd,
COLORREF cTransparentColor);
//透明色
COLORREF
文档评论(0)