我正在开发Android游戏。
游戏中的区域有精心设计的插槽,可以确定一次可以制作多少项目。如果没有可用的插槽,则会为该项目提供预定的开始日期,该日期与插槽何时可用相关。
我遇到的问题是当前代码只考虑第一个插槽何时可用,而不是任何插槽时。
添加预定项目:
long timeSlotAvailable = getTimeSlotAvailable(location);
Pending_Inventory newScheduledItem = new Pending_Inventory(itemId, state, timeSlotAvailable, quantity, craftTime, location);
获得时段的可用时间:
public static long getTimeSlotAvailable(Long location) {
List<Pending_Inventory> pendingItems = getPendingItems(location, true);
int locationSlots = Slot.getUnlockedSlots(location);
long timeAvailable = System.currentTimeMillis();
// Works for single slots, not for multi though. Needs to consider slot count.
for (Pending_Inventory pending_inventory : pendingItems) {
long finishTime = pending_inventory.getTimeCreated() + pending_inventory.getCraftTime();
if (finishTime > timeAvailable) {
timeAvailable = finishTime;
}
}
return timeAvailable;
}
该代码通过查看当前正在制作或计划制作的每个项目,并获得最后一个完成的时间来工作。
locationSlots
目前尚未使用,但我相信需要计算一个广告位的正确时间。
我已经尝试了一些方法(将所有完成时间添加到数组中并使得n值显示出承诺,但我无法理解它),但完全没有想法。
谢谢!
答案 0 :(得分:0)
最终采用了阵列方法,并取得了成功。
public static long getTimeSlotAvailable(Long location) {
List<Pending_Inventory> pendingItems = getPendingItems(location, true);
int numSlots = Slot.getUnlockedSlots(location);
// Add all of the times a slot will become available to a list
List<Long> finishTimes = new ArrayList<>();
for (Pending_Inventory pending_inventory : pendingItems) {
long finishTime = pending_inventory.getTimeCreated() + pending_inventory.getCraftTime();
finishTimes.add(finishTime);
}
// Sort these times so the latest time is first
Collections.sort(finishTimes, Collections.<Long>reverseOrder());
if (finishTimes.size() >= numSlots) {
// If we're all full up, get the first time a slot will become available
return finishTimes.get(numSlots-1);
} else {
// Otherwise, it can go in now
return System.currentTimeMillis();
}
}
希望这可以帮助将来遇到类似问题的人。