C课程设计——魔塔游戏

C课程设计——魔塔游戏文章目录纯C实现命令行魔塔游戏项目地址关于特性游戏实录详细设计关键架构创建工厂模块碰撞检测模块场景模块基类模块子类模块英雄人物模块怪物模块…纯C实现命令行魔塔游戏详细流程图:项目地址可根据源代码结合详细设计、特性

纯C实现命令行魔塔游戏

C课程设计——魔塔游戏

详细流程图:

C课程设计——魔塔游戏

项目地址

可根据源代码结合详细设计、特性来看,应该很容易看懂!

求star呀!(虽然很菜)

项目地址

游戏下载

关于

这是一个仓促的数据结构课程设计,所以其实这个游戏的很多内容是没有做完的,但是基本的逻辑都已经完成了,接下来的添加怪物等过程,无非也就是重复劳作而已。

特性

更为详细的介绍请进入GitHub项目里面的 魔塔游戏.xmind 文件即可查看!

  • 使用面向对象的特性实现地图的每一个元素。最重要的是使用的C语言实现面向对象的思路,比如TBase的继承,比如函数指针的使用实现碰撞函数,实现了多态,又或者用static关键字把数据封装,然后再用get和set。
  • 使用工厂模式创建地图上的每一个元素。具体来说是通过指定枚举类型便可通过一个工厂创建具体实例。
  • 使用宏定义对战斗逻辑的代码进行化简。由于战斗逻辑都是相同的,除了不同类型的对象属性不同,其余没有任何差别,故通过宏定义实现泛型即可完成代码复用。
  • 位运算实现武器系统和怪物系统的判断。

…更详细的解读,可以看我的xmind流程图文件。需要本地有xmind软件才能查看哦。。

详细设计

关键架构

只要实现工厂模块和碰撞检测这两个模块后,那么后面的各种地图元素模块的添加,都只需要实现一个碰撞检测函数和创建函数,然后往工厂模块中注册对应的创建函数即可。

创建工厂模块

通过一个函数能够创建一个对象,如果按照平常的情况来看,由于我们需要的对象非常多,则需要多个函数来创建对应的类型对象。为了避免创建逻辑过于复杂,我们就构建了一个创建工厂。如何构建一个创建工厂呢? 首先,我们将每一种类型的对象通过不同的枚举值记录,其次,我们需要将创建对象的函数统一接口,在C语言中,函数统一接口的含义就是把函数的参数类型统一,通过函数指针便可利用这些统一的函数实现自由的多态切换,最后,我们定义这个接口类型的指针数组,通过数组下标和对象所对应的枚举值的映射,可以完成通过枚举值得到对应的函数指针,然后调用对应的创建函数完成这个类型的对象创建。

碰撞检测模块

碰撞检测模块也是一个统一的函数接口,只需要在结构体里面添加该接口的函数指针,存下该类型的碰撞检测函数,具体而言,这个函数的第一个参数需要是THero类型,第二个参数是 void* 类型,首先,第一个参数传入地图中的英雄类型,方便根据该次碰撞的具体类型来调整英雄具体参数。其次,由于第二个参数是 void*类型,所以自由度非常的高,而我们这里利用void类型,外面传入当前物体对象的地址,然后在碰撞函数内部将void类型的地址强转为我们需要的类型,这样我们就可在碰撞函数内处理当前碰撞到的对象,比如碰撞到怪物后我们需要战斗完后把怪物删除。最后,我们可以根据返回值判断英雄是否要移动,如果返回值为0则英雄移动,否则不动。

场景模块

这个模块是一个结构体,内部包含一个Tbase数组,和index字段,当我们需要打印当前场景的时候,只需要利用index字段遍历Tbase数组即可完成。

基类模块

地图元素的共有模块:x,y 坐标,type记录类型,CollionCB用于存下该元素对应的碰撞函数,printName存下该元素打印的字符串,name存下该元素字符串的全称。

子类模块

英雄人物模块

是一个继承与Tbase类型的结构体,具体整个模块包含结构体和创建函数,以及英雄信息打印函数,对hero结构体进行封装,然后通过函数GetHero对外公开。具体如下图:C课程设计——魔塔游戏

怪物模块

怪物模块包含多种类型的怪物,但整个怪物模块都是由三个部分组成:

  1. 怪物属性
  2. 怪物的创建函数
  3. 怪物的战斗逻辑。

由于战斗逻辑代码所有的怪物都是一样的,除了因怪物类型而产生的打印属性差异,所以为了节省代码量,让代码的可复用性增强,用了宏定义实现不同类型的泛型复用

战斗逻辑的宏定义图片:

C课程设计——魔塔游戏

以Master怪物类型为例:

C课程设计——魔塔游戏

其他的门、钥匙、传送门啥的,都一个套路,无非就是碰撞函数+创建初始化的工厂注册过程。

今天的文章C课程设计——魔塔游戏分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/61698.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注