戰鬥類活動開發

2021-09-29 23:35:38 字數 1598 閱讀 1122

商業化活動拉收益,戰鬥類活動拉活躍,商業化活動和戰鬥類活動可以說是遊戲中的兩把利劍了。戰鬥類活動的重要性可見一斑,同時也算是遊戲伺服器開發中的難點所在了。戰鬥類活動覆蓋玩家多,老區的話基本上是全服參加。涉及到的相關特殊處理也比較多,比如遮蔽一些技能或者遮蔽使用一些道具,被殺處理,復活處理等。需要考慮到異常多,玩家在活動中退出比賽該怎麼處理,伺服器卡頓的時候該怎麼處理等。陸陸續續做過的戰鬥類的案子也有4,5個了,在此小結一下。戰鬥類活動的開發分為兩部分,一部分是功能服上的開發,另一部分是場景服上的開發。

一、功能服上開發

功能服上處理整個活動的入口,收集玩家報名資料;控制活動的開啟,資料準備好後發場景服,通知開啟活動。功能服上的開發是開發戰鬥類活動的第一步。一般會存在乙個普通的類或者結構體來組織當場戰鬥,稱之為活動類,還有乙個單例模式的類,可以稱之為活動管理器,用來管理全服所有的戰鬥場次。活動類和活動管理器的大致設計如下:

//活動類

class game

public:

game(){}

~game(){}//注意釋放指標所指的記憶體,分支記憶體洩漏

private:

set_sign_list; //參賽玩家

uint64_t gameid = 0;//該場戰鬥活動id

uint64_t sceneid = 0;//可選

//活動管理器

class gamemgr : public singleton

public:

gamemgr(){}

~gamemgr(){}

game *get_game(uint64_t gameid);//獲取一場戰鬥

void remove_game(uint64_t gameid);//移除一場戰鬥

void create_game();//建立一場戰鬥

private:

unordered_map_game_map;//儲存所有戰鬥(也可以選擇存物件)

二、場景服上開發

場景服上幾乎要處理所有與戰鬥相關的邏輯,包括實現戰鬥規則,計算積分等。場景接收功能服傳過來的資料後即完成了該場戰鬥的初始化,進入了戰鬥準備狀態。整個戰鬥存在乙個狀態機,大概可以分為準備狀態,開戰狀態,結束狀態,清除狀態。戰鬥按照時間順序進行,通過定時器驅動戰鬥流程的進行。可以通過單例來實現場景服上的戰鬥邏輯,大致**框架如下:

struct game_scene_t

uint64_t gameid = 0;//功能服傳過來的該場戰鬥活動id

uint64_t sceneid = 0;//功能服傳過來的該場戰鬥場景id

set_sign_list; //功能服傳過來的參賽玩家

class gamescene : public singleton

public: 

void init();//初始化本場戰鬥

void timer();//定時器

void game_over();//戰鬥結束後的處理

private:

unordered_map> _game_map;//場景上儲存所有的戰鬥的資料結構

還有一種方法可以實現場景上邏輯,就是繼承場景scene,而不是使用單例,這樣也可以通過scene這個類找到戰鬥場景。

限時類活動開發

限時活動是指在某段時間內存在的活動,比如用於公告一些新道具的產出,累積充值或者累積登陸送獎勵,限購禮包,完成某些任務給獎勵等。這種限時類活動可以做成乙個通用的功能,策劃只需要配置,就可以開啟活動。實現方式如下 限時活動管理器 class limitactivmgr 公告類限時活動,用於打廣告 cla...

軟體開發活動

軟體開發活動大體包括以下幾個過程 1.問題的定義及規劃 此階段是軟體開發方與需求方共同討論,主要確定軟體的開發目標及其可行性。2.需求分析 在確定軟體開發可行的情況下,對軟體需要實現的各個功能進行詳細分析。需求分析階段是乙個很重要的階段,這一階段做得好,將為整個軟體開發專案的成功打下良好的基礎。需求...

活動安排問題(區間類貪心)

題意 設有n個活動的集合e 其中,每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動i都有乙個要求使用該資源的起始時間si和乙個結束時間fi,且si fi。如果選擇了活動i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj,fj ...