有一个weapon*类型的vector数组,里面存放的是各种武器,分别是编号为0的sword,编号为1的bomb,bomb使用一次就会消失,编号为2的arrow,编号为3的用过一次的arrow,arrow一共可以用两次,现在进行战斗,实现一个函数,完成如下功能,每次给函数传一个参数,代表目前是第几轮战斗,根据这个参数,返回这次应该使用的武器,在每次选择武器时,首先进行排序,编号小的排在前面,但是使用过的arrow排在前面,排好序后,攻击者按照这个排序依次对敌人使用武器,如果一件武器有多种,那就都要用上

时间: 2023-12-01 10:04:24 浏览: 31
好的,根据你的要求,我可以给你提供以下的代码实现: ```c++ #include <vector> #include <algorithm> using namespace std; struct Weapon { int type; // 武器类型 int used; // 是否使用过 }; bool cmp(const Weapon& w1, const Weapon& w2) { if (w1.used && !w2.used) { // 使用过的箭排在前面 return true; } else if (!w1.used && w2.used) { return false; } else { return w1.type < w2.type; // 否则按照编号从小到大排序 } } enum WeaponType { SWORD = 0, BOMB = 1, ARROW = 2, USED_ARROW = 3 }; WeaponType ChooseWeapon(vector<WeaponType>& weapons, int round) { vector<Weapon> weaponList; for (int i = 0; i < weapons.size(); i++) { weaponList.push_back({weapons[i], false}); } // 对武器进行排序 sort(weaponList.begin(), weaponList.end(), cmp); WeaponType chosen = SWORD; // 默认选择剑 switch (round % 3) { case 0: // 第1轮、第4轮、第7轮... chosen = SWORD; // 选择剑 break; case 1: // 第2轮、第5轮、第8轮... chosen = BOMB; // 选择炸弹 break; case 2: // 第3轮、第6轮、第9轮... for (int i = 0; i < weaponList.size(); i++) { if (weaponList[i].type == USED_ARROW) { chosen = USED_ARROW; // 选择用过的箭 weaponList[i].used = true; // 将用过的箭标记为使用过 break; } else if (weaponList[i].type == ARROW && !weaponList[i].used) { chosen = ARROW; // 选择新箭 int count = 0; for (int j = i; j < weaponList.size(); j++) { if (weaponList[j].type == ARROW && !weaponList[j].used) { count++; } } for (int j = i; j < i + count; j++) { weaponList[j].used = true; // 将新箭标记为使用过 } break; } } break; } // 如果选择了炸弹,需要将其从武器数组中删除 if (chosen == BOMB) { for (int i = 0; i < weaponList.size(); i++) { if (weaponList[i].type == BOMB) { weaponList.erase(weaponList.begin() + i); i--; // 删除后数组大小会减小,需要将 i 减 1 } } } // 将选择的武器类型转换成枚举值 chosen = static_cast<WeaponType>(chosen); // 将武器数组更新为最新的状态 weapons.clear(); for (int i = 0; i < weaponList.size(); i++) { weapons.push_back(static_cast<WeaponType>(weaponList[i].type)); } return chosen; } ``` 这个函数的参数是一个 `vector<WeaponType>` 类型的武器数组和一个代表当前轮数的整数 `round`,返回值是一个 `WeaponType` 类型的枚举值,表示这一轮应该使用的武器。 实现过程中,我们将每件武器存储为一个结构体 `Weapon`,其中包含武器类型和是否使用过的标记。然后定义一个排序函数 `cmp`,对武器进行排序,根据使用过的箭排在前面,否则按照编号从小到大排序。在选择武器时,根据当前轮数选择武器,对于箭,优先选择用过的箭,如果没有用过的箭,则选择新箭,并将新箭全部标记为使用过。如果选择了炸弹,需要将其从武器数组中删除。最后将选择的武器类型转换成枚举值,并将武器数组更新为最新的状态。 需要注意的是,如果一件武器有多种,需要全部用上。例如,在轮到使用箭的时候,如果武器数组中有多个新箭或用过的箭,需要全部使用,并将它们全部标记为使用过。

相关推荐

最新推荐

recommend-type

ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设)

毕业设计ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目主要功能: 该项目是基于微信的设备故障报修管理系统,旨在改善传统管理方式的不足。系统涉及管理员、用户和维修员三个角色,管理员可进行用户、维修员、实验室等多方面管理,而用户和维修员可通过微信小程序注册登录,分别进行报修、查看维修状态和交流经验。系统采用Java的SSM框架开发后端,
recommend-type

开车不犯困100首MP3,之41-50,DJ.rar

开车不犯困100首MP3,之41-50,DJ.rar
recommend-type

ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设)

毕业设计ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目主要功能: 该项目是一个基于微信小程序的外来人员管理系统,旨在方便用户管理和查看个人中心、外籍人员信息及派出所信息。系统设计注重功能与界面的融合,支持派出所在线审核外籍人员信息。开发采用成熟技术,如微信开发者工具和JAVA SSM框架,结合源代码进行功能调整,以满足实际管理需求。该系统对外来
recommend-type

光大证券-20180309-放量恰是入市时:成交量择时初探-技术择时系列报告之三

光大证券-20180309-放量恰是入市时:成交量择时初探——技术择时系列报告之三 深度学习 多因子模型 quant 股市 股票 量化交易 量化策略
recommend-type

六个盒子及其应用.pptx

六个盒子及其应用.pptx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

优化MATLAB分段函数绘制:提升效率,绘制更快速

![优化MATLAB分段函数绘制:提升效率,绘制更快速](https://ucc.alicdn.com/pic/developer-ecology/666d2a4198c6409c9694db36397539c1.png?x-oss-process=image/resize,s_500,m_lfit) # 1. MATLAB分段函数绘制概述** 分段函数绘制是一种常用的技术,用于可视化不同区间内具有不同数学表达式的函数。在MATLAB中,分段函数可以通过使用if-else语句或switch-case语句来实现。 **绘制过程** MATLAB分段函数绘制的过程通常包括以下步骤: 1.
recommend-type

SDN如何实现简易防火墙

SDN可以通过控制器来实现简易防火墙。具体步骤如下: 1. 定义防火墙规则:在控制器上定义防火墙规则,例如禁止某些IP地址或端口访问,或者只允许来自特定IP地址或端口的流量通过。 2. 获取流量信息:SDN交换机会将流量信息发送给控制器。控制器可以根据防火墙规则对流量进行过滤。 3. 过滤流量:控制器根据防火墙规则对流量进行过滤,满足规则的流量可以通过,不满足规则的流量则被阻止。 4. 配置交换机:控制器根据防火墙规则配置交换机,只允许通过满足规则的流量,不满足规则的流量则被阻止。 需要注意的是,这种简易防火墙并不能完全保护网络安全,只能起到一定的防护作用,对于更严格的安全要求,需要
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。