Я кодирую проект, связанный с видеоигрой, и у меня есть класс Gun, представляющий каждое оружие. У нас будет около 30 уникальных орудий, и их настройки будут считываться из файла, чтобы можно было легко настраивать значения. Каждое ружье имеет 70-80 уникальных свойств. Есть 4-5 настроек, детализирующих их внешний вид, 5 настроек, связанных с их перезагрузкой (размер их обоймы, сколько времени это займет, какие боеприпасы для этого требуются), 10 или около того настроек, касающихся того, сколько урона они наносят другим игрокам. и так далее, до 80 или около того уникальных настроек, различных для каждого пистолета. Кроме того, около 30 из этих настроек являются необязательными, что означает, что они не применимы к каждому оружию (например, время между полностью автоматическими выстрелами не применяется к полуавтоматическому ружью, а свойства прицела прицеливания не применяются к выбранному оружию, которое 'не видны)
У меня проблемы с сохранением всей этой информации в классе Gun в удобочитаемом и быстром виде (к этим значениям будут обращаться довольно часто, поэтому загрузка из файла каждый раз кажется неэффективной). Трудно найти какой-либо хороший способ использовать наследование для многих из них, потому что существует множество различных комбинаций свойств (оружие различается в зависимости от типа огня, независимо от того, можно ли его увеличить или иметь прицел и т. Д. c)
В настоящее время у меня есть разные свойства, относящиеся к одному и тому же в их собственных классах настроек, причем каждый пистолет использует 7 разных классов настроек, содержащих соответствующие настройки, как показано:
protected final int id;
private final String name;
private final String type;
private final ItemCategory tier;
private final AppearanceSettings appearanceSettings;
private final ReloadSettings reloadSettings;
private final ShootingSettings shootingSettings;
private final AimingSettings aimingSettings;
private final DamageSettings damageSettings;
private final BulletImpactSettings impactSettings;
private final SoundSettings soundSettings;```
Я не уверен, что есть много накладных расходов при выполнении чего-то вроде этого, когда в памяти есть ~ 30 * 7 = 210 классов, просто хранящих переменные, или если доступ к указанным переменным происходит медленнее.
Один из других подходов, о которых я могу думать просто имеет 80 или около того переменных экземпляра в классе оружия, но читаемость, очевидно, будет довольно плохой. Конструктор с 80 параметрами был бы особенно кошмаром.
Я также думал о том, чтобы иметь перечисление, в котором перечислены все свойства, и иметь карту в классе оружия, таким образом, только соответствующие свойства должны быть установлены для каждого оружия, которое может сэкономить место? Однако я не знаю, замедлит ли это доступ.
Извините, что немного поболтаю, но я думаю, что понял свою проблему - как лучше всего хранить так много свойств в удобочитаемом и эффективном виде? Спасибо!