-
阶段一:这是实验的起始阶段,主要任务是创建游戏的基础设置,包括地图和双方单位的创建,以及实现简单的交战机制。这个阶段不需要提交和验收。
-
阶段二:在这个阶段,你需要支持地图和存档的导入导出功能,并引入词缀机制来增加游戏的趣味性。这个阶段同样不需要提交,但会在第12周进行进度检查,以确保项目按计划进行,这个阶段的检查不计入最终分数。
-
阶段三:到这个阶段,你需要加入图形用户界面(GUI),如果你在前两个阶段没有实现的话。此外,还需要展示单位的攻击和受伤效果。这个阶段的成果需要在第14周完成提交,并进行验收,这个阶段的工作会计算分数。
-
阶段四:这是实验的最后阶段,你可以自由发挥或者根据课程手册中的Extension部分进行拓展。这个阶段的成果需要在第16周完成提交并验收,也会计算分数。由于临近考试周,你需要自行考虑如何合理安排时间。
- 有很多同学的课程设计参考了pvz的内容,比如设计直线路径、敌方的攻击方式等,需要注意的是,由于pvz是开源的,参考已有项目的课程设计的要求会高一些,需要额外实现 两个 扩展功能(体现工作量)。
- 抄袭是被严厉禁止的。游戏必须是你自己从第一行代码开始写成的,符合面向对象和泛型程序设计范式的 C++程序。
- 推荐使用第三方的C++图形库来完成图形的绘制,键盘鼠标事件的捕获和处理等内容,这样可以集中精力设计和实现游戏的架构。
- 共分四个阶段,一二阶段不要求有图形界面,第三阶段才要求完成图形界面。第四阶段则是完成前面阶段的拓展功能,或者你当然也可以自己提出并实现新的拓展功能,我们会根据难度进行评分。每阶段依然是两周,我们会在第三阶段验收前面所有基础功能,在第四阶段验收拓展功能。
- 我们同样也提供了实现图形化界面的一些参考资料以及本项目基于Qt的初始界面代码,供同学们参考。但是本项目的GUI开发并不限制于Qt。GUI可以是使用Qt之类第三方库实现的图形窗口,也可以是使用ncurses之类库实现的终端窗口,简而言之就是任意发挥,界面是否漂亮/酷炫不算在基础功能中。但这里我们需要强调,你实现的项目应该有C/C++代码文件,使用完全不涉及C/C++的引擎并不符合本课程要求。
- 本手册中,Question内容是我们对你们可能问题的预演和回答。Note内容是对我们认为可以自由发挥部分的进一步说明,仅供参考。Extension内容是第四阶段才要求的拓展功能。
地图是游戏的舞台。
- 地图在逻辑上是一个 m × n 的矩形,存在边界。每个 1 × 1 的矩形是一个格子。格子可以共用,即多个单位可以处于同一个格子中。
- 地图上存在若干条有向的路径。
- 一条路径是格子的一个有穷序列,序列中相邻的两个格子是上下左右邻接的,并且序列中不存在重复的格子。
- 敌方的单位将从路径的起始格子出现,按照序列,移动到路径的结束格子。
- 游戏中存在两个阵营,一个由玩家操控,一个由程序操控,分别称为我方和敌方。
- 每个阵营都有自己的胜利目标:
- 我方的胜利目标是在有限次攻击中阻止敌方穿过地图。
- 敌方的胜利目标是在有限次攻击之内穿过地图。
- 每个阵营都可以产生具有一定功能的单位。
- 每个单位都有一定的生命值,如果生命值过低,单位将被破坏。
- 每个单位都有基础属性。
在该阶段完成以下内容:
- 一张地图,包含起点终点、路径、以及其他格子。注意我方远程塔对格子的布置要求。
- 我方的(至少一个)近战塔和(至少一个)远程塔,以及部署操作。
- 敌方(至少一个)单位的初始化以及移动。(整个项目除了词缀机制外,只要求这一种敌人,当然,如果你想另外实现其他的,完全可以)
- 设定生命值、攻击力等,不要求显示这些,但要有基础的敌我双方对战过程。
- 实现近战塔、远程塔和敌方单位时,必须使用C++中的面向对象编程(即类与继承)。
在该阶段完成以下内容:
- 不同类型的格子和地图的导入导出
- 存档的导入与导出
- 基础的我方词缀(显然,词缀的安装/卸下操作也是其中一部分)
- 基础的敌方词缀
在该阶段完成以下内容:
- 图形界面显示前一阶段的各种单位的部署以及单位的移动。
- 展示单位的攻击/受伤效果。
回顾: 一个“有趣”的塔防游戏已经完成了。为了让它更加有趣,此阶段是扩展阶段,你可以单纯按照我们提供的Extension内容来补充,或者实现任何你觉得很酷的想法。
- 每一阶段可选的Extension
- 更多自由发挥:
- 可以为游戏添加适当的音效
- 可以设计酷炫的动画来提升用户体验
- 任何你觉得有意义的都可以
- 加个故事背景算拓展吗?
- 做成图鉴之类的,只要有代码量就算,只加了张图不算。
- 可以在词缀外增加技能机制吗?
- 可以,算拓展。
- 基础功能(前三阶段规定必须完成的内容):70%
- 注意阶段三里的基础功能只占5%,这是为了照顾能力有限的同学,毕竟课程的主旨还是在代码设计上,花费太多功夫在GUI上略有不妥。
- 选做内容:20%
- 每个选做内容的难度不同,会根据实际情况给相应的分数。
- 代码风格:10%
- 评分标准包括:
- 是否完成了所有规定动作
- 是否有一个好用的(而不关心好看的)界面
- 是否实现了有趣的(而不关心凑数的)功能
- 代码是否符合面向对象和泛型程序设计范式的要求。