GithubHelp home page GithubHelp logo

dotd's Introduction

DOTD

大一比赛作品

内容目录

  • 一、github改动时间线说明
  • 二、游戏概述
  • 三、代码逻辑简要说明
  • 四、游戏玩法与环境设置
  • 五、源代码目录简要说明
  • 六、现在的视角:一些感想

一、github改动时间线说明

  • 2018.05,历时整一个月完成,但当时不知道有VCS,所以并没有上传到github
  • 2019.03,回过头来整理,主要包括两方面
    • 将原先代码进行切分。原本的代码约4.5k行(包括了简略的控制台UI部分),却挤在四个文件中,对其进行了简单切分,形成现在的src目录
    • 上传到github,包括简要说明以及doc形式的说明书
  • 2019.04,移除了音频文件
  • 2021.03,对说明重新整理

二、游戏概述

游戏名: DOTD ( Defence Of The Dormitory)(寝室保卫战) 作者: 彭天祥 赵文松 类型: 类FTS MOBA 操作方式: 鼠标为主 键盘为辅 代码量: 约4.5k(包括控制台UI)

创作来源: 基于我们两个人都热爱FTS游戏,而且对LOL,DOTA,DOTA2,WAR3,澄海3C的不同方面都各有认识,在这样的认识基础上,模拟创作了这样一个类FTS游戏,也算是对WAR3的致敬吧 实际上在最初是打算模拟整个WAR3的运行方式,但是开发过程中发现难度过大,最后采取类似MOBA的游戏模式,而实际最开始游戏定名为“魔兽进化史”,但是在偶然的一次过程中,突然发现大家对辅导员查房都闻之变色,在谈笑之余想到不如采用这一背景,更加贴近实际大学生活,于是也就有了DOTD

背景故事: “咚咚咚!”众人惊愕!!:“没人,别敲了”“胡说,你们开着灯呢!!”,众人放下手里的斗地主,开始商讨:“怎么办,辅导员来查房了!!”“不行,我们要引开辅导员的注意力,不能让她看到我们一片狼藉的样子!!” 于是,一场旷(hao)日(wu)持(xuan)久(nian)的对抗开始了……

游戏说明: 游戏采用轮防式游戏进程,每一轮都会有辅导员出现,而你的任务就是击退辅导员的查房,你可以通过商店卖的装备/药水/强化书来提升自己,并通过一次次的胜利获得经验和赏金,进而解锁多个人物,看看你能撑到第几轮吧!

游戏实现:

  1. 采用虚继承模拟有限状态机,控制游戏进程及人机交互
  2. 采用并发模型处理单位的行为
  3. 采用信号量(Event)实现线程间的即时通信、响应、结束
  4. 采用互斥量(Mutex)防止访问冲突,确定时序规范
  5. 采用A*算法进行单位寻路
  6. GP与AI采用不同的运行机制,GP为保证及时性,内部完全并行,AI采用另一类有限状态机进行状态转移与行为判断
  7. 架构可扩展,实现引擎与数据的分离,代码中可任意添加装备/消耗品/强化书/人物/敌人
  8. 加入暴击/生命偷取/法力偷取/百分比伤害/Buff、DeBuff、技能CD刷新/技能范围指示器/升级 机制,增强游戏可玩性
  9. 并行实现多线操作,仇恨机制,进而引入风筝打法
  10. 除播放音效使用了mciSendstring函数外,未采用第三方库

游戏角色:

  • 人物:

    1. 大一萌新(人物音效来自:剑圣 格罗姆·地狱咆哮) 定位:刺客、暴击、平A
    2. 大二学姐(人物音效来自:月之女祭司 泰兰德·风语者) 定位:射手、平A
    3. 大三腊肉(人物音效来自:大魔法师 安东尼达斯) 定位:法师、技能
    4. 大四骨灰(人物音效来自: 侍僧) 定位:战士、近程
  • 辅导员:

    1. ①号辅导员(人物音效来自:守望者 玛维·影之歌)
    2. ②号辅导员(人物音效来自:女法师)
    3. ③号辅导员(人物音效来自:树妖)
  • 游戏展望:

    1. 采用并行事件分发,以引入编队系统
    2. 加入坐标引擎,以引入战场切换
    3. 实现对象序列化,以引入局域网下的多方对战
    4. 实现四叉树下的二位单位碰撞检测
    5. 结构上将每个人物/辅导员均以类的结构实现,以实现更大程度上的多态,提高代码维护性及游戏体验
    6. 全面设计游戏平衡性

三、代码逻辑简要说明

游戏的整体框架是有限状态机+多线程并行,游戏中使用了两类有限状态机 分别是AI有限状态机和游戏进程(鼠标)有限状态机

AI状态转移图: 游戏进程状态转移图: 然后,每个玩家英雄会拥有大约6-7个子线程,每个AI英雄会拥有3-4个子线程

寻路方面依然是使用的A*寻路。在代码中对应Astar类,开启列表是用最小堆,也就是代码中的MinHeap类;关闭列表因为无需进行排序,采取了可变数组,对应的Aector类

采用虚继承模拟有限状态机,因为很多地方不得不使用虚继承 所以代码量会有些虚高……而且很多装备描述 不得不采用switch case,也使代码看起来有点多

识别方面采用RTTI

采用_beginthreadex来开启线程。线程通信方面,采用信号量(Event)来确保事件响应的同步,采用互斥量(Mutex)来确保写入不发生冲突,但是由于高度并发,部分事件响应可能有些怪异

除了播放音效不得不采用MFC的mciSendstring函数,其他方面均采用API,原则上不调用第三方库

总体理念是:输入事件(键盘/鼠标)->鼠标有限状态机->分发到线程->做出响应->玩家英雄与AI英雄交互->做出应答

四、游戏玩法与环境设置(经测试目前无法正常运行)

点击exe文件开始执行后屏幕会很乱 这时候是全屏 摁F11退出全屏 右键控制台标题栏 进行以下三项设置后 方可正常游戏(这部分无法通过代码设置….)

  1. 要取消快速编辑模式 才能接受鼠标输入

  2. 要将大小设置为14

  3. 要将缓冲区大小中的高度设置为60

设置完毕以后重新运行exe即可开始游戏,游戏开始界面是这样 DOTD四个字母可以移动 (虽然还是很简陋….),移动到右边点击OK 那么游戏就开始了!!! 进来是寝室,也是商店,商店中蓝色的是强化书 可以永久提升英雄属性 紫色是消耗品 可以买给英雄 可随时使用;绿色是卖的装备,鼠标停在上面左边会显示物品的背景故事,嘿嘿~ 每次进商店,都会重新刷新物品,那么问题来了,英雄在哪呢?

目前共计设置了四个英雄,分别是大一萌新,大二学姐,大三腊肉和大四骨灰。摁住左ctrl+1/2/3/4即可购买对应英雄(对了,要打开大写锁,因为不支持拼音输入法),但是,实际操作的过程中,是按你买的顺序来看的,比如你先买了大二学姐,虽然她在商店中是2号,但是对你来说是第一个,所以你要选定她,就要按数字键1;假如你又买了大一萌新,那么他就是你的二号英雄,你就要按数字键2来选中他。目前不支持编队操作(后续会加入)。看一下效果~ 左上角是游戏轮数的说明,当新一轮开始时会有音效。当所有辅导员被击退的时候,就会开始下一轮的倒计时,设为15秒

在英雄面板上是这样:蓝色是技能,紫色是消耗品(图片上的英雄还没有买)绿色是装备(同上,还没买),然后移到上面会显示背景故事。因为时间仓促,有些描述可能不合理,技能现在要么很弱,要么很强,蛤蛤~

可以通过鼠标点那些小点来选英雄,比如这个暗黄色的点,你点一下,就可以选择它;也可以通过键盘1234等等来选择,0号是寝室,但是一般这个都是点击选择,毕竟那个红色的一大块比较好点~~

怎么决定给哪个英雄买装备什么的呢?是这样:这个是按照你选定商店(寝室)之前最后选定的英雄来决定的。比如我现在选2号英雄大一萌新,我接着点商店,那么我买的东西都会给大一萌新。但是如果你连点两次商店那就不行了,那样你最后一次的购买者就变成了商店,购买就会无效。值得一提的是,强化书是瞬间生效的,购买给哪个英雄,就立即给他加属性,这一点和澄海3C是一致的。

英雄之间可以进行装备/消耗品的转移:右键装备/消耗品,然后再选定你要给的英雄,可以用键盘1234也可以用鼠标(可能这个不太方便)。如果选择商店的话,就认为是出售,卖的价格是标价的60%

说了这么多,打起来是什么效果呢?我们看一下 红色的就是辅导员啦~ 攻击的时候会在你的周围生成字符(很挫……)以及攻击音效

目前我们推荐你选择2号英雄大二学姐,她的音效是泰兰德·风语者的,很劲爆。推荐她主要因为她是远程,可以打到大约7*7的周围格子,能风筝辅导员

顺带一提,这个游戏可以多线操作,而且有仇恨机制,所以要小心。游戏目前相当不平衡,基本很难玩,所以初始金钱设的比较高……可以多买几件装备撑一下。到第五轮 第十轮会有惊喜哦~

另外英雄是可以买活的,但是价格会越来越贵,大约是500、1000、1500这样递增的,所以要小心~

经验足够可以升级,右键技能就可以升级这个技能

最后,我要诚挚的道歉,因为很多装备/消耗品/强化书的数值还没有设定好,这个游戏的很多体验还很差,装备目前是都有效果的,可是消耗品和强化书并不是…可能你花钱买了却没有什么效果……还有待完善,但是游戏引擎和游戏内核已经做出来了,所以剩下的都只是数值问题,请求期待我们的表现吧

装备的效果可以买来试一下,装备/消耗品的故事都很有意思哦~满满的锋哥哈哈哈

如果有任何疑问的话,可以联系我QQ:1070280566

五、源代码目录简要说明

  • src/FSM,界面、商店、英雄、AI各自的有限状态机(FSM - Finite State Machine)代码
  • src/callback,用于多线程启动执行的callback函数,如鼠标点击移动、回合控制、音效控制、buff效果刷新、技能CD刷新等
  • src/element,游戏元素的UI与部分逻辑,包括耗品、装备、技能
  • src/hero,游戏人物的实现逻辑,如重生、寻路、被选、攻击、仇恨等等
  • src/include,头文件目录,包括了所有类的头文件
  • src/module,游戏本身的控制模块文件,如菜单、加载、变量初始化、I/O事件分发等等
  • src/navigate,寻路算法及需要的堆实现
  • src/settings,游戏配置信息文件(主要是常量、宏定义),如不同部分字体大小、字体颜色、人物名字等等
  • src/variable,全局变量的定义文件

六、现在的视角:一些感想

从现在的视角看,不足还是很多的:

  • 几乎没有代码规范(好的一点是有一些注释说明)
  • console的设置可以通过预先执行一个bat来实现
  • 在当时并没有系统地学过同步/互斥,这部分做的效果一般,才导致有时候会死锁
  • 文件划分也很不合理(当然,这也主要是因为很多代码不重写也根本没法很好地划分)
  • 线程开的太多
  • 后来也没有再去动过这个项目,所以所谓的展望其实就变成只是说说而已了...

但不管怎么样,整理过程中才发现当时竟然写了这么多...好吧,也还算说的过去。

最后,能坚持看到这的都是狠人,万分感激!

dotd's People

Contributors

kirhhoff avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.