载入中...
当前位置: 首页 > 评论心得

三国游戏人物属性改良V2.1-新相性

来源:三国游戏网作者/编辑:平凡人张衍

本文试图在《人物属性改良(非完全版)》一文的基础上,对其中部份内容的实现提出少许思路和方式。因为我不是专业编程者,仅粗通C/C++和VB、ACCESS和SQL,故无法完全从在游戏程序编写者的视角看待问题,并且不排除存在编程角度上的认知错误,望方家见谅。

V2.1讨论新相性。新相性=价值观+人际关系+亲近程度+性格。

非完全版中,对于相性是这样阐述的:

“认为相性不应当是一个单纯的数值,对其进行改良,将其混合化,相性=志向+关系+性格。志向追求:野心、自保、正统。交际关系:亲属、师门、朋友、同乡、部属。性格状况:急躁-稳重、热烈-冷漠、狂傲-谦卑、忠义-功利。每项有强弱,以1-3表示弱-强,3适用于少数人极强的性格,1和2适用于大部分人。没有0,即不存在某一种性格不偏不倚。”

赞同并吸纳琅玡网友“国士无双”的相关回复。前文中设了三项志向、四组性格,不足以描述人物特质。修改如下:新相性=价值观+人际关系+亲近程度+性格。

1,价值观:保守-变革、雄心-平和、大义-功利。“保守-变革”指对维护最高统治的认同,汉让禅前指汉正统,让禅后指人物所在势力。“雄心-平和”指对事业开创、发展的积极性。“大义-功利”指对道义的信仰与遵守程度,为功利者应当占多数。

“价值观”的数据库属性至少包括如下项目:类型字段号(唯一的索引名)、人物字段号(human_no)、属性。定义属性的值为由0、1构成的三位长的排列组合。最高位0代表保守,最高位1代表变革。以下类推,一组例子:

刘备为“保守”+“雄心”+“大义”,000;

李严为“保守”+“雄心”+“功利”,001;

董承为“保守”+“平和”+“大义”,010;

杨仪为“保守”+“平和”+“功利”,011;

曹操为“变革”+“雄心”+“大义”,100;

袁绍为“变革”+“雄心”+“功利”,101;

稽康为“变革”+“平和”+“大义”,110;

张鲁为“变革”+“平和”+“功利”,111。

刘备的价值观的表现形式:value-liubei-000。

在此基础上,给出价值观判别模块valued_discretion的设计。游戏对某两个人物进行价值观认同的判别。

输入接口:判别对象的人物字段号human_no,两个;

输出接口:判别标志位A(表示两个人物的价值观一致程度);

内含变量:局部变量M、N、P,判别标志位A;

编程思路:调用value数据库,以给出的两个hunam_no的值为索引查询,得出两组01排列组合,分别赋给变量M、N。将M、N做“异或”运算,得到的结果赋给变量P。再从P当中找到“0”的个数,赋给判别标志位A。有3-0四个值,“3”表示最一致,“0”表示最相异。标志位A为该模块的输出结果。(如果以P中“1”的个数为判别位的赋值依据,则表示价值观的相异程度。)

2,人际关系:亲属、僚属、师承、乡土,共四列。设建立一个二元矩阵的数据列表:array[a][b],为标志位集合。标志位值为0或1,0表“非”,1表“是”。具有唯一性,任何一列人际关系里只允许一个1出现。以“乡土”一列为例,当a[3][1]=1(同村),则置a[3][0]、a[3][2]、a[3][3]=0。

array[a][b] b=0 b=1 b=2 b=3 b=4 b=5  b=6  b=7

a=0  祖父 叔伯 兄弟 子侄 孙儿 父亲 亲子 无

a=1  上级 同级 下级 共事 主公 幕僚 无

a=2  师父 同门 弟子 弃徒 无

a=3  同族 同村 同县 同州 无

a[0][*],亲属一门。在此出于论述方便,未考虑兄弟排行和女性的因素。(绝非歧视女性)

人际关系亲属数据列表Relatives,一个家族构造一棵子树,任何一个结点和叶子至少要包括以下几项:索引、初始坐标、人物、父结点、值。

初始坐标,子树中的根结点。家族中第一个出现在三国历史舞台上的人物。如诸葛氏家族,以诸葛诖为初始坐标。(诸葛诖是诸葛亮的父亲,东汉末年任泰山郡丞。)

人物,对应子树中包括根结点在内的所有结点和叶子。家族中所有在历史舞台上出现过的人。其属性为人物字段号human_no。

父结点,“人物”项的父亲结点。根结点此项置0。

值,对应子树中任意结点及叶子至根结点的权。人物与初始坐标的相对距离。如果定义诸葛诖是诸葛氏家族的初始坐标,则诸葛玄的差是0,则诸葛亮、瑾、诞、均是1,诸葛恪、瞻是2,诸葛尚、京、恢、颐是3。

人物亲属判别模块Relatives_discretion,主要用做对一个大家族里非直系关系人物的亲属关系的判别。输入接口:人物,即Relatives列表中的“人物”;输出接口:a[0][b]=1。

判断当前对象与目标对象亲属关系的算法思路:1,是否在同一棵子树内;2,是否在一棵简单子树内;3,对比结点或叶子的权,依照权的值差确定深度;4,深度差+合适修正值对应array[ab]。

判别流程:1,根据“人物”,从Relatives列表中查询出相关信息;2,对两者的“初始坐标”进行判别;3,“初始坐标”不一致,则表明无亲属关系,将array[a][b] 中对应列的“无”项赋值1;4,若“初始坐标”一致,再将两者的“人物”与“父结点”交叉判别,即,甲的“人物”与乙的“父结点”,甲的“父结点”与乙的“人物”,前一项为真,则a[0][1]=1,后一项为真,则a[0][1]=1;4,若交叉判别全都不为真,再对两者的“值”顺序求差,差值+2后赋给中间变量B,这里的2为运算修正值;5,此时B就是array[a][b]中的b,把对应的a[0][b]=1即可。

例子:诸葛恪与诸葛尚为当前对象,对应初始坐标诸葛诖的“值”为分别2、3,两者的顺序值差为-1,+2后将a[0][2]=1,即判别“诸葛恪是诸葛尚的叔伯”。若反序,判别尚对恪的关系,则值差是3-2=1,+2后是把a[0][3]=1,得出“子侄”关系。

以下“僚属、师承、乡土”诸项的数据列表及判别模块的设计思路,与“亲属”一项类似,具体属性只须做适当调整即可,在此不再多讲。(好累啊~~~~)

a[1][*],僚属。其中,“上级、同级、下级”为公家上下级关系,也适用于非直属的上下级。“幕僚、主公”为私人门客的上下级关系,“同级”也用于表示门客间的关系,“共事”指某人物的门客与主公同势力下的人物的关系。

在行政的“官职体系”部份,对所有职位设置参数--“职位级别”,明确其相互关系。当玩家查阅游戏人物的“僚属关系”时,系统将对查阅对象与相关人物的“职位级别”参数进行对比与判别,a[1*]即为判别后所置的标志位。

“官职体系”设计时,要考虑公家职位与私人部曲的相互关系,这实际上可以将两者看成两棵子树。在此,我将前者称为I型子树,以公家职位为根、结点和叶子,根结点指向皇帝;后者为II型子树,以属官职位为根、结点和叶子,根结点指向某武将。历史上,大量存在II型子树的根结点的人物指向与I型子树中的某个中间结点或叶子的人物指向一致。(哪位仁兄数据结构学得好,把游戏里要用到的官职位总结一下,画个树图出来瞧瞧。)

a[2][*],师承。多用于文士的学习,如刘备、公孙瓒求学于卢植。

a[3][*],乡土。同族指汉族以外民族。

3,亲近程度,仇恨、厌恶、疏远、识闻、友好、亲密、结义。设一透明的“有向”参数“亲近度(B)”,其数值以1-999对应“仇恨-结义”各级。(透明,即对软件制作者可见,对使用者不可见。不同于俗称的隐藏参数。)当B=0时,表明两人不认识,或从来没听说过对方。

如果出于简便考虑,可仅设置一个“亲近度”的参数,就像现在大多数三国游戏一样。但我有种想法,是来自“模拟人生”系列游戏的,即将“亲近度”进一步衍生成“有向亲近度”。

玩家控制人物与某游戏人物之间存在两个单向参数,分别表示两人物各自对对方亲近程度的认知,玩家对NPC的亲近程度为B1,反之NPC对玩家为B2,两者不一定相等。这样可以包容这么一种情况:“我对你好,你却不对我好。”在玩家向NPC提出要求时,影响NPC的判断决定,参与计算的是B2。而NPC在向玩家提要求时看的则是B1。在日常交往当中,玩家的行为(即游戏当中的选择)会影响B1变化,B1又通过一些规则影响B2。这个规则主要与NPC的人物特质(价值观、性格、能力等)及游戏身份(地位、利益、资源等)有关。而NPC与NPC之间,可以考虑只用人物特质来确定亲近度的变化。

但一旦引入“有向亲近度”,我担心:游戏会不会因此而过于侧重表现个体生活,而削弱战略感。光荣三国8里,只一个“敬爱”就让玩家自愿或被迫狂点鼠标,而引入双重亲近度是否会消耗玩家更多的精力?

对此我想到的解决之道是,去除大部分专门加亲近度的指令,仅保留少量且要付出相当游戏资源的专门提升亲近指令(如家宴、送礼,花费大量金钱)。让亲近度产生变化的主要途径是,在玩家人物做事的过程当中自行变化。做事可以有多种方式,不同方式会依据NPC的人物特质、游戏身份产生影响,以此决定NPC对玩家人物的B值。这样,玩家不需要专门为亲近度消耗大量精力与时间,只要考虑选择何种方式行事合适就行了。

现阶段对该方面考量还不充足,仅仅是个思路。

4,性格:耿直-圆滑、开阔-狭隘、狂傲-谦卑、儒雅-尚武、诚信-疑心、简约-浮华、急躁-稳重、热烈-冷漠,共八组(可能这些还不足以包容所有三国人物的性格,哪位仁兄心理学学得好,用弗罗伊德的理论分析一下)。表现方式依旧是组内对应,且以1-3级做为弱强的描述。组与组之间存在优先级之差,主要由某些性格的强弱决定。

耿直-圆滑。耿直,一切行事以达到最佳效果为目标,不考虑旁人感受,圆滑反之。

开阔-狭隘。开阔,只要旁人做事不侵犯其价值观或亲友或其它重要利益,便不会大幅削弱亲近度。

狂傲-谦卑。谦卑,恭谦与自卑,均表现为对名士、权威等位重者恭敬,故不做区分。狂傲反之。

尚武-儒雅。尚武,喜好武艺、军事,儒雅好诗书画。

诚信-疑心。诚信,相信大多数人的话,也不会为了利益而刻意欺骗别人。疑心反之。

简约-浮华。简约,生活比较随意,不追求什么。浮华反之。

急躁-稳重。急躁,容易被突发事件激怒,有利于单挑,不利于带兵打仗,稳重反之。

热烈-冷漠。热烈,精神常常保持一种兴奋状态,冷漠反之。注意急躁与热烈的区别,前者指受突发事件影响的程度,后者指平时就保持的状态。

虽然策划里把性格设为八组,实际上在做数据库设计时这部分只需要如下一个简单结构:索引(人物字段名)、a1(耿直-圆滑)、a2(开阔-狭隘)、a3(狂傲-谦卑)、a4(儒雅-尚武)、a5(诚信-疑心)、a6(简约-浮华)、a7(急躁-稳重)、a8(热烈-冷漠)。每一个属性值为0-5,依次表示强-弱-强。如,a1=0表示耿直3,a1=2表示耿直1,a1=3表示圆滑1,a1=5表示圆滑3。

判别任意两个人物的性格异同程度,最基础的方式就是求两者的性格差值。为了更明白地解释,我将性格差值分成两级,基础性格差值M、延伸性格差值N。设有甲、乙两人物。

基础性格差值,M=%a1+%a2+...+%a8。分别对甲a1-乙a1、甲a2-乙a2、甲a3-乙a3......甲a8-乙a8,进行求差运算,差的绝对值存放在参数%a1至%a8。显而易见,M的值在0-40之间波动。差值越小,性格越相近。

延伸性格差值N,用于表现同种性格阴阳两面的对立,如耿直3(a1=0)与圆滑3(a1=5)。对求差运算所得的%a1至%a8进行判别,有一项为5,即同种性格极度对立,则N=N+F,N的值在0-8F之间波动。其中,F为修正值,如果把F设为5,则使N的波动范围与M一样大,均为0-40,两者的权重为1:1。F=5不一定是个恰当的修正数。

可能已经有人想到,完全可以在进行基础性格差值M的编写时,就顺带完成延伸性格差值N,但我考虑到在进行游戏平衡性设计时,F可能要多试几次才能得到一个比较合适的值,所以认为最好把性格判别模块分成两个子模块,分别得出M、N。而求N的模块,可保留对F的设置接口,方便参数调试。

当然性格除了用在人物间判别性格差异方面,还有别的更广泛的地方,如性格对事务的处理。因为本人所学有限,仅提出一种最没有技巧的办法来体现八组性格,即,a1-8对游戏选项权值产生影响。设一NPC面临K个导致不同结果的选项,游戏设计者确定有P种性格对某一选项产生影响,按照价值观、结果、性格的判别顺序决定选择哪一项。(实际编程当中,可能要用到多层IFELSE嵌套,再加上模块调用,不知道能不能控制好时间和空间复杂度?)

前文按照“相性=志向+关系+性格”的标准,设计了一套人物仕官程序流程。在此,以修订了的“新相性=价值观+人际关系+亲近程度+性格”为基础来解释描述。

人物主动仕官:

(1)游戏的势力评价模块给出输出接口:声誉、军力等;

(2)根据人物的能力与人际关系(认识哪些势力的人)确定对不同势力判断的准确度;

(3)把(1)、(2)两步得到的数据加权计算,得出该人物对势力的实际判断,输出结果至少包含声誉与实力两部分内容;

(4)根据人物能力与价值观确定仕官标准,将第(3)步的结果与之对比,滤去不合格势力;

(5)根据人物价值观,在达到标准的势力里确定优先顺序,前去拜访保荐者;

(6)人物评价模块根据保荐者的能力与新相性给出实际评价,包含能力、价值观、人际关系、亲近程度、性格等;

(7)人才录用标准模块根据该势力状况和保荐者的能力与新相性给出录用标准,包含能力、价值观、人际关系、亲近程度、性格等;

(8)比较(6)(7)两步结果,能力、价值观、人际关系、亲近程度、性格等有任何一项达到标准既可获得录用,修改该人物身份,及相关其他信息;

(9)未达到任何一项,则录用失败,该人物将四处游逛结识更多人物并重复上述出仕步骤,直至成功。

如果是某势力主动录用人才,则:

(1)人才录用标准模块给出录用标准;

(2)根据录用官员的人际关系搜索在野人才;

(3)游戏的人物评价模块给出对在野人才的评价;

(4)根据录用人员的能力与人际关系确定对所有在野人才的实际判断,确定达标人才,前去拜访;

(5)游戏的势力评价模块给出该势力的声誉、军力等;

(6)根据人才的能力与人际关系(认识哪些势力的人)确定对该势力判断的准确度;

(7)把(5)、(6)两步得到的数据加权计算,得出该人物对该势力的实际判断,输出结果至少包含声誉与实力两部分内容;

(8)根据人才的能力与价值观确定仕官标准,并以此判断该势力是否达标;

(9)录用某人才失败后,间隔一段时间再次录用此人,每失败一次间隔时间变长。

仕官与录用部分,算是策划而非设计,但叙述过程中我强调了模块、接口。我想,司马悠和陈君所主张的“干实事”,应该包含了各模块的编写。这里每一步基本上都可以由一个模块实现,接下来所要做的就是用模块实现。

专题列表:三国游戏 三国游戏策划

分享本文地址:https://www.sanguogame.com.cn/issue/xingxx.html

--> -->