气球塔防 C语言

分享17级同学大一上学期用C语言实现的气球塔防。分步骤代码、图片音乐素材可从百度网盘下载:

链接:https://pan.baidu.com/s/1tN-ErS7q7SEgibvsZdanQw

提取码:c0ne

一、设计思路

1.1 基本步骤实现

1、搭建游戏基本框架

2、设计游戏画面

3、寻找气球的移动路径,实现气球的移动

4、实现防御塔的放置以及防御塔对气球的攻击

5、增加防御塔数量,实现多个猴塔的放置

6、增加气球波数以及最终BOSS,增强游戏可玩性

7、完善各个功能,例如 游戏说明、制作人员、游戏胜利、游戏失败等

8、优化各个细节,增强游戏的视觉冲击

1.2 代码结构化

将代码结构化,便于代码的查找以及修改。

void instruction()
{
}
void tower()
{
}
void person()
{
}
void menu()
{
}
void success()
{
}
void die()
{
}
void startup()
{
}
void show()
{while (gamestart == 1)//显示菜单{}while (gameover_control == 0){}while (success_control == 0){}BeginBatchDraw();if (Begin != 0 && BeginChange == 1){}else if (BeginChange == 0 && Begin != 0){
}else if (Begin == 0){
}
}
void updateWithoutInput()
{
}
void updateWithInput()
{
}
void gameover()
{
}int main()
{startup();  while (1) {show();  updateWithoutInput(); updateWithInput();  }gameover();
}

在各个板块进行编写,实现各个方面的功能,出现error时也易于上下对比,修改error。

二、游戏介绍以及各功能介绍

我们借鉴了《气球塔防》这款游戏,采用其中的素材图片以及特效音乐。首先开始菜单界面有五个选项:开始、制作人员、游戏说明、防御塔以及退出游戏。点击开始,则会进一步出现游戏开始页面,点击开始游戏,则进行游戏。点击制作人员,出现小组成员的信息。点击游戏说明,出现游戏规则的介绍以及一些小技巧。点击防御塔,出现各个防御塔的信息。

下面具体介绍各部分代码的功能:

void instruction(){} 此函数为游戏说明函数,用于点击游戏说明后,输出说明界面。

void tower(){} 此函数为防御塔说明函数,用于点击防御塔后,输出防御塔介绍界面。

void person(){} 此函数为人员介绍函数,用于点击制作人员后,输出制作人员介绍界面,

void menu(){} 此函数为开始菜单函数,输出一开始的菜单界面。

void success(){} 此函数为游戏胜利函数

void die(){}此函数为游戏失败函数

void startup(){}此函数为数据的初始化

三、各个步骤的实现重点和难点

首先猴塔的选择放置板块,开始的初步想法是每次点击右侧边框里同一位置的猴塔时可以实现同意猴塔的重复放置,后来发现,每次点击同一位置判定时,上一个被放下的猴塔会消失,后来我决定加入一个名为Houta_1_IsUnchose的标记,来记录猴塔是否已被选择,但这样一来我们每个猴塔只能放置一次,只好多做几中猴塔,但到游戏的后期,发现这样的限制大大降低了游戏的可玩性,但思索良久,还是无法解决同意猴塔的多个放置,最终经过小组讨论,决定去掉Houta_1_IsUnchose的单次放置的限制,这样一来,场上只能放置一种猴塔,但猴塔的位置可以被改变,同时,我们修改了每波气球的出现条件,只有当上一波气球死亡时,下一波气球才会出现,这样一来游戏就平衡了许多。气球的音效加入前期也遇到了一个很大的问题,MP3的音乐格式的重复快速播放,会导致游戏的卡顿,在网上查询后,发现使用wav的格式会解决这个问题,同时将原来的播放音乐函数mciSendString();改为PlaySound();的函数,但这样之后我们又发现原来长1s的音乐,就显得很长了,无法满足我们的要求,后来通过对音乐的剪辑,将音乐截为120ms,这样就实现了气球的快速爆炸音效。气球的攻击判定一开始时我们还是十分迷茫的,首先先实现了进入半径持续扣血,后来又实现了优先攻击第一个气球,就在我们以为问题解决时,后来我们突然发现前期对于气球的赋予生命太少,所以没有发现,当第一个气球不死时,后面的气球不仅不会死,甚至都不会扣血,通过几天思考,我最终想出了解决方案,即通过判定一个气球的上一个气球是否死亡,且在防御塔半径外,这时,才攻击满足这样条件的气球,实现了气球的攻击判定效果。最后还有部分bug实在无法解决,只能作罢。

四、课程设计过程中的体会与总结

在游戏的制作初期感觉没有什么困难,制作起来很简单。但是随着游戏的深入,尤其是在实现多波气球以及多个防御塔的放置以及攻击,还有特效的增加,经常会有bug出现,游戏的制作并没有我们想象的那么简单,但是在我们小组的共同努力下,攻克了一个个难题,自己的小游戏也越来越精良,越来越好。这个小游戏是一个比较庞大的工程,但是在我们的分工合作之下,每个人负责一部分,再进行加和,大大提高了效率,让我体会到了团队合作的重要性以及高效性,在游戏做完的那一个,看着自己做出来的游戏非常棒的运行,心中非常激动,非常有成就感。虽然游戏还不是特别精美,有一些特效做的也不是特别好看,偶尔还会有小bug出现,但是这些都是我终生难忘的一次经历,一次体会。同时从此次游戏设计之中,我也感受到代码规范的重要性,这样代码才会有条理,不会乱。如果没有一个很好的习惯,当代码数量多起来之后,代码会显的非常乱,所以以后我要养成规范的代码编写习惯。

2017级C语言大作业 - 气球塔防相关推荐

  1. 2017级C语言大作业 - 奇怪的大冒险

    奇怪的大冒险 C语言作业 分享17级同学大一上学期用C语言实现的奇怪的大冒险.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1nR-Sa ...

  2. 2017级C语言大作业 - 见缝插针

    见缝插针 C语言作业 分享17级同学大一上学期用C语言实现的见缝插针.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1dblHmOD2z ...

  3. 2017级C语言大作业 - 小小冒险岛

    小小冒险岛 C语言作业 分享17级同学大一上学期用C语言实现的小小冒险岛.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1MRNnZAM ...

  4. 2017级C语言大作业 - 水果忍者

    水果忍者 C语言作业 分享17级同学大一上学期用C语言实现的水果忍者.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1i-e_MVChl ...

  5. 2017级C语言大作业 - 元气骑士

    元气骑士 C语言作业 分享17级同学大一上学期用C语言实现的元气骑士.凉屋工作室制作的元气骑士游戏是一款像素风射击游戏,其新颖的操作方式吸引了众多玩家,随时"拿得起,放得下"的操作 ...

  6. 2017级C语言大作业 - 合金弹头

    合金弹头 C语言作业 分享17级同学大一上学期用C语言实现的合金弹头.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1cm01uEDNo ...

  7. 2017级C语言大作业 - 密室逃生

    密室逃生 C语言 分享17级同学大一上学期用C语言实现的密室逃生.分步骤代码.图片音乐素材可从百度网盘下载: 链接:https://pan.baidu.com/s/1Se8aPaQYa1xy93q3d ...

  8. 2020级C语言大作业 - 王国保卫战

    王国保卫战 C语言大作业 分享20级同学大一上学期用C语言(及少量C++)实现的王国保卫战.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https: ...

  9. 2010C语言添加背景图片_2019级C语言大作业 - 火柴人试炼之地

    C语言大作业 - 火柴人试炼之地https://www.zhihu.com/video/1200491618794606592 分享19级同学大一上学期用C语言实现的火柴人试炼之地.分步骤代码.图片音 ...

最新文章

  1. Nginx 缓存命中率
  2. rhel系统启动过程_Linux 的启动流程
  3. linux无法挂载移动硬盘6,FC6下挂载NTFS移动硬盘,无法读取
  4. 百度咋做长文本去重(一分钟系列)--转
  5. Codeforces 1196A Three Piles of Candies
  6. html缓存在本地缓存,HTML5 本地缓存 window.localStorage
  7. Unity(四)IocContainer 封装类库
  8. oracle数据库建表视频,Oracle数据库的创建表全
  9. 新功能:阿里云负载均衡SLB支持HTTP访问强制跳转HTTPS
  10. Redux 进阶 - react 全家桶学习笔记(二)
  11. 面试精讲之面试考点及大厂真题 - 分布式专栏 21 限流不能乱用-系统限流最佳实践
  12. 关于React Router v4的虚张声势指南
  13. sitescope 监控mysql_LoadRunner通过SiteScope监控MySQL的性能
  14. linux文件替换命令sed使用
  15. 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
  16. 一种支持多种流媒体协议的播放内核
  17. 关于ColorPicker颜色拾取器的使用方法
  18. 微信小程序之数据交互
  19. 威锋VL820是USB 3.1 2代集线器控制器
  20. java国内外详情研究动态,国内外研究现状分析及文献综述.doc

热门文章

  1. 【CVPR 2019】Strong-Weak Distribution Alignment for Adaptive Object Detection
  2. Python学习笔记——如何获得数值类型的最大值和最小值(表示范围)
  3. eclipse抽取一段代码作为函数的方法(Extract Method)
  4. masaic 数据增强代码
  5. win10 Python开发环境搭建 PyCharm IDE安装
  6. Python中的list/tuple/dict/set数据类型详解
  7. oracle中对排序的总结(按照拼音、部首、笔画排序功能 )
  8. 【xxl-job】轻松实现分布式定时任务demo实例
  9. Mac NVM 配置
  10. Apache服务器 403 Forbidden的几种错误原因小结!