浅谈炉石传说开发技术

发布时间:2018-07-01 09:29:21   来源:文档文库   
字号:

题目 浅谈炉石传说开发技术

姓名与学号 3110104246 吴双

年级与专业 大四 软件工程

所在学院 软件学院

本来是想继续谈谈三国杀这个游戏的开发技术的,但这个游戏是个网页游戏,开发技术没什么新意可谈。所以经过了思考选择了炉石传说这个暴雪出了不久的卡牌游戏。之所以选择炉石传说,确实是有几点原因的:1、炉石传说开发所用的成本可以说是目前卡牌游戏里最高的了,毕竟是暴雪出品。2、炉石传说的开发引擎是unity3d,这点暴雪并没有声明,但是从所放出的代码文件看确实是Unity 3D的文件。而Unity 3D作为一个流行不久的开发引擎,也有很多可谈之处。3、炉石传说无论从背景还是机制,都做的是相当不错。可以说整个游戏的设计都相当值得借鉴,在我看来,游戏设计远比游戏开发重要。因此,在之后我会花费一部分篇幅来谈谈炉石传说的设计。

先谈谈Unity 3D吧,我们小组的3d游戏大程就是按照老师的要求使用Unity 3D开发,因此对Unity 3D也有了一定的了解。目前,在海内外渐成趋势的跨平台游戏领域,Unity 3D引擎显然是各大厂商关注的焦点。其一是该引擎的游戏设计能力强,画面效果不逊于虚幻3;其二便是跨平台应用的功能,能够实现游戏在PCPS3XB360iOS等平台的无缝并存。时至今日,国内外跨平台游戏领域在不到一年时间内,已经涌现出数十款PC端的Unity 3D网游,而基于该引擎的手机游戏更是多达数百款。Unity的游戏和应用可以用C#语言,UnityScript或者Boo来开发,其编译过程根据不同的目标平台而变化。在PCMacAndroid平台上,游戏代码可以被编译成字节码,可以用JIT编译器执行。在其他平台上,游戏代码需要预编译,在建立的时候转化成为目标机器的本地代码。Unity开发平台包括可视化编程工具和基于MonoDevelopIDE,还有3D补偿引擎,脚本语言环境,工作流系统和团队合作版本控制。Unity还运营着Asset store,这里面有超过两千种开发工具和游戏组件(艺术效果,编码,声音等),其中包括着一系列入门级基本功能产品免费为初学者提供。Unity的用户可以通过为全部的平台(除了web浏览器)编写本地代码插件来从Unity API之外获取操作系统的功能和第三方代码库支持。在移动平台方面,Unity最近展示了一系列的设备API,只有25%Unity开发人员需要加速计和多点触控与设备API之间更好的集成性能,而其他厂商的均值有38%,显然Unity做得比别人好一些。

我曾经看过一个U3D开发炉石传说的教程,讲的很详细。因此对用U3D开发炉石传说也有一定的了解。首先自然是界面制作,这里使用的是现有的资源。然后是整体的机制,U3D采用的开发语言是C#,javascriptBoo,对Boo的了解有限,是一门类似python的语言。炉石传说目前仅仅有1V1的游戏,玩家可以选择和其他玩家或是电脑对战。炉石传说共有九个职业,玩家可以先自己选择职业然后配一套牌与其他玩家进行游戏,战斗流程是轮抽机制。炉石传说的卡牌分中立卡牌和职业卡牌,中立卡牌即所有职业都可以用,职业卡牌即只有特定的职业才可以用。玩家需先自行配一套30张卡牌,才能与其他玩家进行游戏。炉石传说以wow故事为背景,在平衡性方面做得也是相当不错,因此吸引了很多玩家。同时炉石传说有着容易上手,难于精通的特点(这也是大多数卡牌游戏所共同具有的特征),因此可以作为休闲游戏,同时也有着一定的竞技性。

炉石传说实现了ipad玩家和pc玩家的共同游戏,算是一个不错的特性。虽然没有公布相关的技术,但我想要实现这一点应该相当不易。更何况炉石传说的开发团队是暴雪所有开发组中最小的一个!然而正是因为开发团队小,所以开发者们才能更好地追求自己的炉石传说之梦,而且能更把注意力集中在更重要的事上。开发组的每个人都喜欢卡牌游戏,更关键的是,暴雪也喜欢!炉石传说的目标炉石传说是一个全民游戏。无论谁都可以上手。开发者尽量让游戏显得简单却又不乏深度。如果一周就玩厌了可不行。让炉石传说更有质感。玩家会有种自己真的拿着实体牌一样。游戏细节非常精细,多姿多彩炉石传说以魔兽世界为基础,更重要的是,开发组希望保持魔兽的感觉,而且还要加入更多蠢萌的元素,游戏节奏要快,因为要做移动终端,所以每局时间不能太长,用自动充能的法力水晶作为资源有效地加快了游戏节奏,你不必等资源牌配置,游戏必须有趣,抛弃了诸如资源摧毁和MILL的卡牌游戏方式,使得玩家不会感觉太绝望。炉石传说前前后后重做了不少内容。曾经做过没有文字版的实体卡牌,上面只有图像和攻击,生命值,结果玩起来也不错。所以出场的牌上面没有文字说明。在实体卡测试过后才开始网络测试。这里学到了不少界面设计。如果你正在攻击对手而且已经设好了战斗技巧,那么你可以在对手出牌局打出一张牌来扰乱对方攻击。最后发现去掉战斗技巧这个机制让游戏更有趣,节奏也更快。界面的卡通效果越做越多,制作电子卡牌游戏让开发者完成了一些在现实世界无法完成的事情。例如思维窃取,诺滋多姆和穆克拉。大部分开发者都喜欢征募模式Draft mode,炉石同样也有。

还有一个就是网络游戏的匹配,无论网络游戏怎么分类,它始终离不开客户端和服务器端。即使是网页游戏,它也需要浏览器的支持。Client/Server结构是现今网络游戏中最基本也最重要的框架。从开发的角度来看,常见Client/Server结构的网络游戏可分为以下类型。一是客户端到客户端的类型。大多数对战型的网络游戏都采用这种结构。这里的对等是指在有多个玩家参与的游戏中,其中一个玩家的机器既是Client有扮演Server的角色,通常由创建游戏局的玩家担任,称为主机。第二种是大厅和会话的结构。首先应该知道会话和大厅的含义。以一个提供聊天服务的网站为例,登录之后可以看到网页上有可供选择的话题A和话题B。选择话题A点击进入,便可以和所有位于话题A的人聊天。此时,我们把话题A叫作

session(会话),并称所有位于话题A的人正在进行一场会话。并可以将这样一个聊天室网站称为大厅。可以根据自己的需要创建会话或加入别人的会话,也可以取消自己所创建的会话。第三种是真正的client/server类型,也是最重要的一种类型。大多时候,需要的是成千上万的人在进行同一场游戏,这些玩家在游戏世界中持续存在并且被记录下来,而这种游戏才是现在最大的热门,通常可以称之为图形化多人在线RPG游戏,炉石传说所采用的即是第三种。

下面是根据教程所写的炉石传说的客户端-服务器通信流程,使用TCP协议,类似于网站那样的短连接。
        玩家A                    服务器消息区            玩家B
           回合开始                STARTTURN
            使用卡牌A,造成结果B                USEA|EFFECTB            每隔5秒从服务器端读一次A的行为,改变当前战场状态,知道读取到ENDTRUN消息
            使用卡牌C,造成结果D                USEC|EFFECTD
            回合结束                ENDTURN

                            STARTTURN            回合开始
            每隔5秒从服务器端读一次B的行为,改变当前战场状态,知道读取到ENDTRUN消息                USEA|EFFECTB            使用卡牌A,造成结果B
                            USEC|EFFECTD            使用卡牌C,造成结果D
                            ENDTURN            回合结束

    请求分类 
        游戏
            新建一个游戏        新建一个游戏
            加入一个游戏        加入一个游戏
            认输         认输,退出一个游戏
            等待游戏列表        获取等待加入者游戏的列表
            确认游戏启动状态   确认游戏是否处于启动状态
            是否为先手        是否为先手
        动作
            抽牌        抽牌
            回合结束   回合结束
            行动        改变战场的动作

然后再附上核心代码:

客户端-服务器-核心库 核心库:委托形式 ///

/// 抽牌委托 /// /// 先后手区分 /// 法术定义 public delegate List delegateDrawCard(Boolean IsFirst, int DrawCount); /// /// 抽牌魔法(服务器方法) /// public static delegateDrawCard DrawCard; 客户端:实现委托 /// /// 初始化 /// public static void Init() { //抽牌的具体方法 CardUtility.DrawCard += DrawCardAtServer; } /// /// 抽牌(服务器方法) /// /// public static List DrawCardAtServer(Boolean IsFirst, int Count) { //向服务器提出请求,获得牌 return GameStatus.DrawCard(IsFirst,Count); } 服务器端:实际操作牌堆 /// /// 抽牌 /// /// /// /// public static List DrawCard(Boolean IsFirst, int Count) { var targetStock = IsFirst ? FirstCardStock : SecondCardStock; return targetStock.DrawCard(Count); } (调用Card核心库方法) /// /// 抽卡 /// /// /// public List DrawCard(int CardCount) { List newList = new List(); for (int i = 0; i < CardCount; i++) { if (CardList.Count == 0) break; newList.Add(CardList.Pop()); } return newList; }

除了之前所说,炉石传说还运用了许多其他技术,在此就不一一赘述。

本文来源:https://www.2haoxitong.net/k/doc/100e4d70de80d4d8d15a4fd4.html

《浅谈炉石传说开发技术.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式