У меня есть процесс, который должен выполнить ряд задач. Возможно, что процесс попытается выполнить попытку задачи, которая уже была завершена, и в этом случае он должен проигнорировать эту попытку и сгенерировать запрос для выполнения другой задачи. Я не уверен в хорошем способе отслеживать, какие задачи выполнены, а какие еще необходимо обработать.
Я буду использовать игру «Яхтзе» в качестве примера, чтобы продемонстрировать, как я в настоящее время справляюсь с этим. Сначала я создаю список задач, в данном случае комбинаций выигрыша:
combinations = new ArrayList<String>();
combinations.add("one");
combinations.add("two");
...
combinations.add("fullhouse");
combinations.add("smallstraight");
combinations.add("yahtzee");
...
Когда игрок использует одну из этих комбинаций, я удаляю ее из массива, в данном случае «небольшую прямую» комбинацию:
public void selectSmallStraight() {
int index = combinations.indexOf("smallstraight");
if(index < 0)
System.out.println("Small Straight already used");
//Prompt the player for another selection
else
combinations.remove(index);
score += 30;
}
Как только все комбинации были использованы, игра заканчивается.
Использование списка массивов мне кажется очень примитивным, не говоря уже об уродстве. Я подумал об использовании Map<String, Boolean>
, а затем просто пометил объект как ложный после его использования, но я бы предположил, что уже есть какой-то «стандартный» способ сделать это гораздо более элегантным.