游戏论(二)
——游戏的组成
本章介绍游戏的组成元素。在此提出的只是一种游戏的划分方案,即认为游戏是由命令、类和系统组成。当然还可有其它划分方案,本篇论文中使用此种划分方案。
命令
命令是游戏提供给玩家的一个改变游戏世界的途径,其对应着游戏世界的某些改变。一条命令是由其所需要的参数和命令的处理方式组成。命令的处理方式也就是一段程序(不一定是电脑程序,应该理解为要做的工作),指明游戏的实现者——电脑或人(如果是用棋盘和棋子下棋)——应该做的工作,此工作只能是改变游戏世界,也就是改变游戏元素的取值。
象棋游戏中,只有一个命令——移动棋子。此命令需要的参数是被移动的棋子和移动的目的位置。其处理方式为:根据象棋规则判断此命令的合法性(即移动的路线对于被移棋子来说按照象棋规则是否可行——如:马走日字格,移动的目的地是否被己方棋子所占等——以及此轮是否该这方棋子走),如不合法就结束命令。如合法,改变被移棋子的位置为移动的目的位置,如果目的位置有它方棋子,使那枚它方棋子消失。最后让对方走棋。
根据上面的说法,可知象棋的游戏元素至少有如下游戏元素:
某枚棋子的位置。
某枚棋子是否存活。
某枚棋子的种类。
该哪方走棋。
上面说的象棋只有一个命令,但正规比赛时,还有记时这个命令,也就是记下这一步与上一步之间的时间。所以这种象棋多了两个游戏元素——时间和每一步所用的时间。应注意到此处的时间并不是象棋这个游戏的本身规则,而是由于下象棋的玩家在我们这个四维空间中实现象棋的规则而导致的附加游戏元素。如果同意无时间限制,即即使两、三年才走一步也可以,那么这盘象棋就没有时间这个游戏元素。
所以,要找出游戏的游戏元素,只要找出游戏的所有命令,再分析每个命令的处理方式,处理方式中改变的那个东西就是游戏元素。而一般情况下,命令就是玩家被允许能做的事。
类
类也就是种类的意思,同面向对象编程思想中的类的意思相同,具有多个属性及多个规则。每个属性的取值的一个组合,称为类的一个实例,也叫一个对象。如:桌子类,有桌脚数和颜色两个属性,则该类的某个实例可能为四只脚、红色,则我们可以说这个实例表示一张四只脚的红色的桌子。
人的记忆力很差,不能记住千变万化的东西,如一幅画。但人又经常需要一看到某个东西时,能搜出它的大致资料,于是,人想出了种类。人将他们看到过的形形色色的东西进行归类,这样当人看到一个东西时,他不再去想这个东西是什么,而是想它是种什么东西。因为种类的数量远远少于东西的数量,所以人可以很快找到所想物体是哪种东西,也就很快得到此物体的大致信息。应注意,当将种类分得很细的时候,也就不存在种类了,或可以认为一个种类就是一个物体。
在象棋游戏中,如前所述,有如下的游戏元素:
1. 某枚棋子的位置。
2. 某枚棋子是否存活。
3. 某枚棋子的种类。
4. 该哪方走棋。
其中的1、2、3游戏元素逻辑上表示的是同一种东西(棋子)的状态,所以在这里我们就应该定义一个类——棋子。其属性有三个:位置、是否存活和种类。这样我们就可以说这个象棋游戏只有33个游戏元素(象棋有32个棋子),而原来它有97个游戏元素,显得更简单了。
注意,类的存在不是必要的,它只是为了让人更好的了解游戏规则而人为定义出来的,只是为了使纷繁的游戏元素有条有理。所以不同的人可以定出不同的类,这样好象显得类没有多大意义,所幸的是大部分人经常都会有大部分相同的类的定义,如象棋,几乎每个人都下意识的定了棋子这个类。而对于复杂点的游戏,如RPG游戏,有些人就只定了加魔法的药和加血的药,而有些人就定的是药,可加血、魔法值、火属性等,将其视为一个类,而不加细分。通常后者是程序员而前者是玩家。
还应发现,游戏规则不定义任何的类,但游戏规则毕竟大多数是人定的,所以在规则的描述时都大量的使用了类。几乎任何棋类游戏都有棋子这个类。
有些规则是专门针对某一个类的,我们将这些规则称为这个类的规则。如象棋中的马走日、象飞田,都涉及到了棋子类中的种类这个属性。这里就有了一个问题:这个规则到底是属于哪个类的。因为有些规则可能涉及到了多个类的属性,如RPG游戏中的,玩家攻击到敌人后,敌人的生命值减去玩家的攻击力的数值。此处就涉及到了玩家这个类的攻击力的属性和敌人这个类的生命值的属性。在此我们认为:规则的主语是哪个类的属性就是哪个类的规则。所以上述的规则应为敌人的规则。
系统
随着人们生活质量的提高,开始了对精神的需求。游戏机的出现,游戏的实现手段变多,游戏得到发展。但由于技术力的限制,游戏在纵深方向上发展了一段时间后就停滞了,开始横向发展,游戏中也就出现了系统。
为了使游戏更耐玩,就要增加规则的复杂度,也就是大量的命令和类的定义。但由于大部分游戏在设计时是为了在游戏机上执行,机能的限制导致游戏不能过于复杂,也就是纵深发展受限,所以在设计游戏时,设计两个游戏,再提供一些规则以使这两个游戏间有关联,且可以切换。这就好象我们小时侯打牌,输了的钻桌子。打牌是一个游戏,钻桌子又是一个游戏,之间的关联就是在打牌游戏中输了的玩家玩钻桌子游戏,这样就横向增加了游戏的复杂度。
通过上面的分析,可知系统就是一个游戏,有自己的命令和类,但又和所属游戏或所属游戏中的其它系统之间保持着或多或少的联系。由定义可知,系统可以有子系统,子系统又可有子系统,形成树的结构。作为树根的那个系统我们称之为入口系统。一个游戏最先开始运行的规则总是入口系统的规则。
上述的打牌输了的钻桌子的入口系统就是打牌,而钻桌子是打牌的一个子系统。通常的电脑或电视游戏中,在最开始时都是一个选择开始、读档、选项等的界面,这实际是一个系统,而且是这个游戏的入口系统。玩家在里面能做的命令就是选择一条指令(开始游戏、读档、退出等)并执行。还有选项对话框其实也是一个系统。所以几乎所有的电子游戏都是多系统的游戏。
在进行游戏设计时,建议父系统不能使用子系统定义的类及命令,子系统可以使用父系统定义的类和命令。并不是说一定得按这个规则,但按这个规则显得有条理,层次分明。
小结
前面我们定义命令、类和系统,都是为了让我们更好地把握一个游戏的规则。一个游戏的规则中的某些规则我们认为是在定义一个命令,我们就可以说这个游戏定义了一个命令,从而就将那些描述这个命令的规则去掉,以简化游戏的规则。同样,类和系统也是这样,只是为了简化游戏的规则的描述,使人更容易理解。
将游戏看成一棵树,树的根结点代表游戏的入口系统,入口系统又由其子系统组成,每个系统都包含有自己的命令和类的定义。但是注意,游戏的纵深方向的发展并不是说树的层数的增加,而是树的某个结点内部的规则的复杂化。虽然游戏的横向发展和纵向发展都可以增加游戏的可玩度,但从人的心理方面来说横向发展增加的可玩度的质量低于纵向发展增加的可玩度,这将在后面的篇幅中体现出来。