« January 2013 | Main | March 2013 »

February 22, 2013

Clash of Clans

最近在玩一款 iOS 游戏, 叫做 Clash of Clans 。这款游戏让我发现,手机/平板的网络游戏和传统网络游戏、网页游戏,除了 UI 方面,设计也是可以有很大的不同的。

对于移动平台,最大的不同在于,玩家的游戏时间碎片化。所以能集中精力的游戏持续时间不宜过长。应该在五分钟以下。当然,也需要提供玩家长时间持续游戏的途径。

玩家的游戏时间很自然的分为了在线时间和离线时间。所以,离线玩法相当重要。

COC 开创了一种:在线创造内容,离线后供其他玩家娱乐的模式。这是以往的游戏所不具备的。

在线的时候,除了攻打其它玩家的城市外,你可以充分享受城建的乐趣。研究如何布局设置陷阱,而不被别的玩家攻打下来。这使整个游戏的内容极大的丰富。比简单的离线比拼数值要有趣的多。

COC 的随机撮合对手的方式也是对以往传统网页战略游戏是一个重大的改进。

它不再允许主动攻击特定玩家,而是系统尽可能的找到实力相当的对手。这使得玩家不至于过于轻松而失去兴趣,也不会被频繁虐待导致流失。免费玩家可以在游戏中找到和 RMB 玩家相同的乐趣以及公平性,而他们虽然不付费,但却创造了高质量的游戏内容。玩家永远可以让自己的城市逐步发展起来,失败的挫败感很弱。而战争无论输赢都有相当的开销,以至于不可能压制性的横扫世界。

COC 简化了所有可以简化的设计,只留下了核心乐趣。上手非常简单,但在简单规则下可以挖掘的技巧又非常多。这些都是值得游戏设计者学习的地方。我相信我们这个山寨大国已经有很多团队想微创新一个中文版的 COC 了。一个不经过打榜,没有宣传的游戏,可以坐稳各个地区 app store top 10 的位置,而迟迟没有类似游戏出现。可想而之,山寨的诱惑该有多大。

不过我认为想抄一个 COC 并不简单。过年在玩游戏的同时一直在想,移动平台的开发到底和传统网络游戏有什么区别?

我认为主要有两点:

  1. 移动平台的网络注定处于一种不稳定状态。玩家会在地铁上游戏,会在游戏时突然接一个电话,会因为坐电梯失去信号…… 所以在游戏设计时,必须解决这个问题。不能默认网络是稳定的,需要适当的在没有网络连接的时候还可以流畅操作。

  2. 移动设备的内存资源有限、下载客户端的体积也有限。现在在 iphone 上做的游戏所受的限制,不比 10 年前我们做梦幻西游时强太多。单就 COC 而言,10 个兵种加上升级的表现不同,以及建筑本身各个级别的动画,如果不想办法,这些序列帧图片可以轻易超过 100M ,但它在 iPAD 1 上却可以流畅运行。这都是一般开发公司想复制一个有同样图像表现力的游戏所难以克服的技术障碍。

February 01, 2013

C# 版的 Lua

我们游戏客户端使用了 Unity3D , 我们不打算给它写 C 插件, 所有的开发都在 mono 中进行的。

由于某些需求,我们需要在客户端解析一些 Lua 脚本(这些脚本同时供我们的服务器使用)。所以,就有了阿楠同学开发的 UniLua

这个世界上已经有了很多的 .net 版的 Lua 实现,但是都不完整。它们大多是基于 Lua 5.1 甚至更老的版本的。还有一些只能解析 Lua 的字节码(这样很容易实现),而不能让 Lua 源代码直接工作起来。这使得在 Lua 中很常见的 meta 编程变得不可用了。

这个版本实现了 Lua 5.2 的大部分特性。特别是对 parser 和 coroutine 的支持,是许多其它实现所不具备的。

Lua 的基本类型:string / table 都用 C # 自己的原生实现对应,gc 也直接依赖 .net 的环境。由于工作在 mono 环境中,所以原来对于 Lua 很重要的一部分:和 C 交互的 API 变成了和 C # 交互。

UniLua 着重于在 Unity3D 所嵌入的 mono 中实现 Lua 5.2 。而 mono 所支持的是官方版本的 C# 的一个子集。所以理论上 UniLua 也是可以用于官方的 .net 环境中的。