我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

C课程设计——魔塔游戏-创新互联

文章目录
  • 纯C实现命令行魔塔游戏
    • 项目地址
    • 关于
    • 特性
    • 详细设计
      • 关键架构
      • 创建工厂模块
      • 碰撞检测模块
      • 场景模块
      • 基类模块
      • 子类模块
        • 英雄人物模块
        • 怪物模块
        • ...

创新互联主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务田家庵,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792纯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对外公开。具体如下图:

怪物模块

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

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

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

战斗逻辑的宏定义图片:

以Master怪物类型为例:

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:C课程设计——魔塔游戏-创新互联
文章位置:http://shouzuofang.com/article/pohos.html

其他资讯