《炉石传说》架构设计赏析(3):Gameplay初探


经过前面两篇文章的分析,我们对炉石的代码已经不陌生了,接下来我初步尝试分析其游戏逻辑代码。
欢迎转载,请注明作者【燕良@游戏开发】及原文地址:http://blog.csdn.net/neil3d/article/details/39453291

经过前面的分析,我们已经找到了两个关键的类Gameplay和GameState(当然还有我最感兴趣的Spell和SpellController,这两个还要在后面分析)。

首先我们看一下Gameplay这个类的Awake方法,它完成的主要工作是:

  1. 调用“ GameState.Initialize()”创建一个新的GameState实例;
  2. 注册CreateGame事件:在Gameplay.OnCreateGame()中响应,主要是
    • 初始化卡背;(本地玩家和远程玩家的卡背ID都通过Player类来读取);
    • 启动一个Coroutine:NotifyPlayersOfBoardLoad,它做的主要工作是
      • 等待BoardStandardGame对象加载完成;
      • 然后调用所有Player的OnBoardLoaded(),它的主要工作是初始化法力水晶相关的管理逻辑;
  3. 使用AssetLoader加载AttackSpellController、SecretSpellController、TurnStartManager等;
    这些类看上去都很重要,我们后续分析游戏逻辑时肯定用得到。
接下来我们要看一下Gameplay.Start()方法,它主要是注册了一些自己关心的网络消息,然后调用
  1. Network.StartCountdown()——发送网络消息“BeginPlaying”;
  2. Network.GetGameState()——发送网络消息“GetGameState”;
我们在看一下Gameplay.Update(),里面似乎正常情况只是调用GameState.Update()。
OK,以上就是从MonoBehavior继承来的三个被自动调用的函数。对于游戏逻辑来说,还是没有什么头绪。

再往下分析,遇到的一个最大的困难是很多操作应该是通过网络交互完成的,例如【认输】操作,分析它是从GameMenu.ConcedeButtonPressed()开始的,一直调用到ConnectAPI.Concede()向服务器发了一个GiveUp消息,但是无法确定它对应的服务器返回消息是什么。

接下来我们先分析一下游戏的回合的流转,还是先看一下相关的类图:

回合结束是由玩家点击右侧的【End Trun】操作来触发的,其对应的代码为:InputManager.DoEndTurnButton(),这个函数的逻辑有些费解,目前只能是猜测如下:
  • 首先判断当前是否允许访问GameState的OptionsPacket,以及EndTurnButton是否可以操作;
  • 然后根据GameState.GetResponseMode()来分两种情况处理:
    • GameState.ResponseMode.OPTION——初步猜测为游戏回合中的正常操作:
      从GameState中取出所有的Network.Options,然后遍历,找到“OptionType.END_TURN”或者OptionType.PASS的对象,然后调用GameState.SetSelectedOption(i);GameState.SendOption();
    • GameState.ResponseMode.CHOICE——初步猜测为游戏回合开始时,选择初始手牌的相关操作;
服务器端的行为就比较难以猜测了,只能等到客户端行为分析比较完整时再说了。
服务器端相关的返回大致是这样的,在Gameplay的Start中有这样一句:
network.RegisterNetHandler(Network.PacketID.ALL_OPTIONS, new Network.NetHandler(this.OnAllOptions));
想象中客户端使用Gameplay.OnAllOptions()处理网络层接收到的所有玩家操作,此函数主要是将Network.GetOptions()取出的数据发送到GameState.OnAllOptions()去处理,后者主要会触发事件GameState.FireOptionsReceivedEvent()。
我们通过对应的GameState.RegisterOptionsReceivedListener()成员函数,可以分析一下哪些对象会响应此事件。找到EndTurnButton.OnOptionsReceived()。

这阶段的分析难度越来越大了,这次分析算是有小小的收获,但是整个回合流转的流程还没有清晰。总结如下:
  • 玩家的操作是在InputManager中处理的,重点的成员函数包括DoNetworkResponse()、DoEndTurnButton();
  • 玩家的操作和网络发送来的操作都保存在GameState.m_options中;
  • 其中有另外一个Entity类体系也需要进一步分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现

第四章:任务系统 这部分主要对任务系统进行设计,游戏的关键因素之一就是任务系统与玩家的交互,但在代码实现中并不算复杂。本篇博客主要通过一下几个方面实现任务系统。 任务模型的导入与任务UI界面的创建任务的接受与完成针对不同对象的指针…

RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现

第二章 角色创建 上一章中完成了初始化的场景界面的创建,本章就接着上一篇博客的内容,介绍角色创建的方法。 2.1 角色创建的UI界面 角色创建的背景采用与加载界面所用背景相同,并且Camera不需要移动。 创建的UI界面与之前类似,其中…

【游戏开发渲染】Unity ShaderGraph使用教程与各种特效案例:Unity2022(持续更新)

文章目录 一、ShaderGraph前言二、ShaderGraph科普1、渲染管线(Render Pipline)2、可编程渲染管线,SRP(Scriptable Render Pipline)3、高清渲染管线,HDRP(High Definition Render Pipleline&…

RPG游戏《黑暗之光》流程介绍与代码分析之(十五):主角受攻击效果以及场景切换

十五章:主角受攻击效果以及场景切换 本篇博客将《黑暗之光》开发的最后工作做完,包括之前未实现的主角被击效果,以及实际运行中的场景切换。 15.1 主角的受攻击效果 我们参照WolfBaby中的受攻击效果( 链接)&#xff0c…

Unity实现王者荣耀登陆界面动画背景

我呢,特别爱打王者荣耀。 而最近几个版本的更新中,王者荣耀的登录背景变成了动画背景,看着很有动感炫酷,这里来看下王者荣耀是怎么个效果。 这里找的一个B站UP主的视频,因为现在官方不知道为啥换了换背景,虽然他这个不是官方自制的吧,是自己修改的游戏…

Unity 之 ShaderGraph 实现火焰效果入门级教程

Unity 之 ShaderGraph 实现火焰效果入门级教程 前言一,效果展示二,原理介绍三,实现效果四,使用示例五,完整图示 前言 若你的工程还没有进行基础配置,请查看我的博文Unity 之 ShaderGraph入门使用详解&#…

Unity RPG 黑暗之光 问题记录 下(64-110 技能、装备商店、头像栏、快捷栏、敌人攻击系统、玩家攻击系统)

黑暗之光 64-73技能系统 数据读取 数据 表 黄色枚举,红色没有的 数据 文本 数据 读取 背包时是itemList,读取属性时各有不同,无法统一, 这种方式是为了方便读取,所有需要的数据表都可以在DataHub上读取到&#x…

Unity官方案例噩梦射手开发总结<一> 角色的攻击功能实现

愉悦的寒假生活总是会猝不及防地迎来尾声,这也意味着我大一生活的进度条已经过半了。幸运的是,在我某位优秀的学长的带领下,我完整地开发出来了unity的官方案例噩梦射手并基本实现所有功能,也是让我这个大一的苟蒻积攒了不少的新知…

GAMES202-Shadow总结概括

截图均来自于闫令琪老师的GMAES202-Shadow,本文在于对课程内容进行总结以及加上自己的理解,希望帮助同学们加深对课程内容的理解,如有谬误请各位指正 复习本节需要的基本知识 1. Shadow Mapping 为了获得一张Shadow Mapping,需要…

暗黑破坏神:不朽 unity mmo arpg资源分包精讲

unity大型游戏资源管理——分包 视频讲解:点击观看 unity mmo arpg 暗黑破坏神:不朽 是一个大型的重度游戏,该游戏资源已经超过10G 所以它用了资源分包技术减少下载时间。 首包只包含基础资源,在玩家玩第一关的时候,后…

股票卖出技巧及原则,你了解哪些

股票卖出技巧及原则,你了解哪些?有句股谚说,“会买的是徒弟,会卖的是师傅,会空仓的是祖师爷”。以前都是把大部分精力放在了选股和如何买股上面,而对如何卖股票太忽视了。难怪总是出不了师,小学…

通达信破底翻选股公式,用缠论底分型进行优化

上次在写《通达信破底翻形态选股公式,选出破底之后再翻回的股票》这篇文章时,编写破底翻选股公式就考虑使用缠论底分型,但是底分型的包含关系较为复杂,不容易处理,只能暂时搁置,采用了一种简单的方式&#…

股票大作手操盘术[图解]

目录 第一章:投机是一项挑战 第二章 何时入场才是好时机 第三章 追随领头羊 第四章 手里的钱财 第五章 关键点 第六章 百万美元的大错 第七章 三百万美元的盈利 第八章 利弗莫尔市场要决 杰西•利弗莫尔为什么能在投机事业中取得巨大成功,这…

【通达信指标公式】主力博弈分时指标,分时图抓日内弱转强牛股

GHYJKU:BETWEEN((CLOSE*1)/(SUM(AMOUNT,BARSCOUNT((CLOSE*1)))/SUM(VOL*100,BARSCOUNT((CLOSE*1)))),1.05,0.95); VBNH:IF(GHYJKU0,MA((CLOSE*1),BARSCOUNT((CLOSE*1))),(SUM(AMOUNT,BARSCOUNT((CLOSE*1)))/SUM(VOL*100,BARSCOUNT((CLOSE*1))))); 紫色跟风:EXPMA((CLOSE/VBNH),…

ChatGPT写代码之——CodeWhisperer在VS Code下如何安装

一、安装 1. 在VS Code扩展中搜索AWS 点安装就安装好了 #二、配置 1. 点击状态栏出现的AWS 选择add New Connection 选择Use a personal email to sign up and sign in with AWS Builder ID 选择Copy Code for AWS builder ID 跳转到浏览器 2. 在浏览器上一步步用自己的邮…

计算机程序设计类论文,计算机编程论文

计算机编程论文 介绍:本栏目是计算机和编程和论文相关的论文例文,免费教你怎么写关于计算机编程的论文提供相关文献资料。 【摘 要】本探究经过问卷调查、现场采访、走访调查、查阅文献资料等方法对河南省各大高校计算机专业大学生的学习情况(特别是编程能力)进行了调查和研。 …

爱丁堡计算机专业硕士世界排名,爱丁堡大学计算机世界排名

导读:,伴随着科技与经济的高速发展,计算机技术专业成为一门热门的专业,越来越受到人们的欢迎,学校的师资力量和教育水平,也直接成为影响我们选择高校的原因之一。 伴随着科技与经济的高速发展,计算机技术专…

爱丁堡大学计算机专业alevel,爱丁堡大学alevel要求?

原标题:爱丁堡大学alevel要求? 爱丁堡大学接受A-level和国际文凭课程的直接申请,每个学位课程都必须达到特定标准的要求才能入学。例如:申请爱丁堡大学商学院本科课程A-level要求AAA-ABB,兽医学(5年制)A-level要求为AA…

革微信的命,要靠“聊天即挖矿”?

广告诱惑我们追求名车服饰,从事自己憎恨的工作,为的就是买堆根本没用的狗屁东西。 ——Tyler Durden,《搏击俱乐部》 2019年1月15日,注定是一个不平凡的日子,这一天,3家公司揭秘了酝酿已久的社交产品——分别是罗永浩的聊天宝,王欣的马桶MT,张一鸣的多闪。目的只有一个…

用AI重构骨架,打造未来感IP体验经济

我国网文市场目前拥有近2000万位作家、4.9亿名读者。 如果将庞大的网文行业比作一个江湖,那么拥有2.4亿月活用户的阅文集团(HK00772,股价33.2港元,市值338.06亿港元),称得上是“天下第一大派”。 “第一大…