基于C语言的坦克大战

时间:2022-10-24 02:03:09

基于C语言的坦克大战

摘 要:游戏是人类日常生活不可或缺的元素,游戏的方式随着时代的变迁也在改变。在信息时代,以计算机为载体的游戏成为主流,特别是当今生活节奏加快的今天,生活和工作压力常常使人焦虑不安,而游戏能使人精神放松,舒缓压力。

关键词:C语言;游戏;坦克大战

DOI:10.16640/ki.37-1222/t.2017.08.114

1 技术简介

目前主流的语言是Java、C++等等,这两门语言都是高级Z言的一种。是可以撰写跨平台应用程序的面向对象的程序设计语言。Java语言具有很长丰富的语法特征,如模块和类模块,是一种解释型语言,他不会生成机器码,所以移植性特别好。但高级语言存在体积庞大的特点,不适合对空间严格要求的场合。

C语言是一种历史悠久的计算机语言,同时使用范围广,它的出现就是解决了汇编语言晦涩难记的弊端,它既具有高级语言的特征又具有基层语言的功能,同时跨平台性也丝毫不比大型语言差。C语言的指针更可以灵活操作内存空间,而高级语言则将其封装起来,使用起来限制太多,同时这也是C语言的缺点所在

2 需求分析

需求分析即是根据用户的要求来确定软件的。分配软件元素,是软件定义时期的最后一个阶段,它的基本任务是确定系统必须做什么,是对要做的系统确定一个完整的、具体的、清晰的、准确的要求。可以分为需求的提出,需求的描述,需求的评审等阶段。需求分析也是设计数据结构的起点,需求分析的结果将直接影响到程序功能的设计。

需求分析的任务是通过详细调查现实世界要处理的对象(坦克、子弹、墙等),充分了解游戏的运行情况,开发游戏的各种需求,然后在此基础上确定游戏的功能。调查的重点是“数据”和“处理”,通过调查、收集与分析,获得开发游戏的如下要求:信息要求、处理要求、安全性与健壮性要求。

(1)游戏整体分析.本游戏主要包括己方坦克和敌方坦克,还有我方基地,砖墙,铁墙,绿草,开始画面,游戏胜利画面,游戏结束画面。我方坦克和对方坦克可以向上、向下、向左、向右移动,游戏的玩家通过键盘来控制坦克的移动和发射子弹,对方坦克通过A*算法移动和发射子弹。我放坦克子弹能消灭敌方坦克。敌方坦克子弹击中我方坦克时生命值会减少。当己方坦克血量为0或者基地被摧毁时游戏结束,出现游戏结束画面。

(2)游戏建模。游戏中敌我双方坦克均可完成射击、移动的功能,但己方坦克的运行是通过键盘响应事件控制,而敌方坦克是根据A*算法来移动的。同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。为了避免使用多线程技术,在这里引入虚拟线程,不使用多线程是为了兼容一些较落后的计算机CPU处理能力不足的问题。

(3)游戏整体建模。游戏首先出现开始的界面,通过WS切换选项,Y键确定选择坦克数量也在不断增加,我方坦克在生命值用为0时游戏结束,但只有游戏进行到最后一关并将最后一关的坦克全数歼灭我方才算取得胜利。

3 概要设计

本游戏中设计的主要研究的内容:敌我双方的坦克、子弹以及地图元素均以字符方式通过WINDOWS API函数打印在控制台上,并且添加游戏包含河、墙等地图元素。使用模拟多线程来控制坦克的移动。敌人中包含特殊坦克有不同的移动速度、攻击力、生命值,我方坦克是有生命值限制的。

(1)游戏框架设计。本游戏主要有三个模块构成,分别是数据摸块(Data),视图控制模块(Draw)以及逻辑控制模块(Engine)。数据模块主要用于保存坦克信息的结构体,子弹信息的结构体以及一些地图信息以及一些常用的宏。DRAW模块是将本游戏一切所有的元素显示出来,因为本游戏主要是控制台开发的,所以DRAW模块主要用于将逻辑模块所处理后的信息打印出来。各个模块分工合作互不影响,通过模块分布可以快速定位BUG的根源,十分利于调试。

(2)数据结构设计。游戏中各个元素定义成结构体,并且在一定的条件下某些元素消失或者出现,因此为了操作的方便,将这些元素均存放在向量中,采用向量而不采用链表是因为向量操作容易,且其占用内存的空间是可变的,且事先需要为其分配一定的存储空间,因此向量还节省了空间。

(3)算法设计。本游戏中我方坦克、我方子弹、敌方坦克、敌方子弹都将其模拟成不同线程,即敌我双方坦克,子弹均是以线程的形式出现在游戏中的,此外游戏中还设置了砖墙,草皮,钢铁等元素,这些物体都是以字符形式显示,并且存放在在一个二维数组中。游戏过程中,坦克和子弹有时会碰撞到这些元素,当坦克不能通过砖墙和铁墙,而子弹可以击碎砖墙无法击碎钢铁墙,关于碰撞都是通过坐标是否重合实现的。

4 详细设计

(1)玩家坦克的功能属性.首先己方坦克在进入游戏后的方向也就是炮头是向上的,位于地图的最下方,根据玩家键盘输入移动,此时只能方向向下,不能向下移动但可以向其他三个方向移动。

(2)敌人坦克的功能属性。敌方坦克移动时是根据算法获得的,每次将该敌方坦克的坐标放入算法结构,会得到一个新的坐标,通过坐标与原坐标的比较,判断原坐标的方向,得到的坐标此时坦克就是向下,然后调用自身移动函数传入向下的参数进行移动。

(3)敌方的坦克控制及智能移动。敌方坦克的移动将采用A*算法获得敌军到己军的最短路径,然后把路径通过计算转换为0、1、2、3方向键保存到数组里,然后敌军通过读取数组中的命令来实现智能移动。敌军坦克的子弹发射是通过主程序循环100次发射一次。这样就可以实现敌军坦克的智能移动和发射了。

5 结语

本程序的开发环境是以VS2013为平台开发,采用寻路算法控制敌方坦克移动,使其可玩性和复杂性有了极大提高。当然BUG是程序开发的必需品,在不断的调试过程中,更加认识到了C语言的特性。

参考文献:

[1]陈朔鹰,陈英.C语言程序设计习题集(第二版)[J].人民邮电出版社,2003(02).

[2]张芳妮,吕波译,[美]Paul S. R. Chishohm等著.C语言编程常见问题解答[J].清华大学出版社,1996(12).

[3]陈朔鹰,陈英.C语言趣味程序百例精解[J].北京理工大学出版社,1996.

上一篇:互联网时代基于云计算的网络教学资源共享体系... 下一篇:富水粉细砂地层中盾构掘进的研究