植物大战僵尸吧 关注:571,669贴子:5,142,262

回复:基础植物的合成理论探讨与设计初步

只看楼主收藏回复

### 同质植物的组合
  下面开始探讨最关键的组合效果,目标是尽可能用统一的规则实现,避免或减少对特定组合的特殊程序处理。
  先从最简单的同质植物组合说起,或称纯种组合,就是两个或多个相同的植物组合该呈现什么效果。这个却可以当作一种特殊规则来处理,这也没有主从植物的区别。原则是同质植物组合不改变植物的特性,只作数值的增长,并且要大于叠种的线性增长。
  子弹类植物如豌豆可以设计为攻击力指数增长,两株是 2 倍攻击,三株是 4 倍,四株是8 倍。按此前金盆 300 空间上限计,豌豆最多叠种 6 株,攻击力是 2^5 = 32 倍。由于指数增长速度很快,为避免将来扩展空间上限导致数值失控,可预防性设个软上限,比如最大允许 256 倍。
  灰烬类如樱桃炸弹,有两个维度的数值,范围与伤害。同质组合时可以设计两个公式分别增长。比如每多一个樱桃炸弹,范围加半格,伤害加一半。按之前设计,单个樱桃 3x3范围,种植空间 100,金盆最多装三个,增长到 5x5 范围的二倍爆炸伤害。高伤害的灰烬组合可能常溢出伤害,不一定实用,但数值规则实现简单。
  概率类数值可用多次掷骰来递增。例如假设一个玉米的定身概率是 R,那就生成随机数一次,如果小于 R 认为命中。如果两个玉米组合,则先随机一次,没命令中的话再随机一次;其概率估算是 1-(1-R)^2。同理,如果 n 个玉米组合,那就最多随机 n 次,直到命中为止,其概率估算是 1-(1-R)^n 。其实这与叠种的独立计算概率几乎是一样的,如果一定要体现组合的数值优势,可以额外增加掷骰次数。
  由此可见,由于不同植物的特性,它的核心数值是不同的,数值增长方向(公式)自然不同。最坏可能是每种基本植物要做一个同质组合特例,但这也是线性复杂度。况且,在实现基础植物时,也可视为单株组合,这些数值参数,完全可以配在基础植物表,统一处理。那么只要实现了基础植物,也就几乎支持了任意数量的同质植物组合。


IP属地:广东16楼2024-11-28 15:41
回复
    ### 子弹植物组合
      常规站场植物应该是数量最多的一类植物,它们有不同的攻击方式,发射不同的子弹,所以这里统称为子弹植物。不妨以一个示例来说明设计思路,假设我们想将豌豆、大喷与玉米组合在一起,那该是怎样的攻击效果。这里仍然侧重讨论内在逻辑效果与伤害计算,暂不涉及子弹的外观该如何表现。我认为内在逻辑的合理性与一致更重要,美术外观非我擅长,可先将就再优化。
    #### 组合效果贡献分量
      对于复杂事件,我们一般采用分析的手段,将大问题拆分为小问题。子弹攻击涉及植物与僵尸两端。先直观理解一下,子弹从植物端发起,主要有攻击力、频率、弹道等属性,僵尸端主要是伤害结算,可能的影响因素有受击部位,抗性,溅射范围,debuf 状态等。
      主从组合模型解决了弹道问题。攻击力与频率是数值问题也简单,先定个基准,攻击力相加,频率取平均。假设原叠种植物豌豆、大喷、玉米的子弹攻击力都是 20 ,组合后视为一种抽象子弹,攻击力标准就是 60 ,至少不低于叠种效果。又因为只有一种抽象子弹了,频率应该拉平,不能按叠种那样各行其是。取平均容易想到有个策略意义,高攻低频的植物与高频低攻的植物组合,例如西瓜与胆小菇,只要胆小菇的攻击频率比西瓜高,那它提供的攻击力加成很少也对西瓜有价值。
      另一方面,子弹命中后的攻击效果,那就复杂了(除非只按攻击力扣血,却又很无趣)。先不管这个效果怎么做,当作黑盒考虑一下,既然是组合植物,那它应该是综合了参与组合的多种效果,或者说原植物对组合分别有一定的贡献。据此逻辑拆分,再提出组合效果分量或贡献分量的概念。假设用 X Y Z 三种植物组合,它们对组合效果的贡献分量是 xy z ,那就记为 (x,y,z) 表示组合效果,或组合植物。
      这里的效果一词是狭义的效果,特指子弹攻击后的效果,暂时比较迷糊不知该怎么搞的那部分。有时我们讲植物效果则是指广义的效果,一次子弹攻击完整生命周期的效果,或更宽泛地该植物在战场上的总体效果。请注意上下文区分。
      基于组合效果贡献分量的概念,我们先定下一个总体规则。程序实现组合植物效果的过程,就是依次应用每个效果分量。
      这个过程,其实与叠种植物效果的实现是类似的。只不过叠种植物互相独立,不是同频的。有可能在第 1 秒执行 x 效果,然后第 2 秒执行 y 效果,第 2.5 秒执行 z 效果。而在组合植物,则是同时执行 (x,y,z) 效果。这其实有很大的相似的,程序合理设计可复用模块。
      问题的关键于是转化为如何设计各植物在组合效果中的贡献分量,使其组合效果平均优于叠种效果。然后程序才好根据设计要求进一步抽象,提炼模块实现。


    IP属地:广东17楼2024-11-28 15:42
    回复
      2025-11-09 16:15:56
      广告
      不感兴趣
      开通SVIP免广告
      #### 分量效果头脑风暴
        以具体例子来讲,我们想设计豌豆、大喷、玉米的组合效果,那就先考虑一下各植物在组合中能贡献什么效果,该效果应该与原基础植物不完全相同却又有一定的联系。经过一番天马行空的头脑风暴,或许能为每个基础植物列出许多条效果,如果不好选择,那就让程序随机从中各选一条进行组合。
        比如豌豆射手(植物X),拥有如下之一的组合效果(贡献分量)可能是合理的:
      1. 命中僵尸有一定几率爆头;
      2. 有一定几率碎甲,击破正面防具;
      3. 有一定几率击退僵尸半格;
      4. 有较低几率击退一格;
      5. 给命中僵尸加红温效果(参考融合版的debuf增伤)
        大喷菇(植物Y)可列如下效果:
      1. 命中后有两格的穿透伤害;
      2. 命中后分裂出伤害为 20 的孢子子弹造成四格的穿透伤害;
      3. 秒杀两格内无防具普通僵尸(或限制下,造成本身生命上限 50% 的伤害)
        玉米投手(植物Z)可列如下效果:
      1. 有一定几率投出黄油使命中僵尸定身。
        假设我们才尽了,对玉米投手就想到这一种效果,那也没事,基础玉米的定位就是概率控制。如果要硬掰,也可拆成两档控制,一档定身概率稍高,但定身时长稍短,另一档概率较低但定身稍长。
        现在用程序从以上三个列表中各随机抽取一个分量,不一定是等概率的,可以根据各分量强度评估设计不同的权重。假设抽取到的是 (x1,y1,z1),那么这个组合植物的效果是:发射一枚攻击力为 60 的子弹,对命中僵尸有一定的几率爆头或定身,然后有两格的穿透伤害。
        按这种模型,植物组合的效果是随机生成的,即使相同的叠种植物,每次戴套都可能是不同的组合效果。如果厌恶随机的设计,那么每个基础植物的组合分量列表都只设计一个就好了,保证每次都抽到它,所以随机组合可以兼容不随机。
        这里的方案,组合植物不是像杂交版那样预设而从卡槽上种下的,而是在游戏过程中生成组合,故随机是可取的。而且这里的组合追求任意植物组合,确定性设计很难保证每种组合都好用。而随机组合,只要有一定的可用率,即使随机出一些不好的组合也是更能被理解的,并且刷组合也是一种玩法追求。


      IP属地:广东18楼2024-11-28 15:43
      回复
        #### 子弹的生命周期
          上节对于植物的组合及其分量效果,是用自然语言描叙的,离程序实现的可能还远。这里也提供一种设计思路。
          先综合分析与评估在头脑风暴中产生的各个植物的各种贡献效果分量的描叙,当作初始设计需求,抽象出共性,设计出一版实现方案。再重新审视原头脑风暴列表,对效果描叙进行优化,使其表达更准确。对于一些难以实现的孤例可暂时放弃。然后根据已实现的程序架构指导后续其他效果分量的设计。
          例如,根据上面的描叙,考虑一枚子弹的生命周期,从发射到伤害,可大致归给出以下几个阶段:
        * 攻击力集成阶段
        * 攻击频率规划阶段
        * 弹道飞行阶段
        * 命中首目标结算阶段
        * 溅射结算阶段
        * debuf 状态结算阶段
          在以上的示例中,玉米的黄油定身显然是个 debuf ,而豌豆的爆头与破甲,其实也可当作 debuf 。可先把 debuf 当作个筐,把那些不好归类统一处理的都往里装。当然,最终每种 debuf 可能要分别特殊处理。
          此外,上面的示例中,主要考虑的是后面几个结算阶段。当提出这个生命周期模型后,我们就可以把前两个简单阶段也加以扩展。
          攻击力加成的基准,默认是每个植物贡献 1 倍的攻击力。如果我们觉得普通豌豆太弱,想在组中加强,就可以让它贡献 1.5 倍攻击。又如原版玉米,它是概率投黄油,攻击翻倍且定身,那是做一次随机。而在这里的生命周期模型中,攻击加成计算与 debuf 是在不同阶段计算的,不一定要强耦合。那就可以让玉米固定贡献 2 倍攻击,或平均一下
        1.5 。
          如此,对攻击力加成公式就增加一个系数。假设原植物的基础攻击力分别是 x, y, z,则合攻击力是 xa1+ya2+za3 。系数 a 就是针对各植物的可配置参数。
          再举个例子,假设胆小菇平时胆小,但与其他植物一起组合就不胆小了,它所贡献的攻击力随参与组合的植物数量递增。也就是说它的加成系数 a 不再是个常数,而是随植物数的单调递增函数。例如采用最简单的线性函数 a=bn+c ,其中 n 是参与组合的植物总数,b、c 是待定或可配参数。
          或者胆小菇采用另一个强化设计,它不只是增加自己的攻击力,而是增加其他植物的攻击力(一些游戏将此称为鼓舞或激励特性)。这个特点就是对线性加成后的攻击力再乘个倍数,用公式表示就是 (xa1+ya2+za3)(1+r1+r2+r3),其中参数 r 就是每个植物对总体集成攻击力的倍增系数。如果说胆小菇的倍增系数与参与组合的植物数量有关,那也可设为另一个线性递增函数 r=bn+c 。
          现在我们对胆小菇的攻击加成有两个设计(脑洞)了,那就利用随机抽取规则。它的基础配置系数 a 默认 1,r 默认 0,在实战组合时,有时抽到规则改变系数 a,有时抽到规则改变系数 r 。如果又想到,胆小菇在组合中是主植物时,它应该增加 r 系数,充当从植物时增加 a 系数。那对随机抽取规则进行扩展,增加条件抽取,或者说在组合效果贡献分量配置表中,对每条分量增加一个属性,标记它只能被主植物抽取,或只能被从植物抽取,默认是不管主从都能抽取。
          同理,攻击频率的确定也可作类似扩展,把平均改为加权平均,每个植物可设计(配制)不同的频率权重,默认都相同的情况下,就等效简单平均。如果我们认为某个植物特别能带节奏,那就可以将它在组合中的频率权重设大一些。比如默认权重都是 100,它就 200,那它与另一个植物组合时,它贡献的频率加权系数就是 200/300 ,另一个植物贡献是1/3 。


        IP属地:广东19楼2024-11-28 15:44
        回复
          #### 计算步骤与配置表
            基于子弹生命周期模型,程序就可以按步就班地实施计算了。可就按该模型组织计算流程,在计算每个阶段时,检查一下该组合植物随机抽取到的各个效果分量,是否有针对该阶段的特定描叙,如有则覆盖默认值。可将生命周期各阶段看成横向的管道,各植物的组合分量看成是纵向的叠加。
            按这个计算规则(框架),那设计的组合效果分量,就可能影响多个阶段了,而不仅是如我们刚开始想的只注重某个阶段的效果。如此可进一步强化组合效果,或作平衡调整。例如对玉米的某个分量设计,定身概率很大,那就可以将它攻击加成阶段调低系数(甚至可以0)。
            然后也容易对这个计算流程进行扩展。比如说某个设计脑洞,想让子弹命中后再分裂,尤其是范围伤害时,可能出于平衡性考虑,只想让部分攻击力有范围伤害。如此,就可在命中阶段之后,溅射阶段之前加个分裂阶段。但是我认为,如果在前面做了子弹攻击力集成,后面又做子弹分裂,那除了优化中间弹道飞行动画效果外,实际战场效果不就退化为叠种了吗?所以这可能只是设计的权衡,并无太大的实现难度(当然分裂的美术效果更复杂些)。
            最后,需要将组合效果贡献分量的设计脑洞,从自然语言转化为程序可读的结构化语言,常见实现就是配置表。
            例如,按前文所涉及讨论,基础植物表可能涉及的属性有:植物ID,植物名称,植物简介,阳光费用,种植空间,攻击频率,攻击力,同质组合系数,组合贡献攻击加成系数,组合贡献频率权重等。组合效果贡献分量表涉及的属性有:分量ID,植物ID,抽取权重,主从属性,阶段一系数,阶段二系数……,效果描述等。
            其中,各种系数未必是原子属性,具体可能要拆成多列。而原来对组合效果的自然语言描叙也成为配置表的一个字段,在游戏呈现给玩家参考。甚至还可以设计宝开语,比如简要介绍该植物曾去哪里学艺归来,学会了什么屌炸天技能,可以在组团中承担什么角色。
            至于配制表格式,还是通用的 Excel 对策划设计最友好。虽然二维表对复杂嵌套结构表达力略显麻烦,但是参考关系数据库理论通过外键关联,理论上也是有足够表达力的。将每个 Sheet 导出为 csv 文本文件,那就任意程序语言都方便解析。也可将一组 csv 表导入数据库,单机游戏可用 sqlite 。


          IP属地:广东20楼2024-11-28 15:46
          回复
            ### 灰烬植物组合
              在上节中,我们解决了最重要的一类子弹植物,提出设计了一种统一的规则、模型与框架。现在再来看另一类差异极大的灰烬植物,重点是分析差异,尽可能抽象为统一概念,归并为已解决的问题。
            #### 基础灰烬植物分析
              先以樱桃炸弹为例,它也有攻击力,范围伤害就是无衰减溅射。但宏观看它是群伤,似乎没有明确的索敌目标与命中目标。但是按之前触发式灰烬的设计,第一个进入它范围的僵尸可以当作是命中目标。只不过它的溅射范围不是以命中目标(子弹)为中心,而是以植物自身为中心。
              这就找到了(抽象)溅射中心的概念,除了子弹与植物这两种,还有像玉米炮那样需要手动操作的以定点坐标为中心。再进一步思考,也可强行归为同一种,玉米炮发射的导弹也是大子弹,到目标后以子弹为中心范围溅射。而樱桃炸弹,也可把它自身当成不可飞行的子弹。
              按子弹植物的计算流程,先结算首个命中目标,再结算溅射。至于灰烬炸弹,可以认为它的普通攻击为 0 ,重点是溅射伤害极大。在溅射伤害之后结算 debuf 状态,这也符合寒冰菇的行为。而毁灭菇在爆炸后会留下不可种植的坑,这可能就不好装入 debuf 大箩筐了。为此需要扩展计算流程,可在原来的 debuf 状态效果结算阶段之后,再加一个战场效果结算阶段。
              按叠种理论,可将毁灭菇的战场效果与花盆关联起来,设计一次毁灭的爆炸永久减少花盆种植空间上限 100 点。于是在金盆中爆炸就降级为银盆,银盆降级为普通花盆,普通花盆就炸没了,直接在无花盆的草坪上炸,可认为种植空间变 -100 了,数值异常了,不可再种了。在此机制下,就可设计某些植物与毁灭毁菇组合后能抵消其负面效果,甚至逆转。例如毁灭菇与金盏花组合,爆炸后反而增加种植空间上限 50 点。还可利用过载机制,将破坏种植空间的结算延时 1 秒或半秒,在爆炸的瞬间玩家可以种下其他植物,之后空间减少就形成过载。
              土豆雷与窝瓜,主要是触发范围与伤害范围的不同。三叶草的全屏攻击,对范围结算提出另一个要求,需要在作用范围内能根据条件选择僵尸。魅惑菇就比较特殊,需要做个特殊机制,可划到战场效果阶段,因为它改变了一个战斗单位的阵营属性。


            IP属地:广东21楼2024-11-28 15:51
            回复
              #### 触发韧性的数值化
                灰烬植物还有个特殊点,由于一次使用,似乎不像常规植物那样有血量属性,被僵尸一碰就没,进入伤害结算流程。
                这种一碰就没的特性,可以认为它的血量是 1 。但是这个数量级与其他植物的血量数量级太不对等,不妨换个名称,叫做触碰韧性,或触发韧性,而正常血量相当于啃噬韧性。灰烬植物的触发韧性默认是 1 ,那么在组合效果中就可以是 2 或 3,表示可以多次引爆。触发韧性可与主血量作等效均分映射,若触发韧性是 2 ,则每触发一次降一半血量。
                比如樱桃炸弹,如果第一次爆炸把 3x3 范围的僵尸都消灭了,那就可以在下一波僵尸靠近时再炸一次;如果有巨人等高血量僵尸,一次炸不死,那就满足连续触发条件,连续爆炸直到触发韧性降至 0 才表示植物消亡。当然为了动画效果,连续爆炸之间可以有短暂间隔,但该间隔不足以让普通僵尸啃到樱桃。从僵尸方的对抗设计,可以让某些快速高防僵尸恰好一次炸不死,有机会啃到炸弹几口。或者设计专门的排雷兵,不会触发炸弹,比如说小鬼,樱桃炸弹不舍得炸它,结果就会被小鬼啃掉。
                如此,在同质植物组合中,对灰烬植物的设计方向就不限于伤害大小与范围了,触发韧性可能是更好的特征数值增长。例如两个樱桃炸弹组合,触发韧性为 3,相比叠种额外赠送一次爆弹效果,而且叠种是独立结算,同时引爆两个樱桃,极可能浪费输出。至于窝瓜的同质组合,有个脑洞是设计斐波那契数列,1,1,2,3,5,8,13... 两个窝瓜的组合,其触发韧性可从 2 或 3 开始,每多组合一个按此数列增长。想象一下像一窝兔子一样在花盆内繁殖。窝瓜按触发韧性设计,也能缓解多个窝瓜同时起跳坐空的幽默发挥。
                触发韧性的概念还可以迁移对其他特殊僵尸的抗性上。抗砸韧性表示能被巨人砸几次,每被砸一次被减少几分之一主血量,抗碾韧性表示能被车碾几次。然后就有了个脑洞设计,胆小菇在缩头时能增加一次抗砸韧性,也就是说能被巨人砸两次,完美的垫材。设计该特性可在组合分量中被随机抽取。如果与坚果类组合时抽到提升抗砸韧性的效果分量,那就很好,而抽到加攻的效果分量就没啥用了。


              IP属地:广东22楼2024-11-28 15:51
              回复
                #### 灰烬的主从分析
                  回顾一下,植物组合时引入主植物与从植物的概念就因为灰烬的特殊性。原则就是保证当灰烬植物作为主植物时,组合效果仍然表现得像灰烬。
                  当灰烬植物作为从植物与常规子弹植物组合时,可按 dps 折算思路,在攻击集成阶段附加一部分攻击。仍以樱桃为例,它的灰烬伤害是 1800,如果将该数值当成其基础攻击力,那么它的攻击加成系数应该远小于 1,比如 1%。或者我们可以专门为它配置一个合适的攻击力数值,在组合中作为攻击加成的参考。但樱桃作为从植物,它贡献的主要效果应该是溅射结算阶段,比如单格的无衰减溅射。
                  另一方面,如果灰烬植物当主植物,子弹植物是从植物,也可反过来折算 dps ,在灰烬爆炸时额外爆一圈子弹。例如将樱桃与玉米组合,触发樱桃爆炸时,再向四面八方射出一圈玉米粒子弹,有概率定身。注意由于触发韧性的设计,这不是亡语,如果组合樱桃的触发韧性是 2 ,那就能射两次玉米粒。
                  再考虑魅惑菇,如果当作从植物,容易想到给子弹附加概率魅惑特性,在 debuf 阶段结算。但如果将魅惑菇当作主植物时,又可以有什么脑洞?
                  可以先将魅惑菇从主植物位置移开,再将剩余植物按既有组合逻辑进行组合处理,那就要随机选举另一个主植物(可以子弹植物优先),可称之为伪主植物,相对地魅惑菇才是真正的主植物。当这个魅惑菇主植物被僵尸触发后,该僵尸就顶着这个由伪主植物统领的组合植物往回跑,变成植物僵尸。按这个叙事,称伪主篡位可能不合适,更像忠仆复仇吧,不过不用在意名称。
                  以一个简单示例说明,从植物就一个豌豆射手,与魅惑菇组合。僵尸被魅惑后,就顶着单发往僵尸方向返射。如果被魅惑僵尸本身就顶着个豌豆射手或其他植物僵尸,那就按叠种逻辑独立发射。把僵尸当成行走的花盆,只是这个花盆的外形像僵尸,且比较高,遇到僵尸互啃时先啃花盆身体,当然原魅惑菇之下的组合植物可以为僵尸花盆提供血量加成。


                IP属地:广东23楼2024-11-28 15:51
                回复
                  2025-11-09 16:09:56
                  广告
                  不感兴趣
                  开通SVIP免广告
                  ### 其他植物组合
                  #### 坚果类植物
                    坚果类植物的组合效果,显然以贡献血量为主。在之前的生命周期模型中,只考虑了攻击集成,现在可以在此之前再加一个血量集成阶段,攻血是绝大多数作战单位的最重要属性。
                    坚果与常规子弹植物一样是持久站场植物,所以它作为主或从植物的影响不如灰烬植物那么大。最主要的区别是在叠种篇提出的嘲讽度优先级,本文设计坚果的嘲讽度高于南瓜套。因此当坚果作为主植物时,僵尸先吃像坚果的组合植物。而当主植物是普通子弹植物时,僵尸先吃南瓜套,南瓜套吃完,组合效果就消失了。
                    可以认为以坚果当主植物时,它能保护南瓜套,从而保证组合有效期更长。但是当以坚果为主植物的组合植物被吃完后,所有参与组合的植物都被消耗了。而坚果只当从植物时,南瓜套先被吃,退化为叠种,坚果又自动排在叠种的逻辑队列之前,因此对其他独立植物的保护期更长。
                    以坚果为主植物时,还适合设计被动效果。例如常规子弹植物作为从植物时,每次被啃咬,触发子弹攻击。被动触发机制无法纳入之前讨论的子弹生命周期模型,需要另外实现一套机制。灰烬的触发也是一种被动机制。不过当事件触发之后,许多结算流程就可复用了。常规子弹植物可认为是由内部频率规划触发的(还有索敌射程因素),若把被动触发当成外部触发,那又可以统一模型框架了。
                  #### 地刺类植物
                    地刺主要提供抗碾韧性与抗砸韧性,它的嘲讽度优先级设计比坚果还高。因此,地刺在组合中更适合作为主植物,否则南瓜套先被碾,就没有组合效果了。不过后面再应用合成操作,不再依赖于南瓜套的组合,那地刺在从植物中也差不多效果了。
                    此外,地刺也适合设计被动触发的效果。基本能被上文已讨论规则所涵盖。


                  IP属地:广东24楼2024-11-28 15:52
                  回复
                    #### 火炬类植物
                      火炬的基本特性是点燃经过的豌豆子弹,加伤,定位辅助性植物。按之前的子弹生命周期模型,弹道飞行阶段就可能经过火炬,从而改变子弹的属性或数值。
                      当火炬作为主植物时,组合效果应该保留点燃特性。其他从植物参与组合后,提供的效果可以是扩大可点燃范围,比如杨桃与火炬组合后,就该能点燃星星了。不过与抛射类子弹植物匹配不好,考虑火炬火焰高度因素,可能正好抛射前一格时才能被影响到。
                      也可设计为被动触发,当有子弹经过火炬被点燃时,与火炬组合的从植物也随之发射子弹。这样,高频子弹过火的触发收益就更大。如此,子弹生命周期模型中的频率规划阶段就可以有更多设计了。例如将集成后的抽象子弹的攻击力再分成几份,每到频率周期时快速射出多份子弹。这样该抽象子弹的总体 dps 可能保持不变,但过火触发火炬之下的其他植物就完全不同了。
                      组合集成后的抽象子弹能否过火,可能有争议,具体规则可以权衡取舍。另一方面,如果火炬作为从植物参与组合,那它可点燃当前组合植物的子弹应该更少争议。从实现效果看,就相当于在攻击力集成时提供个倍增系数,以及可影响溅射与 debuf 状态。
                      试举具体例子,再来次头脑风暴,列几个组合分量设计。
                      组合分量表中有关火炬的条目示例:
                    1. [主] 每当豌豆经过时,点燃该豌豆,并向前方发射一枚自身子弹;
                    2. [从] 点燃自身子弹,攻击力翻倍;命中目标后造成一格溅射伤害;
                    3. [从] 点燃自身子弹,攻击力翻倍;对目标所在格所有僵尸施加红温效果;
                      这里自身子弹的“自身”不是指火炬,而是指组合植物,火炬是不提供子弹的,但组合中应该有其他植物提供子弹。如果参与组合的所有植物都没有子弹,如火炬与坚果组合,那抽到火炬的这些分量就没什么用。点燃豌豆是原版已定义行为,所以未多加解释,但点燃(集成抽象)子弹未定义,所以需要解释。设计者认为溅射与 debuf 不能并存,因此拆成两个条目,随机抽取。如果也允许并存,那可以再加一个条目,但是抽取权重降低。
                      上面条目也标注了主从条件,也即当火炬作为从植物时,随机从中二选一。当火炬是主植物时,就固定抽取那一条。火炬为主植物时,它也可以有自身子弹概念,有子弹攻击力集成阶段,但在频率规划阶段是空行为,不会主动发射,要等外部条件触发发射。
                      再假设另有一个常规子弹植物,杨桃(星星),有如下几条分量效果:
                    1. [从] 当主植物是火炬时,可以点燃星星子弹,使攻击变为 5 倍;
                    2. 命中目标后再向五个方向溅射相同攻击力的子弹各一枚;
                      也许对于星星的组合分量效果,还有其他许多脑洞,但现在考虑与火炬的联动关系,就暂且考虑这两条。
                      再假设有两格都种了杨桃与火炬,并进行加套组合。前排那个植物位置恰好在后排杨桃的弹道路径上。设后排组合是 (主杨桃2,从火炬2),前排组合是(主火炬1,从杨桃1)。后排组合能主动攻击,从火炬2使星星子弹攻击翻倍了,其弹道是向五个方向攻击,每个方向各一颗星星,其中一颗星星经过前排火炬,因为杨桃1分量的贡献,能点燃这颗星星,攻击力再翻 5 倍,就变成了 10 倍。该星星命令目标后,由于火炬2的分量贡献,造成一格溅射,再由于杨桃2的分量贡献,朝五个方向再发射颗星星,有可能往后方向那颗星星正好又经过前排火炬,攻击再翻 5 倍,就 50 倍攻击了。五向溅射的星星若命中僵尸,应该不能再继续五向溅射了,否则星星数值有可能快速爆炸。同时考虑两次过火,星星攻击就到了 50 倍,似乎有点影响平衡,那可考虑修改一下,将“攻击变为 5 倍”改为“增加 5 倍星星子弹的攻击力”。这样修改两次过火的攻击力是 2+5+5 倍。
                      如果前排组合抽到的是(主火炬1,从杨桃2),那么后排星星经过时不会点燃它,因为不满足条件。但是如果正后方另有一株豌豆射手时,每次豌豆过火,就会使这个火炬发出自身子弹,虽然这个子弹只由星星组成,但也是经过抽象封装的子弹,火炬并不知道它有向五个方向发射的特性,只按火炬1的贡献向正前方发射一颗子弹。但这颗子弹命中目标后,由于杨桃2的分量贡献,会再进行五向溅射。
                      注意杨桃2分量其实与火炬无关,且不管杨桃是主或从都能抽到。例如星星与西瓜组合,因为该分量贡献,命中目标后也会有五向溅射(相当于西瓜加星星的攻击),但五向浅射的西瓜不再有范围溅射,虽然第一次命中时可能由于西瓜的某个分量贡献可能有范围溅射。
                      杨桃1的分量设计还有个特殊点,依赖于主植物是火炬才能抽取,否则会没什么意义。虽然随机组合允许一定量的低价值组合,但最好能优化体验。所以抽取规则的设计与实现,就要增加支持这种条件。在标记是从植物时才能抽取后,可再进步限制主植物(的ID或类别)才能抽取。


                    IP属地:广东25楼2024-11-28 15:53
                    回复
                      ### 确定性组合
                        随机组合的不确定性有个缺陷,就是对新手入门不友好,难以熟悉组合植物能产生什么效果,即使在界面上设置了良好的提示与说明信息。因此对于两两组合的二级植物,可采用确定性组合设计。
                        确定性组合并非要程序针对每个二级植物组合独立开发,仍按前叙模型框架处理,只是各植物的贡献分量,不是通过随机条件抽取,而是通过专门的二级组合配置表读取。该配置表由策划维护,针对每个二级组合,从贡献分量库中挑战最适合的分量,以指示程序框架组合出最终效果。该表结构主要有这些字段:(组合植物ID,主植物ID,从植物ID,主植物贡献分量ID,从植物贡献分量ID,组合植物说明)。其中,主从植物ID是基础植物表的外键,贡献分量ID是贡献分量表的外键。
                        确定性设计二级植物,是为了让玩家了解、感受与熟悉通过基础植物的组合能产生什么新功能。然后到三级植物以后,各植物的贡献分量就随机抽取了。也可将热门的特定组合作确定性配置,当作玩家的指导性参考,其强度应该在中等偏上,但仍有可能随机出更强的组合植物,当然了植物强度也是相对的,在特定的关卡与局势中某些组合更适合而已。
                        三级植物的确定性配置表结构自然与二级植物配置表结构不一样,需要单独建个表,四级植物如有必要确定性配置也该是另外的表,五级以上我觉得就完全没必要了,就交于随机组合。不过为了灵活性,也可以设计统一的高级植物组合表,设置一个较宽松的参与组合的植物数量,比如八个,那就最多配一个主植物与七个从植物,及其相应的贡献分量。但实际上一般只配前面三四列,后面的留空。
                        二级植物配置表应该是全量充分的两两组合。假设 40 个基础植物,两两组合数是 40x39,因为分主从,数学上是排列。粗略估算就当 1600 行配置。看似数量不少,但很多配置可能是有规律的。就比如上节讨论的火炬与子弹类植物组合,火炬在主位时该引用同一个分量 ID,在从位时都引用另一个ID,与非子弹类植物再另行设计或选择效果分量。即使对某植物的贡献分量作出了大量的有趣脑洞设计,在二级植物配置表中也该有取舍尽量保持某种规律,如此才能让玩家也感觉到规律,快速上手。
                        至于三级以上的高级植物的确定性配置,数量宜少,只作典型示例,只在个位数的量级即可。于是统一的程序框架在响应南瓜套组合时,先检查二级组合配置表或高级组合配置表,没有相关的确定性配置,再按随机规则抽取分量进行组合。


                      IP属地:广东26楼2024-11-28 15:53
                      回复
                        ### 设计新的基础植物
                          设计统一的组合框架模型,原是为了减少开发新植物的工作量,这样的框架一旦架设好,开发新植物就相对简单了。原则是只需专门设计与开发全新的基础植物,再设计其贡献分量,这样就能利用统一的组合框架批量自动支持更多的组合植物。
                          比如说想开发保龄球系列(实际上原版小游戏有用到,但主关卡不能用),那就先开发一个保龄球基础植物,那应该是种灰烬植物,具有特殊的弹道滚动规则。当这个基础植物开发完成,理论上就应该能由配置设计组合出更多各具特色的保龄球,比如与樱桃组合成爆炸保龄球,与寒冰菇组合出冰冻保龄球等。以至支持与已有的基础植物作任意组合,因为它们在组合分量库中都有可供随机抽取的贡献分量。即使某些组合不一定很有用,但规则是支持的。
                          此外,按上节的二级植物确定性要求,每当开发一种新基础植物,就要配置好与原有基础植物的二合一。当然这主要是策划设计的工作量,而非程序开发的工作量。


                        IP属地:广东27楼2024-11-28 15:53
                        回复
                          ### 异常组合
                            以上基于贡献分量的随机组合模型,总算大致讲完了,有可行性,但也未必简单。所以在开发中还要注意异常处理,这里讨论几种情况。
                            首先是二级植物的确定性组合,如果某些组合确实是没什么意义,那就在配置表中加个字段标记为不可组合。随便举例如三叶草与地刺,若一时想不到什么对该组合设计什么效果是合理的,那就先标记为不可组合。
                            在随机组合时,如果对于某个参与植物无法从分量库中抽取到分量,就表明该组合失败。例如假设某个植物设计为只适合当作主植物,其所有分量配置都有主植物属性,那么在试图将它放在从植物位置时就会抽取不到分量,组合失败。对于这种可预计情况,也可在分量表中特意配一条特殊分量,加个特殊字段标记为不可组合,当随机组时抽取到这唯一的特殊分量,也就表示组合失败。
                            随机组合抽取分量时,应是不放回抽样,这比放回抽样的方式更易控制数值平衡。如此当某植物在分量库设计的条目少于某次参与组合的数量时,也会抽取失败。例如假设对玉米设计的分量就只有概率定身一种,当玩家试图将两个玉米与另一个植物组合时,那就只一个玉米能抽到分量,另一个抽不到,判定为组合失败。如果设计者认为某些分量允许重复抽取,那就在分量表中加个字段表示最大允许重复抽取次数,默认为 1。相反,如果想对抽取分量作更严格控制,还可在分量表加个字段表示将某些分量条目归为同一组,同组的分量只允许抽取其中一个。仍以玉米为例,假设虽然设计了两个分量条目,但本质都是概率定身,只是概率与时长各有侧重,认为这算是同一组效果分量,在一次组合中只能抽取其中一个。
                            对于这些组合失败情况,要有明确提示给玩家。反过来,组合成功也该有明显标志效果。比如借用原版模仿者的动画,组合成功就变身为白南瓜套,失败就保留为黄南瓜套,只有保护叠种植物的效果,没有组合效果。
                            还有一种情况,能抽取到贡献分量,但在具体结算时遇到异常,不管是因为程序 Bug ,还是因为配置数据不恰当的原因。程序应该捕获这类异常,作适合的防范措施,比如将组合的白南瓜套爆破,回滚为独立叠种。这就相当于阻止程序异常崩溃退出,而只让一个南瓜套崩溃。如此也可给测试玩家一种醒目的提示,玩家或可截图保留现场、报告异常。
                            当然,如果程序能提前预检,不必延迟到实际攻击僵尸时就判断会出异常,在种南瓜套时就及时提示组合失败,那就更友好了。


                          IP属地:广东28楼2024-11-28 15:54
                          回复
                            ### 植物组合总结
                            * 通过种植南瓜套将原来在一个花盆上叠种的多株植物组合起来,形成一个不同的功用效 果;当南瓜套被消耗时,组合效果消失,回退为独立叠种植物;如果组合植物表现出类 似灰烬、地刺、坚果类的特性时,它将先于南瓜套被消耗,如此在组合植物消亡时使南 瓜套从花盆上掉落,可回收利用。
                            * 参与组合的植物有一个是主植物,其他的是从植物,主植物决定了组合植物的许多关键 的基本特性与属性;不管主从植物,都对组合植物有一个贡献效果分量,可从效果分量 库中随机或按条件抽取;再由统一的程序框架将各个效果分量合并为最终的组合效果。
                            * 典型的常规子弹植物组合,可按子弹生命周期模型分阶段结算。其他植物按类别作一定 的特殊处理,组合各自的贡献分量。
                            * 两两组合的二级植物由配置表设计为确定性组合,三级以上的高级组合也可设计少量的 确定性组合配置作为典型参考示例;此外无确定性配置的组合由程序随机抽取分量进行 组合;对抽取分量失败的异常组合需给出友好提示。
                            * 在统一的组合框架模型下,只原则上只需开发新的基础植物,然后可与原有基础基础植 物自由组合。
                              实现统一的组合框架模型的关键,是为每种基础植物设计一系列可用的贡献分量,建立一定规模的组合效果分量库。随机组合机制进一步扩大了组合数量级,但它本质上是将一部分的复杂设计工作量转嫁给了玩家,让玩家去刷满意的组合植物。然而,好的游戏体验也正是由游戏设计者与游戏玩家共同完成的。


                            IP属地:广东29楼2024-11-28 15:54
                            回复
                              2025-11-09 16:03:56
                              广告
                              不感兴趣
                              开通SVIP免广告
                              ## 植物合成篇
                                实现了最为关键与复杂的植物组合步骤,下一步合成就相对简单了。因为植物功能几乎是相同的,只不过组合侧重抽象概念的战斗效果,合成侧重当作实体植物的操作感。
                              ### 合成的具象操作
                                相对于叠种需要用花盆承载,组合需要用南瓜套来维持,合成也需要借一个具象道具来表达其机制。开始我想用的是肥料袋,但考虑到花盆与南瓜套都是卡槽植物,改用咖啡豆可能更形象。主要规则如下:
                              * 在已成功的组合植物上使用咖啡豆,完成植物合成。
                              * 组合植物合成后,南瓜套消失,花盆上留下一株独立的合成植物;同时掉落相应的植物 卡,可直接种植或拾取到卡槽上,若卡槽已满,可选择替换其中某卡,入卡后开始计时 冷却。
                              * 合成植物的血量基准是所有原料植物与南瓜套的加成,战场效果与组合状态时相同;阳 光花费基准是所有原料植物之和,不包括南瓜套;冷却速度取原料植物中最大值;空间 占用基准是原料植物占用空间和的 80% 。
                              * 合成植物可以像基础一样独立操作,与其他植物叠种,再组合,再合成。
                                简言之,由于组合有随机性,合成就相当于定型化,将满意的组合变成独立卡片,从而复制或扩种相同的植物,减少未来的重复操作,且有一定的阳光与空间花费优势。


                              IP属地:广东30楼2024-11-28 15:54
                              回复