Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.66.178] |
|
Сообщ.
#1
,
|
|
|
Прикреплённый файлdom_obj.zip (1,8 Кбайт, скачиваний: 57)
Разработать систему построения дома из элементов заданного типа: окно, дверь, крыша, стены, фронтон и т.д.
Эти элементы надо сгенерировать на краю поля экрана, иметь возможность генерации разных по цвету и по размерам элементов. Перенося их со склада на "стройплощадку" построить дом (два вида - спереди и сбоку). Программу следует написать с использованием объектного типа, наследованием и виртуальными методами. что делать?очень важно. есть исходник этой программы в 3Д, а нужно написать программу только в 2Д Добавлено хотя бы набросок, препод изнасилует, завтра сдать нужно. помогите прошу!!! |
Сообщ.
#2
,
|
|
|
Вам в раздел "Помощь студентам". А, в целом, это сильно некрасиво ничего не делать, а потом взять и попросить кого-то сделать за вас. От таких в стране и бардак... Пусть насилует, зато вы впредь будете ответственнее.
|
Сообщ.
#3
,
|
|
|
я не прошу делать за меня, я прошу объяснить как делать
|
Сообщ.
#4
,
|
|
|
Цитата piko @ хотя бы набросок, препод изнасилует, завтра сдать нужно. помогите прошу!!! Тут если только свечку подержать. Так как быстро это не сделать. 1) Я бы посоветовал посмотреть на аналогичные программы. Таких много. 2) Цитата piko @ есть исходник этой программы в 3Д, а нужно написать программу только в 2Д Если это так, то просто надо сделать вывод в соответствующих проекциях. Но что-то мне говорит что такой программы нет. А да в исходнике в самом вверху практически ничего нет. 3) Цитата piko @ я не прошу делать за меня, я прошу объяснить как делать Это вообще не вариант. В задании написано что делать, фактически это и есть как. Вопрос насколько глубоко ваш провал в знаниях. Создаешь объекты типа: окно, дверь, крыша, стена Думаю надо породить от общего предка. Унаследовать можно общие свойства и методы объектов. Создаешь панель слева путем создания объектов и указания координат вывода. Надо добавить прокрутку. Сделать обработку мыши по переносу объектов с панели на рабочую площадку. Путем создания объекта и изменения его координат. Ещё надо сделать обработку событий мыши по изменению существующих свойств объектов, цвет, размер. По нажатию кнопки надо будет вызвать меню свойств объекта. А перед этим надо определить по координатом соответствующий объект. А ещё надо и графический редактор объектов сделать. Графическое представление можно сделать путем векторным описанием. Любой объект можно представить группой произвольных многоугольников. Это для упрощения по хорошему ещё и сплайны можно впихнуть. Не забудь отделить вывод от ввода и модели поведения объектов. При обработке ввода мыши надо разделить на режимы. |
Сообщ.
#5
,
|
|
|
ну вот я что то набросал. но она все равно очень криво работает
эту программу можно доработать до нужной? Прикреплённый файлdomm.pas (2,65 Кбайт, скачиваний: 147) |
Сообщ.
#6
,
|
|
|
piko
На задание описанное в 1 посте нужно не меньше 3-х дней. Точно хочешь продолжить мучиться? Программу в 5 посте можно выкинуть. Так как её проще переписать, чем доработать. Ну и по любому тут не хватает нескольких тысяч строк кода минимум 2-х. Твоя задача научиться мыслить абстрактно. Мыслить объектами. Тут как минимум надо сесть и подумать. Выдели общее для объектов. Какие общие структуры можно применять для описания объекты типа: окно, дверь, крыша, стена? Какие общие действия с ними будут происходить? 1. Ты мучился подбирал циферки чтобы правильно нарисовать и расставить прямоугольники. Так никто не делает. Делается графический реактор, который запоминает нажатия мыши. Нарисованный объект можно сохранить в файле. А потом если надо загрузить и от рисовать с ново. Это гораздо проще и быстрее. 2. Более того таких одинаковых объектов можно нарисовать много и в разных местах используя простые процедуры и функции. |
Сообщ.
#7
,
|
|
|
я готов мучатся. и 3 дня есть. но какие 2 тысячи строк? это 11 класс. самое главное в этой задаче это (Программу следует написать с использованием объектного типа, наследованием и виртуальными методами) и вот это (Эти элементы надо сгенерировать на краю поля экрана, иметь возможность генерации разных по цвету и по размерам элементов).
я не понимаю как это сделать. ну все таки на счет 2 тысяч строк спорить не буду, тебе виднее. Добавлено я в 11 классе, в школе которая находится можно сказать в селе. я единственный в школе для кого это не просто набор странных символов. я прочитал всю теорию по этому поводу, но мне нужно наглядно убедиться, ибо я не понимаю как это применить на практике( за этим я и обратился сюда) препод дал мне это задание тк у меня с ним не есть хорошие отношения(затопить решил наверное) |
Сообщ.
#8
,
|
|
|
piko
Тебе сказали что "Программу следует написать с использованием объектного типа, наследованием и виртуальными методами." В твоем коде и близко этого нет. Советую почитать об этих вещах. Затем каждый элемент который надо выводить сделать через объект с известным набором свойств. Возможно, как заметил Pavia, они могут создаваться от другого объекта с общими свойствами. А далее примерно такой порядок. Для работы с графикой, где будут двигаться предметы(можно перемещать) требуется: 1 перед выводом элемента скопировать в буфер область экрана которую займет объект, 2 отрисовать объект(наложить), 3 вставить буфер 4 определить новые координаты для вывода, затем как в п.1 -3. Если это просто статичные объекты, отрисованные 1 раз, с этим можно не париться. Ещё вариант - просто заного пересоздать сцену - очистить весь экран, построить все заново. Добавлено И вообще это полный маразм делать такие вещи через примитивы. Должен быть 2D движек, сами графические файлы объектов, а далее выводим файлы, 2D фвижкем масштабируем и перемещаем\вращаем объекты. |
Сообщ.
#9
,
|
|
|
я же говорю, я теорию прочитал. Но все равно не полностью понимаю как применить ее на практике
|
Сообщ.
#10
,
|
|
|
я именно как составлять объекты не понимаю. помогите. накидайте набросок программы. пожалуйста))
|
Сообщ.
#11
,
|
|
|
Цитата piko @ я именно как составлять объекты не понимаю. помогите. накидайте набросок программы. пожалуйста)) А чего именно не понятно? Приведи свои попытки. В BP просто терминология старая. Поэтому, давай определимся сразу объект это экземпляр класса. Объект состоит из полей и методов. Классы имеет название, также предка от которого порождается класс. Внутренние поля и методы. Методы можно разделить на 2 типа для доступа к переменным и для доступа к объекту. Согласно теории сокрытия все переменные делаешь сокрытыми, защищенными. А доступ делаешь к переменным делаешь через методы. К примеру TWindow= object(TBaseBlock) private {Поля, внутренние переменные} Width:Integer; Height:Integer; public {методы переменных} function GetWidth:Integer; procedure SetWidth(value:Integer); function GetHeight:Integer; procedure SetHeight(value:Integer); {методы объекта} constructor Create; destructor Destroy; и т.д. end; TWindow - название класса TBaseBlock - предок от которого порождается класс. Width, Height поля объектов. Имена переменных, процедур функций, конструктора и деструктора можно задавать произвольно. Но обычно делают так как у меня описано. Приставка Set, Get. Конструктор и деструктор обязательные поля. Конструктор нужен для инициализации объекта. Для задания первоначального состояния объекта. К примеру ширину и высоту можно установить в 1, а методы реализовать таким способом чтобы нельзя было установить состояния переменных в 0. Тем самым можно решить проблему деления на 0. Деструктор служат для коректного уничтожения. Если у тебя будут динамически переменные(поля объекта), то в деструкторе ты должен будешь их освободить. Создание или генерация объекта var Window1,Window2:TWindow; begin Window1:=TWindow.Create; Window2:=TWindow.Create; Window1, Window2 имена объектов. Добавлено Для самостоятельной работы. Подумать какие параметры надо и стоит передавать в конструктор Create. Описать метод Draw или PaintTo. Т.е дать описание декларации метода и описания реализации. Цитата piko @ наследованием и виртуальными методами. Какие надо сделать методы виртуальными, а какие надо унаследовать? |
Сообщ.
#12
,
|
|
|
спасибо большое, большинство вопросов ушло в небытие. вы гений)) мне для каждой вещи создавать свой объект? те отдельно окно,дверь и т д
Добавлено так в том то и дело, он мне просто сказал виртуальными методами и наследованием, так что хрен пойми что он хочет |
Сообщ.
#13
,
|
|
|
Цитата piko @ мне для каждой вещи создавать свой объект? те отдельно окно,дверь и т д Да. Для каждой вещи создавать свой тип объекта. Но чтобы не дублировать код используют общего предка, т.е наследование. То что нельзя унаследовать перекрываешь или используешь виртуализацию. |
Сообщ.
#14
,
|
|
|
Видимо, просто, чтобы и дверь и окно были от одного предка 'рама'. А окно - прозрачная рама или стеклянная, а дверь - деревянная рама (или какая-то другая).
|