Цитата:
Сообщение от Wolsh
Это ВООБЩЕ к персонажу не относится, это относится, если хотите, к интерфейсу, к показу на экране описаний того, что происходит. Этим не персонаж занимается, это не его ответственность.
|
Огромное спасибо! Очень доходчиво, логику уловил. Ох и тяжко же укладывается в голову философия ООП...
Цитата:
|
Сразу бросается в глаза, что эти данные — справочные, то есть они не участвуют в рассчетах, в математике (скорости движений, нанесенного ущерба, сопротивления атаке и т.п.). В контексте персонажа его свойства — это числа, величины.
|
То есть получается, касательно класса Character спокойно оставляем обычные свойства со своими значениями у экземпляров этого класса, к которым будем обращаться или изменять в процессе, верно?
Цитата:
|
Налицо необходимость абстрагировать все эти descriptions в отдельный класс-хранитель описаний (не обязательно константами — если есть желание в будущем сделать возможность выбора языка интерфейса, то может быть тексты будут подгружаться извне в виде XML)
|
Да, всё понятно. Наверное, пока константами, а потом уже можно будет и мультиязычность добавить. Здесь такой встречный вопрос. Что, по твоему экспертному мнению, правильнее хранить в подобном классе-хранителе описаний: только инфо по однотипным объектам (в нашем примере игровым характеристикам персонажа) или вообще все описания, встречающиеся в игре? Какова общепринятая практика: собирать все текста приложения в некий общий класс, продумав систему идентификаторов, и по ним выдёргивать, или хранить описания в разных классах? Сейчас подумалось, что если у персонажа есть имя и фамилия (сейчас это свойства firstName и lastName в классе Character), то следуя приведённой логике, это тоже лишняя инфо, место которой в неком отдельном классе, откуда мы будем доставать её исключительно для вывода пользователю в нужный момент. Верно рассуждаю?
Цитата:
Этот же класс может реализовывать несколько статических методов для получения описаний, получающих идентификатор свойства и, если надо, его величину, и возвращающих строку описания.
Ну, типа Descriptions.getHint(propID:String, propValue:int):String
|
Я правильно понимаю, что свой propID должен назначаться каждой игровой характеристике в классе Character как статическое свойство? Тогда получается, что в метод getHint класса Descriptions мы передаём propID нужной характеристики из класса Character и текущее значение данной характеристики из экземпляра класса Character (propValue)? По ним лезем в двумерный массив с текстовыми описаниями (типа первый индекс - наименование свойства, второй - нужная расшифровка для полученного значения) и вытаскиваем оттуда нужный текст, верно?
Здесь у меня тоже возникает уточняющий вопрос. Насколько я понимаю, все идентификаторы правильнее задавать константами, дабы не путаться. Продолжая наш пример, сделаем propID для силы константу const CHARACTER_STRENGTH_ID = 1, и т.д., чтобы потом не запоминать, где ноль, а где 25. Вопрос, учитывая систему областей видимости, в каком месте программы должны объявляться подобные константы? Ведь они будут использоваться уже как минимум в 2х отдельных классах: Character и Description.