• 关于击杀与辅助奖励的方案


    多人游戏中,奖励的分配也是很重要的设计。

    例如多个人对一个NPC进行攻击,NPC被干死的时候,会给每个参与攻击的玩家一些奖励。会显示击杀,助攻等等。

    好了,问题来了,怎么计算功劳呢?

     

    一般的设计是,最后一刀为胜利者,奖励最大。参与攻击的,都是助攻。

    然而这个设计并不公平,例如“抢人头”,就是一个玩家使出吃奶的劲打了半天,眼看就要手到擒来,突然杀出来个咬金,一刀结束了最后的战斗。

    辛辛苦苦却得了个助攻的名头。

    而且多人助攻的情况下,一律给予相同的奖励,有失公平。

    公平的做法是,通过计算玩家对NPC攻击的总次数和总伤害来给予奖励。

    因为不同玩家的属性攻击力等不同,攻击次数并不等于攻击的伤害。设计攻击次数,是为了“有苦劳”的玩家给予相应的奖励。

    这是设计上的思路,接下来是实现方案。这个很简单了,我称之为,冤有头,债有主。

    以被攻击的NPC为单位,每受一次伤害,记录攻击者,次数,以及伤害值,使用队列保存数据。当此NPC死亡时,开始统计参与击杀此NPC的人员。

    如果计算头功?头功,即最后一刀,通过队列排序,方式很简单,只需要把最后的攻击者放在队列末尾即可。最后的攻击者即为头功。

    如何统计辅助者?遍历队列。

    如何论功行赏?通过计算伤害值排序,伤害值相同的,按攻击次数排序。

    伪代码如下:

    结构体:

    Person{ count , damage,att}

    NPC{List< Person >}

    Void Attack(){

     

    Person.count++;

    Person.damage+=person.att;

    If(!List.cons(person)){

    List.add(person);

    }

     

    Sort(List);

     

    }

    Void getBigRew(){

    Return List.GetLast();

    }

     

    Void CountReward(){

    //按攻击次数和伤害值排序

    List.SortIf(person.cout);

     

       List.SortIf(person.damage);

     

    }

     

    Void  GetPersons(){

    Return List;

    }

    OK,这样,通过简单的代码就够就能论功行赏了。虽然抢人头貌似好玩刺激一些,但是公平的战斗奖励也不失为激励玩家进行游戏的方案。而且在代码实现上也并不是多么困难的事情。

     

     补充:方案被鄙视了,说正是因为不公平和随机性才刺激,抢人头简单暴力拉仇恨,更能刺激玩家消费!好吧,我持保留意见

    话说回来,生活中处处不公平,即使游戏也是这样,最后以麻花藤的名言结束:没钱玩个几把。

  • 相关阅读:
    ActiveMQ的用途
    HTTP 状态码的完整列表
    Linux中脚本运行错误(坏的解释器:没有那个文件或目录)
    Linux下ping: unknown host www.baidu.com的解决办法
    python中的collection
    Table里嵌套ASPXGridView
    致2015
    WPF学习之Binding(二)
    WPF学习之Binding(一)
    WPF UI布局(Layout)
  • 原文地址:https://www.cnblogs.com/jqg-aliang/p/4935857.html
Copyright © 2020-2023  润新知