日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

014 怪物过滤的设计和实现

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 014 怪物过滤的设计和实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 怪物過濾的設計

之前我們已經完成了自動打怪,自動技能和自動吃藥的功能。接下來需要實現自動任務。那么現在就會遇到這么一個問題,大部分的任務都是指定去打某些怪物,但是我們的自動打怪都是默認攻擊最近的怪物,這里就需要用到怪物過濾的功能了。

怪物過濾的設計

新建一個類,命名為MonsterFilter

//過濾的列表 vector<wstring> m_FilterList;

首先準備一個過濾的怪物列表,把不需要攻擊的怪物放到這個列表里 。

//攻擊的列表 vector<wstring> m_AttackList;

然后準備一個攻擊的怪物列表,把需要攻擊的怪物全部存放到這個容器里。兩個列表是互斥的,如果設置了過濾列表就不使用攻擊列表;設置了攻擊列表就不使用過濾列表。

//添加攻擊列表void AddAttackList(wstring MonsterName);//添加過濾列表void AddFilterList(wstring MonsterName);

然后聲明兩個函數,一個添加攻擊列表,一個添加過濾列表。

//刷新匹配的怪物void UpdateMonsters(_stuObjs& MonsterList);

然后準備一個函數用來刷新怪物列表,把不滿足條件的怪物 刪除。這個列表需要被實時修改,所以傳入引用。

//清空所有數據 void ClearAllData();

再準備一個函數用來清空所有數據。MonsterFilter.h完整代碼如下:

#pragma once #include "pch.h" class MonsterFilter { public://添加攻擊列表void AddAttackList(wstring MonsterName);//添加過濾列表void AddFilterList(wstring MonsterName);//刷新匹配的怪物void UpdateMonsters(_stuObjs& MonsterList);//清空所有數據void ClearAllData();public://過濾的列表vector<wstring> m_FilterList;//攻擊的列表vector<wstring> m_AttackList; };

代碼實現

//添加攻擊列表 void MonsterFilter::AddAttackList(wstring MonsterName) {//遍歷攻擊列表for (auto obj: m_AttackList){//如果當前容器中已經有需要添加的怪物 直接退出if (obj== MonsterName){return;}}//如果沒有在容器中找到需要攻擊的怪物 則添加到容器m_AttackList.push_back(MonsterName);}//添加過濾列表 void MonsterFilter::AddFilterList(wstring MonsterName) {//遍歷攻擊列表for (auto obj : m_FilterList){//如果當前容器中已經有需要添加的怪物 直接退出if (obj == MonsterName){return;}}//如果沒有在容器中找到需要攻擊的怪物 則添加到容器m_FilterList.push_back(MonsterName); }//清空所有數據 void MonsterFilter::ClearAllData() {m_AttackList.clear();m_FilterList.clear(); }

添加列表和清空列表的代碼都比較簡單,關鍵在于怎么將怪物列表中不滿足條件的怪物刪除。

//判斷怪物是否需要攻擊(在攻擊列表或者不在過濾列表)BOOL CheckNeedAttack(wstring MonsterName);

新增一個函數,判斷當前怪物是否需要攻擊,判斷是否需要攻擊的條件是在攻擊列表或者不在過濾列表,代碼實現如下:

//判斷是否是需要攻擊的怪物 BOOL MonsterFilter::CheckNeedAttack(wstring MonsterName) {//攻擊列表不存在if (m_AttackList.size()==0){//遍歷過濾列表for (auto obj:m_FilterList){//如果在過濾列表if (obj== MonsterName){//說明這個怪物是需要過濾掉的 不需要被攻擊 所以返回FALSEreturn FALSE;}}//遍歷完成 說明不存在過濾列表 返回TRUEreturn TRUE;}else{//遍歷攻擊列表 邏輯和上面相反for (auto obj : m_AttackList){if (obj == MonsterName){return TRUE;}}return FALSE;} }

然后再實現刪除不符合要求的怪物列表

//刷新匹配的怪物 把不滿足條件的怪物刪除 void MonsterFilter::UpdateMonsters(_stuObjs& MonsterList) {for (auto it=begin(MonsterList.m_data);it!=end(MonsterList.m_data);it++){//如果不符合條件 則刪除if (CheckNeedAttack(it->m_Name)==FALSE){MonsterList.m_data.erase(it);}} }

這樣我們就完成了怪物過濾的設計了。使用的時候只需要傳入任務需要攻擊的怪物,就能實現自動攻擊任務怪物。

在GlobalData加一個全局的類對象

然后在自動打怪線程過濾怪物。需要過濾的怪物我們在接任務的時候去添加,這里當前的過濾列表是空的,也不影響整個代碼流程。

下一篇我們開始找自動任務需要的數據。

Github:https://github.com/TonyChen56/GameReverseNote

完整代碼:https://download.csdn.net/download/qq_38474570/79498815

總結

以上是生活随笔為你收集整理的014 怪物过滤的设计和实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。