码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-11-04 14:42:23      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

伪代码如下:

结构体:

Person{ count , damage,att}

NPC{List< Person >}

Void Attack(){

 

Person.count++;

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

 

 

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

标签:

原文地址:http://www.cnblogs.com/jqg-aliang/p/4935857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!