游戏服务器设计的思考 — 从概念到设计

几年前,我对软件设计不过停留在教科书上的蒙胧概念,那时更多的精力是放在对语言工具的学习和使用上。

后来,逐渐积累技术架构方面的经验,对系统设计的方法和重要性有了一些实际的认识。但在过去几年的互联网应用里,以快速迭代和实现为目标的设计比较流行。这也是因为互联网的各种产品,也处于快速创新和试错的阶段,产品基础理论并没有太久的积累。

当我转入做游戏之后,除了技术和系统的架构之外,逐渐认识到了在这之前有一些更基础和重要的因素,那就是概念设计。概念设计可能不是什么专业的词汇,在我的理解里,对于游戏来说,核心的概念设计将是贯穿策划,美术和程序工作的重要纽带。策划和美术在基础的概念设计上提供更丰富的表现形式设计,程序则将这些概念设计用程序语言进行表达,提供所需的程序软件和工具。

如果没有清晰正确的基础概念设计,那么无论是策划所设计的游戏世界,还是程序所编写的软件系统,就有很大可能变成一些支离破碎的模块。对于游戏这种整体逻辑性要求非常高,同时在开发过程中需要数据驱动和工具支持的软件项目,也会带来很大成本提升和浪费。

从另外一个角度来看,程序语言,也是语言的一种。对于需要多个软件工程师合作的项目来说,程序语言就是交流与合作的重要途径,没有清晰统一的概念设计,在合作和沟通上都会造成很多的障碍。

在以往,我一般会从技术设计开始思考整个系统的原型。后来我意识到,技术层面的基础架构,并非是贯穿生产始终的根本,概念设计才是。因此,关于游戏服务器设计的思考这一系列写给自己作为备忘和今后实践的指导,我决定从概念设计这个本原的地方开始。

那么,对于游戏而言,这个概念的核心部分是什么呢?对游戏的定义很多,我觉得Rule-based System是最好的一个。Rules是一个游戏必不可缺的核心部分,因此,将Rule最为概念设计的核心开始是不错的名词选择。

玩家在游戏世界中的活动,都是处于特定的规则限制下,这些规则给玩家采取的行动策略提供产出,玩家在通过自身适应或挑战规则的过程和结果里,获得了情感上的愉悦或触动。

一些偏技术流的定义,往往将游戏直接描述为State Machine。这个定义从技术上看似乎更熟悉,但对于游戏里的各种机制而言,从Rule作为出发点要比从State Machine启程要更好。

Rule应该是独立而简单的。从技术的角度来说,Rules就是一组函数或者数据的集合。函数通过一些简单的运算从输入的条件得出结果,结果可能是另一组数据或者布尔值。另一方面,Rule本身可以是一个或者一组常量。 从游戏产品的角度来说,Rule通常应该是直接表现给玩家的内容。也就是说,如果我们将所有Rule用自然语言描述,那么就形成了游戏基本规则的说明书。

游戏的核心概念,游戏机制 (Mechanics) 将通过Rule的组合来实现。在现代游戏当中,需要关注的游戏机制通常包括了物理 (Physics),经济 (Economy),剧本 (Progression or Narrative),策略 (Tactical),以及社交 (Social) 这几个层面。

在这样的概念组织之下,可以发现几个有趣的地方。首先,从Rule的基本形式来看,函数式编程才是最适合游戏的编程语言理念,同时,在面向对象的设计中,应该更多的活用组合而不是继承。Scala语言中所提供的trait特性,在游戏服务器编写的表达上,将更加自然和灵活。围绕Rule和Mechanics的基本概念来设计,也避免从一开始就陷入具体系统的抽象设计和名词选择中去。实际上,最终产品的各种系统,都可以通过Rule构建的一些抽象基本元素去组合而成。

在有了Rules和Mechanics这两个基本概念之后,下一步便是对Rules的输入输出,以及Mechannics的各种基本组件做进一步的分析和概念设计。

这在下一篇文章里继续记录。