现在游戏中需要实现一个“快速选择”(右图标识1)的功能,自动帮助用户选择出兵数量,需求如下: 资源地的资源量是有上限的(右图标识2处的分母值),若士兵数量充足,尽量把资源拉完,且尽量减少派兵数量; 单次出兵的数量也是有限制的(右图标识3处的分母值),派出的士兵数量不能超过这个限制; 请使用熟悉的程序语言,实现这样的函数 输入参数:资源地load上限,出兵数量上限,拥有的士兵种类列表 返回值:自动选择出来的士兵列表(士兵类型,数量) 函数定义:List<TroopItem> QuickSelectTroopList(int res_max, int march_size_max, List<TroopItem> own_troop_list) 士兵结构定义如下: struct TroopItem { int id; int type; int level; int load; int force; int own_num; int select_num; }使用java实现
时间: 2024-04-23 17:25:10 浏览: 75
Python开发基于机器学习实现自动玩Google小恐龙游戏源码+项目说明+注释拉满.zip
下面是使用 Java 语言实现这个函数的示例代码:
```java
public List<TroopItem> QuickSelectTroopList(int res_max, int march_size_max, List<TroopItem> own_troop_list) {
List<TroopItem> selected_troop_list = new ArrayList<>();
int remaining_load = res_max;
int remaining_march_size = march_size_max;
own_troop_list.sort(Comparator.comparingInt(troop -> troop.load)); // 按照载重从小到大排序
for (TroopItem troop : own_troop_list) {
if (remaining_load <= 0 || remaining_march_size <= 0) {
// 如果资源或者出兵数量已经用完,跳出循环
break;
}
int max_num_load = remaining_load / troop.load; // 根据载重计算可以派出的最大数量
int max_num_march_size = remaining_march_size / troop.load;
int max_num = Math.min(troop.own_num, Math.min(max_num_load, max_num_march_size)); // 取三者中的最小值
if (max_num > 0) {
troop.select_num = max_num;
remaining_load -= max_num * troop.load;
remaining_march_size -= max_num * troop.load;
selected_troop_list.add(troop);
}
}
return selected_troop_list;
}
```
该函数与 C# 实现的函数类似,首先按照士兵的载重从小到大进行排序,这样可以优先选择载重小的士兵。然后遍历每一种士兵,按照需求计算出可以派出的最大数量,并将其存储在 `select_num` 中。最后将选择出的士兵存储在 `selected_troop_list` 中并返回。注意需要在循环中判断资源或者出兵数量是否已经用完,如果用完了就跳出循环。
阅读全文