坦克动荡 C语言作业

分享18级同学大一上学期用C语言实现的坦克动荡。分步骤代码、图片音乐素材、可执行程序可从百度网盘下载:

链接:https://pan.baidu.com/s/17_j-jxe8B542hWPrZuQTwA

提取码:0shb

一、设计思路

坦克动荡这个游戏与传统的坦克大战游戏不同,坦克动荡是通过子弹的碰墙之后多次反弹实现击中敌方坦克,并取得胜利的一款游戏。游戏的性质决定了地图对这个游戏的进行非常重要,所以制作这个游戏的第一步就是设计出一个或多个地图,这样才能增加游戏的趣味性。在设计出不同的地图后下一步便是实现坦克的行走与转向,以及碰到障碍物时的判定。随后要实现的便是子弹的发射以及碰墙之后的反弹。反弹实现之后,要攻克的就是子弹击中坦克时的死亡判定这个问题,当这些功能都完善之后,整个游戏就基本完成了,最后要做的就是整个游戏的优化,比如说音效,爆炸图片的添加等等细节上的完善。这些都完成后,坦克动荡这款游戏就彻底完成了。

二、功能描述

2.1 游戏整体功能描述

进入游戏时,玩家可以选择新游戏或游戏存档来进入玩家之间的对战,游戏有四个地图,玩家可以根据自身的喜好来选择游戏地图。游戏通过坦克的移动,反射子弹,以及子弹的反弹来实现摧毁敌方坦克并取得胜利的最终目的。

2.2 加载及显示地图

通过定义一个大的二维数组(比所有地图都要大)来储存地图信息,然后通过easy_x绘图功能,绘制出相应的地图(绘制出地图后可以选择自己将相应的地图截图,每次循环引用设计好的地图的图片加快游戏的运行)

2.3 两个坦克及子弹的相应功能实现

1.实现坦克的转向,前进后退以及坦克碰墙的判定。

2.并实现子弹的发射及发射子弹反弹。

3.坦克被子弹击中后的死亡判定及被击中后返回初始位置,每个坦克3条命,三条命打完后显示获胜方,并返回主菜单

2.4 初始及暂停菜单

初始菜单中可以选择游戏帮助,查看具体的游戏规则。玩家可在菜单中选择自己想进行的地图,或者读取游戏存档,也可以选择退出游戏结束游戏运行。

在游戏过程中也可以打开暂停菜单,进行相关的一些选择。

2.5 添加素材,完善细节

在相应界面添加背景图片和游戏中的一些音效以完善游戏细节,提高游戏体验。

三、各个部分的重点及难点

3.1 地图的加载与显示

地图是整个游戏进行的一个非常重要的部分,所以要对这个部分十分重视,最好先在纸上将地图画下来然后再用对应的二维数组表示出来(障碍物为1,空白为0),然后进行判断,如果是障碍物则打印一个方块,但是如果每次运行都要进行一次这个操作的话会严重拖慢程序运行,这时可以选择将地图的图片截图下来方便下次使用,或者可以选择缩小整个二维数组(将原来的5个单位化一个)。

因为有多个地图,所以二维数组应该设计的比所有地图都要大。而这样操作后控制地图的初始位置就成了另一个问题,可以定义一个变量为初始位置,然后每个地图的初始显示位置都根据地图本身大小而设置不同,再以这个初始位置为起点,在画布中显示地图,坦克和子弹。

3.2 坦克的移动旋转及撞墙判定

首先坦克的初始位置要合理,不能直接卡在墙体里面。在坦克的移动中使用可支持多键同时输入的方式使其可在移动过程中旋转,同时也支持多个玩家同时输入。撞墙判断编写两个函数,在输入坦克移动指令时以坦克的上下左右四道边界为对象分别判断该坦克是否在当前位置以当前角度进行前进或者后退。

坦克在空白处的移动应该是没有问题,这里的主要难点是碰到障碍物之后的判定该如何实现,大体就是对上下左右四个方向都进行判定,看看如果执行了前进或后退操作后是否会碰到墙壁,如果会碰到障碍物则不能移动,如果没有障碍物则可以前进,这个方法要求你了解坦克的实际尺寸(长度宽度),以坦克的四条边为对象判断是否将会撞到墙,当然这种判定方法还是不够精细的,这个判定实际判定的是这个图片的四条边,但是坦克旋转后,四条边位置也会随之发生相应角度的变化。

坦克的旋转上如果要进行360度的旋转,可以选择easy_x中的旋转函数,但是为了游戏的简单,我们将坦克的移动方向控制为8个,然后定义一个PI,用三角函数计算横坐标和纵坐标上的速度就可以解决向对应方向移动的问题。

3.3 子弹的发射及反弹

子弹的定义最好要用到结构体,因为在游戏中子弹要多次反弹,而且每次反弹之后速度的方向会发生改变,这时如果不用结构体,子弹的相关信息就会特别复杂。声明一个储存子弹相关信息的结构体,再定义一个该类型的二维数组表示双方的若干颗子弹。子弹的发射要注意这颗子弹的初始位置及初始两个方向上的速度。子弹的反弹注意限制子弹两个方向上的速度大小(小于2)以防止在判断是否击墙时直接“跃过”墙体。同时添加子弹在反弹若干次之后自动消失的功能。

3.4 子弹击中坦克,血量相关功能

子弹是否击中坦克采用计算每一颗子弹与坦克中心点的距离是否小于某个值的方法进行判定。坦克中弹后可以选择通过重新定义让所有子弹消失,这样就不会出现刚复活就被打死的情况。同时在游戏界面中显示双方的血量。生命值的显示我们选择使用文字显示,这样在生命变化时容易发生文字的重叠,可以放入一张背景图片,将上次显示的文字覆盖掉,就不会出现文字的重叠了。在一方血量为0(死亡时)结束这场游戏并返回主菜单界面。

3.5 存读档功能和用户菜单

这一部分不做过多的讲解,这一部分主要难点就是将感应鼠标点击的区域控制好,需要注意各个可点击文字选项边框在画布中的位置坐标以及各种鼠标指令之间的逻辑关系。

三、体会与总结

在开发坦克动荡游戏的过程中,首先我们体验到了怎样运用所学的C语言知识来一步步实现简单小游戏的开发,怎样用简单的知识一步步实现一个个复杂功能的乐趣。在实际开发过程中遇到一些棘手的问题我们也通过上网查找资料,与老师同学交流等方式基本解决。我们也认识到了团队合作的重要性,在一个比较大的工作中,合理分工,并能互相交流调配是十分重要的,能极大的提高工作效率和工作质量,当然团队中的每个人都应以积极的态度参与开发的工作。

总之,在这次的项目设计中,虽然过程中有些小瑕疵,但整体来说我们组的工作和成果还是基本达到预期要求的。这次项目设计作业让我们受益匪浅。

2018级C语言大作业 - 坦克动荡相关推荐

  1. 2018级C语言大作业 - 祖玛

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

  2. 2018级C语言大作业 - 黄金矿工

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

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

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

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

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

  5. 2020级C语言大作业 - 丛林大作战

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

  6. 2019级C语言大作业 - 火柴人试炼之地

    火柴人试炼之地 C语言大作业 分享19级同学大一上学期用C语言实现的火柴人试炼之地.分步骤代码.图片音乐素材.可执行程序可以从百度网盘下载: 链接:https://pan.baidu.com/s/1X ...

  7. java泡泡龙开源_2019级C语言大作业 - 泡泡龙

    分享19级同学大一上学期用C语言实现的泡泡龙.分步骤代码.可执行程序可从百度网盘下载: 提取码:jcuc C语言大作业 - 泡泡龙https://www.zhihu.com/video/1207418 ...

  8. 2020级C语言大作业 - 三国杀

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

  9. c语言输出数字漏斗图形_2019级C语言大作业 - 十步万度

    分享19级同学大一上学期用C语言实现的十步万度,可从码云下载: 期末作业/十步万度​gitee.com C语言大作业 - 十步万度https://www.zhihu.com/video/1215683 ...

最新文章

  1. JAVA——prepareStatement中SQL语句中占位符(?)替换表名和字段名
  2. 《编译原理》第三章知识点
  3. symantec 操作 重叠vo_无关收购 谈谈赛门铁克的产品策略思路
  4. dqn系列梳理_系列论文阅读——DQN及其改进
  5. STM32之FSMC-SRAM/NOR原理
  6. compose yaml规则
  7. Java实现斐波那契数列的两种方法
  8. 【协同任务】基于matlab人工蜂群算法多无人机作业路径规划【含Matlab源码 1235期】
  9. 如何计算一路话音消耗的带宽
  10. QT正则表达式介绍与使用
  11. nginx常用配置集锦(持续更新中。。。)
  12. python键盘控制_python如何直接控制鼠标键盘
  13. 计算机网络基础 试题 doc,计算机网络基础知识试题.doc
  14. Python pandas.DataFrame.tz_localize函数方法的使用
  15. 易语言传文本到c 崩溃,win7系统易语言打开支持库配置就崩溃的解决方法
  16. 什么是SOLID原则(第1部分)
  17. JAVA设计模式之责任链模式
  18. 皮边油消泡剂消除泡沫另一视角曝光
  19. 一条SQL语句完成对一列关键词的匹配
  20. thinkphp设计模式讲解

热门文章

  1. algorithm头文件下的reverse()
  2. 【已解决】请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记
  3. [转]如何写出让同事无法维护的代码?
  4. Python实现决策树
  5. 运算符重载——函数调用运算符重载
  6. ASP.net用法系列:如何从基类调用LINQ/EF类的属性
  7. 【洛谷】【堆+贪心】P1484 种树
  8. python包管理(pip, 源码)
  9. Oracle数据库学习(二)
  10. PlayMaker 不支持过渡条件