博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于击杀与辅助奖励的方案
阅读量:5154 次
发布时间:2019-06-13

本文共 1117 字,大约阅读时间需要 3 分钟。

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

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

 

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

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

转载于:https://www.cnblogs.com/jqg-aliang/p/4935857.html

你可能感兴趣的文章
TCP/IP 邮件的原理
查看>>
w3m常用快捷键
查看>>
【Unity 3D】学习笔记四十一:关节
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
js对象属性方法
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
Maven安装配置
查看>>
ORA-10635: Invalid segment or tablespace type
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Windows 8 操作系统 购买过程
查看>>
软件工程课程-个人编程作业
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>
Notes of Daily Scrum Meeting(12.8)
查看>>
Apriori算法
查看>>
onlevelwasloaded的调用时机
查看>>