Я работаю над военной игрой, используя java. Эта военная игра имеет разные боевые единицы. Единицами являются, например, «Человек», «Гном» и «Эльф», все из которых имеют свои собственные свойства. Чтобы разместить эти свойства, в настоящее время у меня есть класс для «Человеческий», «Гном» и «Эльф», которые также расширяют абстрактный класс «Единица».Дизайн шаблона для взаимодействия wargame
Теперь я хочу запрограммировать диаграмму повреждений. Например, когда человек атакует карлика, это 56 урона. Когда гном атакует эльф, он наносит 27 урона. и т. д. Каждое взаимодействие между единицами уникально и дает число.
Я ищу шаблон дизайна, который позволяет легко добавить новый блок и обновить диаграмму повреждений, чтобы он взаимодействовал друг с другом. Это также должно облегчить удаление устройства.
Я думал о том, чтобы предоставить каждому модулю уникальный идентификатор и поместить такой метод в каждый блок.
public int getDamage(Unit defender) {
switch(defender.getID() {
case 0: return 27;
case 1: return 50;
....
}
}
Но это кажется очень неуклюжим, чтобы добавить или удалить блок таким образом, потому что вы должны изменить заявление переключателя в каждом классе, который реализует «Unit». Это также не очень читаемо. Я также подумал о том, чтобы поставить оператор switch в отдельный класс «Damage Chart». Но для этого потребуется также оператор switch для злоумышленника и создаст вложенные операторы switch (что является уродливым).
Есть ли чистый способ решить эту проблему? Может быть, шаблон дизайна уже существует для такого рода проблем?
Я также предложил шаблон посетителя. В сочетании с дженериками он должен хорошо выполнять эту работу. – Korashen
Это подразумевает AttackVisitor, который посещает атакующего и защитника в разных режимах. Вы должны написать хотя бы один метод для комбинации злоумышленников-защитников. Есть (количество единиц, квадрат) таких комбинаций. Для меня это не очень удобно. – Svante
В конце концов мне пришлось бы ввести n^2 номера. Создание n^2 методов не так сильно отличается. Это также мешает мне использовать id-номера (которые я ненавидел), и он сохраняет код читаемым. Мне все же кажется немного странным, что мои юниты теперь являются посетителями и посетителями. Но я думаю, это лучшее решение! Thnx! – kerel123