關於擊殺與輔助獎勵的方案

多人遊戲中,獎勵的分配也是很重要的設計。設計

例如多我的對一個NPC進行攻擊,NPC被幹死的時候,會給每一個參與攻擊的玩家一些獎勵。會顯示擊殺,助攻等等。排序

好了,問題來了,怎麼計算功勞呢?隊列

 

通常的設計是,最後一刀爲勝利者,獎勵最大。參與攻擊的,都是助攻。遊戲

然而這個設計並不公平,例如「搶人頭」,就是一個玩家使出吃奶的勁打了半天,眼看就要手到擒來,忽然殺出來個咬金,一刀結束了最後的戰鬥。get

辛辛苦苦卻得了個助攻的名頭。ast

並且多人助攻的狀況下,一概給予相同的獎勵,有失公平。List

公平的作法是,經過計算玩家對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,這樣,經過簡單的代碼就夠就能論功行賞了。雖然搶人頭貌似好玩刺激一些,可是公平的戰鬥獎勵也不失爲激勵玩家進行遊戲的方案。並且在代碼實現上也並非多麼困難的事情。

 

 補充:方案被鄙視了,說正是由於不公平和隨機性才刺激,搶人頭簡單暴力拉仇恨,更能刺激玩家消費!好吧,我持保留意見

話說回來,生活中到處不公平,即便遊戲也是這樣,最後以麻花藤的名言結束:沒錢玩個幾把。

相關文章
相關標籤/搜索