Существует ли шаблон для этого?

у меня есть что-то, что требует матрицы значений, подобных покемону:

pokemon
(источник: firechao.com)

у меня есть объект класса для каждого из типов, есть ли шаблон или хороший способ реализовать это как средний слой или в классах?

8
задан Glorfindel 22 July 2019 в 23:13
поделиться

6 ответов

Да, попробуйте использовать паттерн проектирования Decorator.

подсказка: просто создайте класс Normal со всеми необходимыми вам статистиками. Затем создайте класс Decorator для каждой строки матрицы: FireDecorator, SteelDecorator, которые применяют множитель для атаки/защиты.

бонус #1: вы можете очень легко построить "Огненно-стального персонажа", динамически (замысел шаблона)

бонус #2: когда вы добавляете другого персонажа, скажем, "Гиганта", вы просто добавляете один класс, не трогая ничего другого

5
ответ дан 5 December 2019 в 10:40
поделиться

Словарь использует имена атакующего (Fire, Ice и т. Д.) В качестве ключа, который содержит словари, которые используют имена защитника в качестве ключей и мультипликаторов. как ценности.

1
ответ дан 5 December 2019 в 10:40
поделиться

Если у вас есть отдельный класс для каждой «вещи», к которой относятся эти типы (ваш покемон или что-то еще), классы могут содержать статическую структуру хэша / карты / словаря, которая дает, какие множители существуют для атаки других. Такой хеш будет представлять одну строку таблицы. Если вам действительно нужен обратный поиск, просто сделайте еще один, в котором будет храниться столбец информации.

0
ответ дан 5 December 2019 в 10:40
поделиться

Вы можете использовать 2 карты (map в java, в других языках может иметь другое название): одну для

Attacking-->Defending и одну для Defending-->Attacking.

Рассмотрим пример Attacking-->Defending. Карта будет содержать типы Attacking в качестве ключей и массивы типов Defending в качестве значений. Например:

Fire-->[Fire, Water, Grass, Ice, Bug, Rock, Dragon, Steel]

0
ответ дан 5 December 2019 в 10:40
поделиться

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

7
ответ дан 5 December 2019 в 10:40
поделиться

Это основная проблема множественной диспетчеризации. К сожалению, большинство языков не поддерживают множественную отправку.

Так что я бы, наверное, использовал карту карт.Внешняя карта отображает атаки на карты защиты, которые, в свою очередь, отображают защиту на очки / эффекты / что угодно.

Вы можете использовать шаблон Visitor, но он быстро становится громоздким.

В Python, предполагая, что вы не используете много подклассов (например, никаких подклассов Ice), вы могли бы использовать сопоставление словаря (атака, защита) кортежей для очков. Это было бы довольно чистое решение и поддерживалось бы множеством языков (все, что вам нужно, это класс Pair и возможность представлять типы атак как объекты, либо через объект класса, либо что-то вроде перечисления).

3
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: