![]() |
Наследование классов и интерфейсов
Здравствуйте.
Есть некоторое устройство подключаемое по COM-порту к компьютеру. Я написал класс Module который описывает внутреннюю структуру этого устройства (линии ввода-вывода, реле, линии входа АЦП). Этот модуль физически управляет движением автомобиля, к примеру. И вот для того, что бы автомобиль поехал вперёд нужно на трёх определённых линиях модуля установить заданные значения, что бы поехал влево нужно установить другие значения и т.д. Мне хочется сделать некоторый класс (или что-то ещё), который будет служить некоторой прослойкой. Я создал интерфейс и класс-наследник. Код:
Что нужно сделать, что бы можно было делать это сопоставление на уровне конструктора объекта класса Bot? |
тут стоит смериться - код уменьшить не получится и либо в forward указывать все возможные варианты с выбором на основе некой приватной(публичной или защищенной) переменной внутри класса Bot, которая выставляется по входному параметру конструктора (или еще как), либо в самом классе bot предусмотреть некие приватные подфункции, множество которых способно описать все разнообразие возможных действий в forward и ему подобных, а в самом forward только описать условия по той же приватной(публичной или защищенной) переменной.
а... есть еще вариант- так называемые директивы препроцессора. но тут конкретный способ будет определен при компиляции программы, а не в ходе ее исполнения. |
Beyound, спасибо что отозвались... а то подумал что вообще даже идей не будет :(
В принципе я могу смириться с тем, что код станет неуменьшаемым, но как обходятся с этим конструкторы игоромобилей или программисты игр. Есть интерфейс пользователя, клавиши нажимает - мышкой двигает. Создаются события. И мне сильно кажется, что исходя из этих событий не пишутся команды в контролеры, а создаются другие события или есть некоторый класс, который связывает эти вещи (в моём случае это Bot). |
ну незнаю кто как делает, но вообще игры пишутся так - есть некоторый цикл глобальной прорисовки, работающий ну грубо говоря циклично, как закончился начинается с начала. этот цикл сам вызывает в классах (деревьях, машинках и т.п.) функции прорисовки, которые по состоянию этого класса и поступающих внешних прерываний определяют как изменяется этот объект во времени. ясное дело что скажем машинка как класс может состоять из класса колесо, кабина и т.д. и тогда функция прорисовки машинки не что иное как вызов в подклассах функций прорисоки их. в итоге все сводится к тому что в самом глубоко классе написато что (грубо) исходя из "обстаноки" такая то фигурка с такими то текстурами имеет такие то координаты.
как же на все это влияет нажатие кнопок мышки или клавы - а легко - эти события чаще всего фиксируются по факту, а вот в функциях прорисовки описывается, что делать при обнаружении прерывания с клавы и т.п. оно наглядно видно - когда игра очень грузит комп то следующий кадр - это суммарно все то, что нажал игрок между предыдущим кадром и расчетом следующего. |
Beyound, фактически сейчас у меня похожая реализация работы. По таймеру в контролеер пишутся значения некоторых переменных. События, нажатия клавиатуры - меняют эти значения, и соответственно они попадают в контроллер.
Я хотел некоторым образом съэкономить на трафике между компьютером и контроллером. В начальный момент времени в контролер попадают значения по-умолчанию. При нажатии на кнопку "Up", к примеру, происходит изменение переменной, генерируется событие изменения, обработчик события записывает текущее состояние переменных в контроллер. И пока я не отпустил кнопку "Up" другое событие не будет генерироваться и данные не будут писаться в контроллер. |
Время: 01:43. |
Время: 01:43.
© OSzone.net 2001-