文章目录

  • 怪物过滤的设计

之前我们已经完成了自动打怪,自动技能和自动吃药的功能。接下来需要实现自动任务。那么现在就会遇到这么一个问题,大部分的任务都是指定去打某些怪物,但是我们的自动打怪都是默认攻击最近的怪物,这里就需要用到怪物过滤的功能了。

怪物过滤的设计

新建一个类,命名为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 怪物过滤的设计和实现相关推荐

  1. 【LOSOL】怪物及AI设计

    LOSOL怪物及AI设计 引子 怪物设计理念 怪物类型列举 怪物AI简述 怪物AI包括范围 怪物AI设计 结语 引子 怪物在游戏中始终占据着一个极其重要的位置,一个游戏的趣味性很大一部分跟怪物的设计挂 ...

  2. 基于系统数据过滤权限设计之----lft, rgt的无限分类算法

    系统权限设计中的一般常见会有: 用户表 角色表 用户与角色关联表 资源表 角色与资源关联表. 当然这里介绍是笼统的,有些系统中会有用户组表或者角色组表,甚至为了把菜单资源和按钮资源分开,也创建单独的表 ...

  3. 违禁词过滤完整设计与优化(前缀匹配、二分查找)

    2019独角兽企业重金招聘Python工程师标准>>> 可能不止在天朝,绝大多数网站都会需要违禁词过滤模块,用于对不雅言论进行屏蔽:所以这个应该算是网站的基础功能.大概在去年的时候我 ...

  4. 游戏编程新手教程:怪物AI设计简述

    怪物AI应该说是这是一个程序问题,如果从策划的角度来说,作为设计者,则需要了解怪物AI整体的设计流程,这样才能提出自己的需求,从而让游戏战斗的整体体验符合设计预期,毕竟怪物AI也是属于战斗和体验的重要 ...

  5. 游戏中的人工智能AI设计

    因为在现在的项目中花了很大精力设计和制作怪物AI和技能,所以在这里也做个小总结. 什么叫做游戏中的AI        游戏中的AI可以简单的理解为计算机控制的智能角色,这些智能角色能够通过周遭环境或者 ...

  6. 计算机系统应用的书,基于个性化图书推荐的协同过滤算法

    摘 要本文对基于个性化图书推荐的协同过滤算法的设计方案进行实验,目的是为证实在真实用户的多标准评估过程中怎样产生数据集,从而找到一种科学的算法.并通过图书推荐的应用案例来说明算法,以验证其是否有效. ...

  7. 3D塔防游戏实现 5.2 3D怪物死亡(Feekood语言)

    (Feekood语言介绍与习) http://www.wooyoogame.com/doc/index(学习) http://www.wooyoogame.com(首页) http://www.fee ...

  8. 游戏人物装备技能数据表怎么设计(整理)

    游戏人物装备技能数据表怎么设计(整理) 一.总结 一句话总结:把人物的属性抽离出去,其它的装备啊,技能表和属性表之间建立一个关系表. 1.装备表如何设计(装备表和角色表的对应关系是什么)? 装备属于人 ...

  9. 基于Matlab实现微波带低通高通带通滤波器设计

    基于Matlab实现微波带低通高通带通滤波器设计 在微波通信系统中,滤波器作为一个重要的模块被广泛使用.本文将介绍如何使用Matlab进行微波带通滤波器设计,并提供相应的源代码. 理论基础 微波滤波器 ...

最新文章

  1. 算法-----有序数组的平方
  2. poj1018 Communication System (有道翻译完全拯救不了)
  3. Windows下完成端口移植Linux下的epoll
  4. 为游戏开发者总结的20个 Unity 建议和技巧
  5. 【UCOSIII】一、任务创建、删除、挂起、恢复、任务管理
  6. java 发送邮件带附件
  7. python标准库第一步_Python标准库学习1-文件系统
  8. *第九周*数据结构实践项目一【猴子选大王(数组)】
  9. ROS操作系统入门学习
  10. 登记表都不会填,面试还能通过?不可能!
  11. 【前端——补充学习】解决emos项目报错、路由、组件
  12. 职业教育相关的核心期刊有哪些?
  13. java表白小程序_c语言表白小程序代码创意
  14. Javaweb开发学习笔记(三)
  15. Mapper method 'dao.xxx' has an unsupported return type
  16. 谈谈AssetStore及其脱离Unity下载方法
  17. Objective-C中的instancetype和id区别
  18. Annotation(注解)是什么?
  19. 构建ceph可视化监控(prometheu+grafana)
  20. bat批量修改文件名

热门文章

  1. ML之Cosin:基于输入图片RGB均值化转为单向vector利用Cosin(余弦相似度)算法进行判别
  2. DayDayUp:那些年-程序猿的爱情故事
  3. Sklearn中的CV与KFold详解
  4. 决策树-缺失值和连续值处理及属性划分
  5. 钢琴演奏:舒伯特的小夜曲 --- 女儿的钢琴学习
  6. win10添加新用户
  7. WinForm读取相对路径(项目文件)下的图片
  8. Javascript操作DOM常用API总结
  9. VC由进程ID获取窗口句柄的各种方
  10. ST17H26 SDK中宏定义注意事项