Система достижений/заданий в игре
В процессе учебы пишу игру на собирание слов из букв, аналоги есть, но точно такой нет, придумал свои особенности. Дошел до создания задач, написал к ним метрики, но как их реализовать не понимаю, подскажите, пожалуйста. Например есть некий список задач:
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 шт):
Я бы писал все результата игр с их деталями в "лог", а потом по нему проверял правилами достижений. В таком случае:
- четкое разделение ролей (есть хранилище, есть правила)
- система не имеет состояния (кроме лога)
- правила легко дополнять и обновлять (1 метод = 1 правило)
- ачивки легко пересчитывать
- вы можете записывать логи и/или отправлять себе на сервер для истории и анализа