Система достижений/заданий в игре

В процессе учебы пишу игру на собирание слов из букв, аналоги есть, но точно такой нет, придумал свои особенности. Дошел до создания задач, написал к ним метрики, но как их реализовать не понимаю, подскажите, пожалуйста. Например есть некий список задач:

ArrayList<String> Task = new ArrayList<>();

Task.add("Собрать слово из 3 букв 3 раза");
Task.add("Собрать слово из 4 букв 3 раза");
Task.add("Последовательность: каждое новое слово длиннее предыдущего, 3 раза");
Task.add("Последовательность: каждое новое слово длиннее предыдущего, 4 раза");
....
....

Счетчики количества слов и т.д. (для простоты не указывал в примере get\set):

int length_3 = 0;
int length_4 = 0;
int sequence_3 = 0;
int sequence_4 = 0;
....
....

Статистика (кол-во правильных не правильных слов), длинна слов, рост очков от собранных слов и прочее завязано на кнопку проверки.

Я пытаюсь сделать универсальный метод или как-то еще проверять правильность выполненных задач. Есть задача правильная, она передается в список, который будет отображаться в разделе "выполненные" ArrayList<String> TaskDone = new ArrayList<>(); и за каждую выполненную задачу будет начисляться какое-то кол-во очков.

Это слишком сложно или я слишком туплю?


Ответы (1 шт):

Автор решения: Kromster

Я бы писал все результата игр с их деталями в "лог", а потом по нему проверял правилами достижений. В таком случае:

  • четкое разделение ролей (есть хранилище, есть правила)
  • система не имеет состояния (кроме лога)
  • правила легко дополнять и обновлять (1 метод = 1 правило)
  • ачивки легко пересчитывать
  • вы можете записывать логи и/или отправлять себе на сервер для истории и анализа
→ Ссылка