Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Различные насадки для руки робота и их использование по назначению. как реализовать? (http://www.flasher.ru/forum/showthread.php?t=177520)

Inet_PC 02.04.2012 22:12

Код AS3:

if (device is Magnet)
{
      var magnetDevice: Magnet = device as Magnet;
      //Делаем что-то с магнитом или роботом
      //Подойти на расстояние действия магнита например, а затем use();
}


Wolsh 03.04.2012 08:21

Паттерн Мост. Тип манипулятора как раз и есть мост, предоставляющий реализацию абстракции "взаимодействие с объектом". Тут не Стратегия с тупым use(), относящимся только к манипулятору. Тут мост к соответствующему разделу логики взаимодействия, устанавливаемый при смене дивайса.

Добавлено через 15 минут
Абстрагируйте параметры взаимодействия, чтобы единообразно описывать любое.
Например, расстояние, на котором осуществляется взаимодействие.
Количество затрачиваемой энергии.
Результат - разрушение, нагрев, изменение положения, массы и т.п. – что произойдет с объектом?
Всю эту инструкцию можно хранить собственно в дивайсе в виде параметров. Если получится абстрагировать взаимодействие, то получится и возможность создавать новые плагинские девайсы и единообразно подключать их и использовать. Робот анализирует параметры, сравнивает их с ситуацией и задачей, и совершает необходимые действия – по вашему описанию, если расстояние до объекта не удовлетворяет параметрам, надо его сократить, и т.п.

Den_root 03.04.2012 12:31

Wolsh
Т.е. создаем единый интерфейс-мост и его реализации выстрелить, подтянуть, закрыться и т.п.
Создаем интерфейс девайса и там делегируем наш мост, а так же добавляем абстрактные свойства такие как расстояние до объекта и т.п., а реализация будет работать с этими свойствами.
P.S. Даже если ответите утвердительно всё равно завалю еще тонной вопросов:D

Wolsh 03.04.2012 13:52

Смысл моего поста был в том, что надо подняться от руки к голове))) Абстрагировать один метод use() мало, так ведь? Дивайс влияет не только на то, как будет двигаться, выглядеть и действовать сам дивайс, но и на то, как будет вести себя робот.
1. Поведение робота в какие-то моменты учитывает, какой именно дивайс у него смонтирован.
Как это абстрагировать? "Мозг" робота должен учитывать при расчете поведения какие-то параметры дивайса. Например, что это armor, или это weapon, или это tool. Это и есть "робот знает, что у него есть пушка". Надо определиться, какие базовые типы могут быть – защита, оружие, инструмент. У них естественно подтипы – оружие ближнего боя или на расстоянии, или массового поражения, и т.д. Инструмент для механики, для микроэлектроники, для жарки картошки?
Мозг анализирует объект в поле "зрения" ина основании своей оснащенности определяет, может ли с этим объектом взаимодействовать. Таким образом дивайс ни о чем сам не думает за робота, а только предоставляет ему данные о себе, чтобы тот решил, стоит ли вообще вызывать use(), и надо ли перед этим что-то сделать (подойти поближе, сходить подзарядиться и т.п.)

Den_root 03.04.2012 18:46

Wolsh
Не ну то, что нужно еще и роботу мозги править это мы ужу выяснили несколькими постами выше, вопрос в том как это грамотно обставить? Inet_PC приложил if/switch, вы вот в своем предыдущем посте Brige, но я не совсем понял как его можно присобачить под это дело.

Wolsh 03.04.2012 20:35

Inet_PC предполагает действие от дивайса, по сути – как использовать дивайс, а Вам (я надеюсь) надо сначала определиться, надо ли его использовать. Чтобы не стрелять по пулям и не магнитить врага. А эта тема как бы выходит за рамки дивайса. Дивайс только предоставляет свой тип в обычном свойстве, далее интеллект робота должен оценить ситуацию и полезность данной руки в этой ситуации. Если надо защищаться от пуль и левая рука предоставляет защитный дивайс, робот использует левую руку, а не правую с паяльником. Мост здесь потому, что Стратегией ( use(...?...) ) не ограничишься. Тут нет даже выбора контекста, в котором юзать. Рука не может поменять дивайс в зависимости от контекста, понятие контекста, а значит и стратегии, здесь бессмысленно. Здесь "метаконтекст", то есть – Мост, то есть контекст диктуется внешними для интеллекта условиями – в данном случае типом дивайса, который и составляет мост с защитным блоком интеллекта. То есть, когда нужна защита, защитный блок интеллекта обращается через мост к защитной руке, и на основе её инструкции строит защитное поведение.
Всё еще абстрактно? Надо больше конкретики о проекте наверное, чтобы говорить конкретнее. Да и западать конкретно на паттерн нет особого смысла, я просто хотел подчеркнуть что это не Стратегия, как предлагали товарищи выше. Здесь не просто выбор метода, здесь формирование поведения в зависимости от того, что на другой стороне моста, от инструкций дивайса.

GBee 03.04.2012 20:35

if/switch при интерфейсе, как-то не очень хорошо.

Вот еще пара вариантов (правда может это одно и то-же).
1) use просто генерит какой-то объект (не обязательно визуальный), исходя из состояния робота (пулю, магнитную волну, щиток). Соответственно пулька улетает по своим делам. Магнитная волна тоже. Щиток "виснет" со стороны щита. А ребята с кем произошел соответствующий контакт сами думают. Поймал пульку - помер. Поймал волну - сдвинулся в сторону откуда она прилетела. Щиток взаимодействует только с пульками (там они сами "думают").

2) Отдаем в use информацию об окружающем мире, а инструмент уже сам решает что делать, исходя из состояния своего и хозяина.

Wolsh 03.04.2012 20:45

как бы алгоритм..
1. Событие - в поле зрения появился объект
2. Анализ объекта. Например, объект – Враг
3. Врага надо уничтожать. Анализ системы. Проверяем, есть ли Оружие.
4. Правая рука предоставляет оружие, можно нападать.
5. Задействуем интеллект атаки, передаем ему мост к дивайсу в правой руке.
6. Анализируем параметры оружия. Энергии достаточно для атаки. Расстояние слишком большое.
7. Приближаемся к врагу на расстояние по инструкции оружия
8. Анализируем оружие. Прицеливание требуется
9. Выполняем прицеливание
10. Производим выстрел
11. Анализируем оружие. Перезарядка требуется
12. Перезаряжаем
13. Анализируем состояние цели / результат атаки
и т. д.

Den_root 06.04.2012 00:26

Wolsh
Итак, спустя пару дней, я кажется переварил несколько последних ваших постов.
Ни робот решает, что нужно сделать, что бы использовать дивайс. Он лишь сообщает дивайсу, что хочет его использовать и дивайс на основании параметров робота (можно, наверно отправить дивайсу ссылку на всего робота) сообщает ему что тот (робот) должен делать (подъехать поближе, развернутся и т.д.).

Wolsh 06.04.2012 00:39

Обе руки сразу, или как-то поочереди? ))))))


Часовой пояс GMT +4, время: 17:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.