|
|
|||||
Цитата:
Помнится, угарали над ними всем отделом. Цитата:
Хотя, что скрывать, когда-то и я относился к коду как к некоему "шифрованию", что чем сложнее и запутаннее будет мой код - тем круче.
__________________
while(live()) { hope(); } |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Но вот дальше как этим пользоваться? Заранее создавать экземпляры условий, записывать их в переменные с говорящими названиями и выдавать по идентификатору из класса-справочника?
__________________
Не сломано - не чини! |
|
|||||
точно так же и пользоваться. Создание классов нужно для удобочитаемости и типизации, которая позволит IDE подсветить нужное и не даст проделать не нужное.
public class Action { pritvate var _id:String; pritvate var _name:String; pritvate var _conditions:Vector.<Condition>; public function Action(id:String, name:Sting, conditions:Vector.<Condition>) { _id = id; _name = name; _conditions = conditions; } } public class Condition { pritvate var _owner:String; pritvate var _prop:String; pritvate var _value:Boolean; public function Condition(owner:String, prop:String, value:Boolean) { _owner = owner; _prop = prop; _value = value; { } //исопльзование var action:Action = new Action("000001", "Ударить ножом в глаз", new <Condition>[ new Condition("self", "hasHand", true), new Condition("self", "hasHand", true), new Condition("self", "hasHand", true), new Condition("self", "hasHand", true), new Condition("self", "hasHand", true), ]) смысл в том, что так подсказки вылезают, по коду навигация упрощается и в целом православней выглядит.
__________________
while(live()) { hope(); } |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Ну чёрт его знает... Как-то не впечатляет. Как в концовке известного анекдота: "Е$%т как е%$ли, только бухгалтерии добавилось"
__________________
Не сломано - не чини! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я здесь за формализацию в класс Condition, конечно (с детства не люблю Обжекты).
Пока все просто, выглядит оно почти одинаково, конечно. Но все-таки инкапсуляция в класс позволит как-то узаконить свойства, а там глядишь и методы подтянутся. В частности, я бы рассмотрел возможность перенести метод test() в Condition, где ему было бы тепло и уютно среди своих. Опять же, появляется возможность расширения на подклассы с какими-то специфическими свойствами и собственными(!) алгоритмами проверки в override методе test(). Которые не нужно будет расписывать в Action и обновлять каждый раз когда придет в голову новая разновидность Условия. Это взгляд в прекрасное будущее. Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Поймал себя на мысли, что из шаблона "стратегия", который вы с ZergMaster обоснованно рекомендовали мне взять за основу, после изъятия контекстов и интерфейсов стратегий, по сути ничего и не осталось. Только сам экземпляр Action или наследника, добавленный методом композиции в мою Модель в переменную action. Да и сам Action так себе получился. В нём уже прилично неизменных свойств и сеттеров-геттеров к ним. Есть даже идея всё это хозяйство вынести в отдельный класс ActionData, и "подключать" его к более компактному классу Action. Получается, что в ActionData "живут" все постоянные свойства, как в справочнике, а из них собираются уже готовые действия через добавление действующих лиц, т.е. public class Action { private var _actionData: ActionData; private var _attacker: Character; private var _defender: Character; public function Action (data: ActionData, attacker: Character, defender: Character) { } } Что касается метода test (attacker: Character, defender: Character), то он пока остался в классе Action фактически как транзитный. Ибо я точно знаю, что подобным образом проверять условия придётся не раз и не два в различных ситуациях, поэтому "зашивать" его в Action было бы недальновидно. Ничего пока лучше не придумал, чем сделать "статический" класс CheckActionConditions, специализирующийся на проверке условий Засылаю туда экземпляр Action и действующих лиц, обратно получаю true/false. Цитата:
__________________
Не сломано - не чини! Последний раз редактировалось Appleman; 15.12.2017 в 16:28. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Цитата:
Единственное, что не очень понравилось, так это то, что в класс Condition приходит каждый раз "тащить" всё то, что непосредственно будет сравниваться - owner-ов свойств. И персонажи - ещё полбеды, они хоть в самом Action-е живут. Так ещё есть локация, какие-то текущие параметры модели... Вот что с этим делать, до конца непонятно Навскидку подумалось завести некий класс State, который будет хранить изменяемые параметры, напрямую не относящиеся ни к персонажам, ни к локации. И также передавать его, в test().
__________________
Не сломано - не чини! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Что, реально так много условий, не связанных с персонажами? Что значит "локация" например? Что под водой нельзя стрелять из лука а ножом пырнуть можно? Ну ок, ладно. Допустим, в объекте ЛокацияИнфо можно хранить много разных данных, включая погоду и даже скрипя зубами дату-время (из которой можно определить зима или лето, ночь или день — как бы тоже локация, но во времени). Ну а что еще такого есть в игре, что не относилось бы ни к персонажам ни к миру, но при этом влияло бы на доступность действий? Хочу пример, чтоб понять, а то моей фантазии не хватает.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Я тут опять застрял. Пока успешно насоздавал игровых действий, научил Модель отбирать доступные, а Вью - раскладывать их по группам и обеспечивать навигацию пользователя. В общем, дошёл до момента выбора. Когда пользователь делает свой выбор, в контроллер летит выбранный им объект типа Action, который, в соответствие с используемым паттерном "стратегия", присваивается переменной модели _action и у неё сразу же запускается метод _action.initiate(). А вот дальше - опять попал в тупик. Дело в том, что действия точно будут иметь свою специфику в плане обработки, и ограничиться одним классом не получится. А наследоваться, как в классической "стратегии", тоже не выходит, т.к., напомню, каждый объект Action создаётся Моделью в рантайме, путём добавления туда экземпляра ActionData, и персонажей: public class Action { private var _actionData: ActionData; // Данные выполняемого действие private var _ch1: Character; // Первый персонаж private var _ch2: Character; // Второй персонаж public function Action(data: ActionData, character1: Character, character2: Character) { _actionData = data; _ch1 = character1; _ch2 = character2; trace ("Создали действие по шаблону " + _actionData.actionID); } Единственный, кто "знает" о специфике того или итого действия - это ActionData, т.к. она создаётся вручную. Но там, блин, нету персонажей, они только в момент создания Action появляются. Некого обсчитывать! Помогите плиз, как мне с этим справиться. Спасибо.
__________________
Не сломано - не чини! |
Часовой пояс GMT +4, время: 21:28. |
|
« Предыдущая тема | Следующая тема » |
|
|