前言

目前的游戏市场有很多种卡牌回合制手游,可能由于这种游戏不像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();//记录回合数以及其他需要在回合结束后进行计算和保存的逻辑
}

【游戏开发】卡牌游戏战斗系统设计与实现相关推荐

  1. 一个卡牌游戏的DEMO(0)

    最近有一个卡牌游戏的创意,打算用Unity把Demo实现出来练练手.我尽量尝试每天记录一下开发的进度. 打算在这里主要记录游戏设计和开发的过程,作为自己的一个摸索的记录. 虽然只有一个人在做,但还是打 ...

  2. 基于QT开发的开源局域网联机UNO卡牌游戏报告(附github仓库地址)

    源代码: https://github.com/yunwei37/UNO-game-oop 目录 1. 需求分析 1.1. UNO卡牌游戏的基本功能 1.2. UNO卡牌游戏的规则 2. 总体设计 3 ...

  3. 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏

    2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...

  4. unity5.6回合制战斗卡牌游戏源码支持安卓+IOS双端 C#语言开发

    unity5.6回合制战斗卡牌游戏源码.支持安卓+IOS双端 C#语言开发.拿来学习研究和二次开发都很不错. 说明:使用Unity 5.6.0f3开发,插件使用Dotween 源码下载 (1条消息) ...

  5. 计算机卡牌培养游戏,浅谈冒险游戏、卡牌游戏、养成游戏的几个设计要点

    badland-1.jpg (71.19 KB, 下载次数: 16) 2016-1-26 11:56 上传 这几种游戏设计好玩的关键点是: 1.收集:游戏中设计1个主要收集项目,如卡牌本身就是一个很好 ...

  6. 本科课程【虚拟现实引擎Unity3D】实验4 - 卡牌游戏完善

    大家好,我是[1+1=王], 热爱java的计算机(人工智能)渣硕研究生在读. 如果你也对java.人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!! Good better best, never ...

  7. cocos creator2.4.4 英文卡牌游戏源码H5+安卓+IOS三端源码

    cocos creator2.4.4 英文卡牌游戏源码H5+安卓+IOS三端源码,开发脚本为typeScript方便扩展和阅读,支持cocos creator2.X版本,完整的源码可直接运营.纯英文版 ...

  8. 用js写卡牌游戏(一)

    用js写卡牌游戏(一) 不想看废话的点这 直接看代码的点这 废话(前言) 现在游戏多了,不过总是感觉不太对自己的口味,每个游戏都感觉和自己想象中的要差了那么一点点,所以我决定尝试着自己写一个游戏. 因 ...

  9. 《刀塔传奇》最初不是卡牌游戏——专访龙图COO王彦直

    http://game.donews.com/201407/2814031.shtm "最早是以投资商的身份去合作,后来又转换成发行商的身份去合作." 6月28日,<刀塔传奇 ...

  10. 卡牌游戏的基本市场分析

    一.背景分析 当前这类卡牌是桌游,其最流行的代表就是"三国杀","三国杀"严格来说分为两个产品:一个是实体的卡牌游戏,另一个是网络版的游戏,这两个产品的关系是网 ...

最新文章

  1. pip不是内部 pycharm_PyCharm的简单使用
  2. 微软私有云分享(R2)5-域升级造成Hyper-V主机无法实时迁移
  3. 【渝粤教育】国家开放大学2018年秋季 0692-22T化工设备机械基础 参考试题
  4. fiddler显示服务器IP
  5. vi/vim命令使用
  6. java中this用法
  7. php gd libpng,libpng版本问题导致的PHP调用gd扩展出错解决方案
  8. 亚马逊SP-API市场端点接口文档整理
  9. 30岁学前端晚不晚?别被年龄定义你的人生!
  10. linux加密自己的smb目录,SmbFile连接加密共享文件夹
  11. Jetpack Compose SideEffect:副作用及相关API
  12. print spooler打印服务启动后,自动停止的解决方法。
  13. H3C AP状态指示灯
  14. win10安装PyPESQ库
  15. 5、分组密码工作模式
  16. CIE1964标准色度系统
  17. pandas实现对dataframe随机抽样、分层抽样
  18. asp.net服务器控件调用js
  19. 银行科技是自研还是外包好?
  20. 本地码转换至ASCII码工具-native2ascii

热门文章

  1. 机器学习-----车标识别
  2. 手把手教你二维数组打印
  3. 数学建模 - 时间序列分析
  4. 量子计算和量子加密的基础问答
  5. Edge浏览器安装Tampermonkey插件
  6. CREO:CREO软件之零件【造型】样式栏之操作、平面、曲线、曲面、分析、优先选项的简介及其使用方法(图文教程)之详细攻略
  7. (創世紀)神的儿子们看见人的…
  8. 瑞芯微读取寄存器_瑞芯微Android软件中添加ALC5640 音频CODEC 的寄存器修改
  9. CCS以及DSP入门帖
  10. ISO 标准是什么 RFID标准协议中 ISO18000-6B