【游戏开发】卡牌游戏战斗系统设计与实现
前言
目前的游戏市场有很多种卡牌回合制手游,可能由于这种游戏不像MMO会占用玩家大量时间,所以也有着相当的受众群体,像笔者以前读书那会玩过的腾讯的《龙珠激斗》,《火影忍者ol》均属于此类。跟大部分类型的游戏相同的是,战斗也是卡牌游戏的核心模块,而游戏中所有培养系统,竞技场,抽卡系统,全服活动均是为了战斗服务。一个设计比较好的战斗系统无疑能吸引到更多玩家。
业务逻辑
这种游戏一般是双方战斗开始前先布置好自己的阵容,然后进入打斗。期间按照回合制打法进行战斗,由先手一方先出手,选取攻击对象进行攻击,然后由对方出手,依次反复直至战斗结束,最后进行战斗的结算。
实现
与一些需要操作的游戏不同的是,一般的卡牌回合制不需要玩家操作,战斗这块相对于其他游戏也比较简单,战斗其实对于服务端来说就是一瞬间就结束了,由服务端来进行战斗的模拟一回合一回合打斗计算,最后将战斗记录发送给客户端,由客户端进行解析并进行战斗的播放。由于我是服务端开发,所以这里只讨论服务端的实现。
代码架构设计
BattleScene类:作为战斗逻辑的核心类,也是后续开发中其他战斗类的基类,主要实现了一般战斗的战斗逻辑。
BattleEntity类:作为战斗实体类,实现了战斗实体的行为逻辑,也是后续如果想新增新类型实体类的基类。
BattleEntityManager类:作为战斗实体的管理类,主要负责存储战斗开始前初始化的战斗实体,并负责在战斗结束后将战斗实体的内存进行回收。
核心代码实现
void BattleScene::startBattle()
{while (!isFinish()) //打斗未结束就一直打{runRound();//每回合执行一次}fillBattleRes();saveBattleRecord();//保存战报fillBattleReward();giveBattleReward();//分发奖励//...其他
}
在这个startBattle
函数里,最核心的就是runRound
函数了,这个函数主要就是执行每一回合的各个战斗实体的战斗逻辑
void BattleScene::runRound()
{size_t defSz = defHeros.size();size_t atkSz = atkHeros.size();beforeRound(); //进行一些战斗前的处理while (((atkIdx <= atkSz && defIdx < defSz)|| (atkIdx < atkSz && defIdx <= defSz)) && atkAliveNum > 0&& defAliveNum > 0){if (isAtkRound) //攻击方回合{size_t temp = atkIdx;for (size_t i = temp; i < atkSz; i++){BattleEntity* entity = BattleEntityManager::getInstance().getEntityById(atkHeros[i]);atkIdx++; if (!entity){continue;}if (entity->doAction())break;}isAtkRound = false;}else //防守方回合{size_t temp = defIdx;for (size_t i = temp; i < defSz; i++){BattleEntity* entity = BattleEntityManager::getInstance().getEntityById(defHeros[i]);defIdx++;if (!entity){continue;}if (entity->doAction())break;}isAtkRound = true;}}//每一回合结束后重置数据atkIdx = 0;defIdx = 0;isAtkRound = isAtkFirst;afterRound();//记录回合数以及其他需要在回合结束后进行计算和保存的逻辑
}
【游戏开发】卡牌游戏战斗系统设计与实现相关推荐
- 一个卡牌游戏的DEMO(0)
最近有一个卡牌游戏的创意,打算用Unity把Demo实现出来练练手.我尽量尝试每天记录一下开发的进度. 打算在这里主要记录游戏设计和开发的过程,作为自己的一个摸索的记录. 虽然只有一个人在做,但还是打 ...
- 基于QT开发的开源局域网联机UNO卡牌游戏报告(附github仓库地址)
源代码: https://github.com/yunwei37/UNO-game-oop 目录 1. 需求分析 1.1. UNO卡牌游戏的基本功能 1.2. UNO卡牌游戏的规则 2. 总体设计 3 ...
- 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏
2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...
- unity5.6回合制战斗卡牌游戏源码支持安卓+IOS双端 C#语言开发
unity5.6回合制战斗卡牌游戏源码.支持安卓+IOS双端 C#语言开发.拿来学习研究和二次开发都很不错. 说明:使用Unity 5.6.0f3开发,插件使用Dotween 源码下载 (1条消息) ...
- 计算机卡牌培养游戏,浅谈冒险游戏、卡牌游戏、养成游戏的几个设计要点
badland-1.jpg (71.19 KB, 下载次数: 16) 2016-1-26 11:56 上传 这几种游戏设计好玩的关键点是: 1.收集:游戏中设计1个主要收集项目,如卡牌本身就是一个很好 ...
- 本科课程【虚拟现实引擎Unity3D】实验4 - 卡牌游戏完善
大家好,我是[1+1=王], 热爱java的计算机(人工智能)渣硕研究生在读. 如果你也对java.人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!! Good better best, never ...
- cocos creator2.4.4 英文卡牌游戏源码H5+安卓+IOS三端源码
cocos creator2.4.4 英文卡牌游戏源码H5+安卓+IOS三端源码,开发脚本为typeScript方便扩展和阅读,支持cocos creator2.X版本,完整的源码可直接运营.纯英文版 ...
- 用js写卡牌游戏(一)
用js写卡牌游戏(一) 不想看废话的点这 直接看代码的点这 废话(前言) 现在游戏多了,不过总是感觉不太对自己的口味,每个游戏都感觉和自己想象中的要差了那么一点点,所以我决定尝试着自己写一个游戏. 因 ...
- 《刀塔传奇》最初不是卡牌游戏——专访龙图COO王彦直
http://game.donews.com/201407/2814031.shtm "最早是以投资商的身份去合作,后来又转换成发行商的身份去合作." 6月28日,<刀塔传奇 ...
- 卡牌游戏的基本市场分析
一.背景分析 当前这类卡牌是桌游,其最流行的代表就是"三国杀","三国杀"严格来说分为两个产品:一个是实体的卡牌游戏,另一个是网络版的游戏,这两个产品的关系是网 ...
最新文章
- pip不是内部 pycharm_PyCharm的简单使用
- 微软私有云分享(R2)5-域升级造成Hyper-V主机无法实时迁移
- 【渝粤教育】国家开放大学2018年秋季 0692-22T化工设备机械基础 参考试题
- fiddler显示服务器IP
- vi/vim命令使用
- java中this用法
- php gd libpng,libpng版本问题导致的PHP调用gd扩展出错解决方案
- 亚马逊SP-API市场端点接口文档整理
- 30岁学前端晚不晚?别被年龄定义你的人生!
- linux加密自己的smb目录,SmbFile连接加密共享文件夹
- Jetpack Compose SideEffect:副作用及相关API
- print spooler打印服务启动后,自动停止的解决方法。
- H3C AP状态指示灯
- win10安装PyPESQ库
- 5、分组密码工作模式
- CIE1964标准色度系统
- pandas实现对dataframe随机抽样、分层抽样
- asp.net服务器控件调用js
- 银行科技是自研还是外包好?
- 本地码转换至ASCII码工具-native2ascii