基于VC++的WIN32 API界面编程实现的百战天虫小游戏

Theonly

发布日期: 2018-10-31 17:28:34 浏览量: 1537
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

1 游戏介绍

本游戏是建立在百战天虫游戏框架下的,具有完全不同的游戏背景的一款回合制对战游戏。游戏设计者受到口袋妖怪,以及近期上映的电影《神奇动物在哪里》的启发,设定了“收服精灵”的游戏背景。本游戏共分为两个阵营,HERO阵营,以及WIZARD(精灵)阵营。HERO阵营的目标为阻止精灵继续逍遥法外,但是为了保护珍稀精灵,HERO需要尽量避免杀死精灵,并且收服精灵。WIZARD阵营的目标为杀死HERO阵营中每一个英雄,防止他们继续追捕自己。

2 功能说明

  • 人物移动:W键人物跳起、AD键分别控制人物左右移动

  • 发射武器:鼠标所处的位置为发射方向,按下Q键为蓄力,松开Q键为发射武器

  • 武器种类:武器共分两种,第一种为炮弹,在人物周围一定范围内爆开会对人物造成一定程度的杀伤;第二种为精灵球,仅限HERO阵营人物使用,当精灵的生命值低于一定的值的时候,精灵球在精灵身边爆开的时候会成功收服精灵

  • 画面移动:按下左右方向键可以平滑的移动画面

3 流程图

4 自评表

5 遇到的问题和解决方案

  • 问题一:由于碰撞算法写的比较简单粗暴,所以在通过波浪形地形的时候会出现有一部分人物被挡在地形之下的情况。

    解决方法:采用比较瘦小的人物,使得人物的落脚面积比较小,这样上述问题可以得到缓解。

  • 问题二:随机地形算法是比较难写的,一开始写出来就是一个简单的正弦函数

    解决方法:还是以正弦函数为基础,对正弦函数的三个参量(周期,振幅,Y方向的偏移量)进行随机赋值,每一个周期更换一次,这样可以有效地生成随机地形。

  • 问题三:画面平滑移动的功能,原来只能直接直接跳转,而不能平滑移动

    解决方法:设定一个状态参量,当画面移动时,其他一切活动停止刷新,每次timeupdate画面移动一个小量,最后移动到预期位置的时候重新开始其他活动的刷新。

  • 问题四:加上背景音乐,看了网上很多的MCI编程的方法,但是还是不太懂

    解决方法:抱大腿(最后发现原来只要一两行代码就可以了QAQ)。

6 心得体会

其实刚开始写这个大作业的时候,还是有点小看了这个游戏。前前后后也写了两个多星期,有很多的事情是一开始没有想到的。比如画面平滑移动,刚开始的时候画面大小是限制住的,没有考虑到要画面移动的问题,所以一开始写流程的时候没有考虑到要加上一些参数来控制更加细致的游戏流程,所以后来加上画面平滑移动的时候就特别难受,也出了很多bug,调了很久。所以以后开始写这种工程的时候还是要在一开始考虑好要写哪些功能,而不是写一点想一点。

还有一点,命名空间的统一是很重要的,一开始我还是按照原来给的框架中的命名规则来给新的变量命名,但是后来感觉太麻烦了,就使用了一些比较简单的命名方法,第一天写第二天就忘,还得重新看一遍程序才能弄明白当初自己的命名方法,所以以后在这种工程中就需要一套严格的命名空间。

还有,良好的代码风格也是很重要的,有时候为了图方便,套循环、套判断的时候就有些层次没有缩进,这就导致了代码维护的时候的巨大的麻烦,貌似VS2015可以自动将代码规范化,可以考虑使用一下。

最后,通过这次大作业,我感受到了一个工程的框架的重要性,虽然说助教给的框架一开始还是不太能看得懂,但是写到后来,发现这种框架是非常有利于工程的构建,(但是还是感觉global.cpp命名为global还是有点不太合理…)。

7 游戏演示

初始画面

游戏说明

游戏关卡选择

游戏关卡1

游戏关卡2

游戏关卡3

游戏关卡4

游戏结束

上传的附件 cloud_download 基于VC++的WIN32 API界面编程实现的百战天虫小游戏.7z ( 33.56mb, 75次下载 )
error_outline 下载需要12点积分

发送私信

班主任最经典的一句话;整栋楼里就咱们班最吵

4
文章数
6
评论数
最近文章
eject