给开发组,关于 “策略卡” 和 “多重判断”的 一点建议。
-
[quote]原帖由 [i]deviljz[/i] 于 2013-11-22 10:41 发表 [url=http://bbs.xyz-soft.com/redirect.php?goto=findpost&pid=827089&ptid=53154][img]http://bbs.xyz-soft.com/images/common/back.gif[/img][/url]
你这个问题需要的是加个hp最低的同伴卡 [/quote]似乎没有这个策略卡吧?
我想与其 增加更多的 单个策略卡,为什么不调整下 多重卡的 作用呢?
-
我仔细查了下程序,原因比较复杂,我简单说明下。
soc的策略,在游戏里表现出来分为“条件”和“行为”2部分,而实际在逻辑上分为“条件”、“目标”、“行为”3部分。我举2个例子来帮助理解这一点:
例子1:当我方有人HP<50%时,使用治疗术。
例子2:当我方有人HP<50%时,使用火球术。在例子1中,条件:“当我方有人HP<50%时”,目标:“我方HP<50%的人”,行为:“使用治疗术”。
在例子2中,条件:“当我方有人HP<50%时”,目标:“最近的敌人”,行为:“使用火球术”。可以看出,“目标”这一项是没有直接体现在游戏策略设置中的,而且系统根据设置的策略判断应该选择什么样的目标,这是为了简化玩家设置策略的复杂度。
如何根据玩家设置的策略,选择出一个符合玩家期望的目标,这是我们在策略系统开发中遇到的最大问题。尤其是在多重判定卡的问题上有很多可能出现的问题,最开始我们考虑多重判定卡按照每条策略的交集来选择目标,这时出现了例3的问题:
例子3:
当自身HP<50%时,并且
对HP最高的敌人,使用火球术。如果按照交集处理,例子3的第一条策略的目标是“自己”,第二条策略的目标是“HP最高的敌人”,交集出来是空集,那么在2个条件都满足的情况下,只会对最近敌方目标使用火球术(这也是系统为了防止满足条件而不做出任何行动这种情况的默认处理:满足条件而找不到合适目标时对最近目标使用),但是显然设置这条策略的目的只是把第一条策略当作条件,而不想要把满足第一条策略的目标作为技能目标,这时候玩家就无法达到设置这条策略的目的。也就是说,如果按照交集处理,只要2个条件卡目标类型不一样(一个是敌方满足xx,一个是我方满足xx),出来的一定是空集,只会满足条件时对最近目标使用技能。
为了解决这个问题,我们把多重判定卡反过来处理,首先把周围所有我方敌方目标都加进列表,然后只会把“明确排除的目标”从列表里去除,最后从列表里选出合适的目标使用技能。在这里我用顶楼的例子来分析下:
例子4:
如果距离我6米内,有同伴的HP小于50%成立 多重
并且对我周围6米内,HP最低的我方 恢复术比如楼主组了个5人队,5×5=25个角色,敌方Boss1个。
策略开始:列表里有25个我方+Boss1。
执行第一条:判断楼主5个同伴的HP,其中有1个<50%,其他4个>=50%,这4个被排除掉。
执行完第一条:列表里还有21个我方+Boss1。
执行第二条:对列表里所有我方目标循环,找到一个HP最低的,对他使用回复术,这时候就有可能把同伴以外的角色作为目标。之所以会产生这种情况,是因为这样设置策略可以有2种理解:
理解1:
条件:“HP<50%的同伴”并且“HP最低的我方”
目标:“HP<50%的同伴”并且“HP最低的我方”
行为:使用回复术
理解2:
条件:“HP<50%的同伴”并且“HP最低的我方”
目标:“HP最低的我方”
行为:使用回复术
楼主是按照理解1来的,系统是按照理解2执行的(当然还排除了某些明确排除的目标),这时候看起来理解1是比较合理的,但是如果条件1稍微修改下:
例子5:
如果距离我6米内,有[color=Red]敌方[/color]的HP小于50%成立 多重
并且对我周围6米内,HP最低的我方 恢复术
把策略1的同伴换成敌方,这时候2种理解就变成:
理解1:
条件:“HP<50%的敌方”并且“HP最低的我方”
目标:“HP<50%的敌方”并且“HP最低的我方”
行为:使用回复术
理解2:
条件:“HP<50%的敌方”并且“HP最低的我方”
目标:“HP最低的我方”
行为:使用回复术
在这种情况下理解1的目标是空集,最终只会对最近目标使用回复术,这时候就反过来了,是理解2比较合理。可以看出,正因为“目标”这个因素没有直接体现在策略设置中,所以会对复杂策略会有不同的解释,而系统不论怎样最终只能选择1种理解,不管系统选择的是理解1还是理解2,都会在某些情况下看起来合理而在另一些情况下看起来不合理。所以我觉得解决这个问题的比较简单的方法还是加个hp最低的同伴卡比较好。
-
我方和敌方的问题确实没想到
多重的时候,玩家肯定是以最后一条为真正目标,也就是使用的技能目标
应该已技能使用的目标作为初始父集,策略卡中与初始父集没交集的都不应该做目标选择,只做条件判断
技能目标是我方的时候,关于敌方的策略卡都只做条件不做目标选择
技能目标是敌方的时候,关于我方的策略卡都只做条件不做目标选择
技能目标是自己的时候,目标已经肯定是自己,所有的策略卡都只做条件,不做目标选择
目前只发现这3种类型的技能目标例子4:
1.如果距离我6米内,有同伴的HP小于50%成立 多重
2.周围6米内,HP最低的我方 恢复术这样先判定恢复是对我方使用, 于是以我方的所有目标作为父集选择,标记目标为我方
然后判断第一条多重,同伴的HP小于50%成立
满足条件后,继续判断是否需要进行目标筛选,不满足就继续使用上一次的集合
因为是恢复和策略卡都是判定我方,满足条件,进行目标筛选,执行后,就剩下小于50%hp的同伴了
再继续最低hp判断,结果就是条件:“HP<50%的同伴”并且“HP最低的我方”
目标:“HP<50%的同伴”并且“HP最低的我方”
行为:使用恢复术例子5:
如果距离我6米内,有敌方的HP小于50%成立 多重
并且对我周围6米内,HP最低的我方 恢复术这样先判定恢复是对我方使用, 于是以我方的所有目标作为父集选择,标记目标为我方
然后判断第一条多重,敌方的HP小于50%成立
满足条件,继续判断是否目标筛选
因为是恢复是我方判定,策略卡是低防判定,不满足条件,不继续筛选
还是使用父集的我方全员进行下一条判断
再继续最低hp判断,结果就是在我方人堆里选择hp最低了新例子1:
如果距离我6米内,有同伴的HP小于50%成立 多重
并且对我周围6米内,有敌方HP小于50%成立 恢复术恢复是目标我方技能
第一条, 是我方条件,进行筛选,选择了符合条件的几个同伴
第二条, 是敌方条件,不继续筛选,使用上面筛选下来的结果作为技能目标结果就是
条件 “同伴的HP小于50%成立”并且“有敌方HP小于50%成立”
目标 “同伴的HP小于50%成立”新例子2:
如果距离我6米内,有同伴的HP小于50%成立 多重
并且对我周围6米内,有敌方HP小于50%成立 火球第一条策略是选择我方,火球是敌方目标,不一致,不筛选目标
第二条是敌方判断,筛选目标
结果就是
条件 “同伴的HP小于50%成立”并且“有敌方HP小于50%成立”
目标 “有敌方HP小于50%成立”新栗子3:
如果距离我6米内,有同伴的HP小于50%成立 多重
并且对我周围6米内,有敌方HP小于50%成立 自愈自愈的目标固定为自己,其他的策略卡只为条件判断,不做目标筛选
结果就是
条件 “同伴的HP小于50%成立”并且“有敌方HP小于50%成立”
目标 自己