![]() |
|
|
![]()
|
|
| jaAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
Помогите, пожалуйста, решить такую задачку: нужно в графическом режиме 320x200 256 цветов нарисовать буковку "К" так, что ее высота 100 (50 сверху, 50 снизу), толщина 25, и полукруглые очертания. Желательно с примером. Заранее спасибо всем откликнувшимся.
P.S. Я насколько знаю, делается это прорисовкой по пикселам. Дк каждую линию отдельно прорисовывать чтоли? |
|||
|
||||
| makwen |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
код для установки режима 320х200 256 цветов:
используй функцию 0Ch прерывания INT 10h, которая рисует пиксель. Пример:
Создавай циклы и прорисовуй свою букву "К"! Удачи! |
||||
|
|||||
| jaAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
А как циклы - то создавать? Вот, к примеру, в твоем втором коде как сделать так, чтобы dx увеличивалась с 50 до 75? И еще такой вопрос: как задать условие типа if...then? Ну, все в том же коде надо так: когда dx=75, то прибавить к cx 1 и чтобы dx опять стала равна 50. Ну и снова цикл пошел, разумеется. Как вот все это, подскажи пожалуйста.
|
|||
|
||||
| makwen |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
мда... я думаю, что за один пост не смогу описать синтаксис языка Assembler. Так что бери любую книгу по асму, и читай, там все ясно написано!
Например Питер Абель "Ассемблер. Язык и программирование для IBM PC" |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Даю наводку. Заметь слово пишеться слитно, тот есть не даю на выпивку!
Для примера - код, выводящий вертикальную составляющую буквы "К"
Остальное, таким же способом, додумывай сам. Можно еще посоветовать, чтобы было легче расчитать букву, сделай сначала ее на бумаге и просчитай координаты граничных точек. Лучше сначала прорисовать верхнюю линию буквы, потом нижнюю. Там надо за раз менять и di и bx. То есть не то хотел сказать. Хотел сказать, что надо отдельно прорисовывать верхнюю линию, потом нижнюю. Так не то, что надо, так просто удобней. Это сообщение отредактировал(а) anwe - 20.10.2006, 21:27 |
|||
|
||||
| jaAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
Вот такая буковка получилась. Но что - то какая - то она некрасивая anwe, с твоим кодом не разобрался пока, только напортачил - TP повис, и все... |
|||
|
||||
| jaAlex |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
Вот код программы, которая рисует линию. Я хочу, чтобы таких линий было 100, и чтобы они были друг под другом. Для чего делаю так:
Помоему, все правильно, но программа виснет, и не воспринимает нажатия никаких кнопок с клавиатуры. Цикл в цикле неправильно делаю, чтоли, а может еще чего. Что тут не так? Почему виснет? Подскажите плз!!! Заранее спасибо всем откликнувшимся. |
||||
|
|||||
| anwe |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Не знаю, что там можно напортачить. Ну да ладно. В твоем последнем коде 3 ошибки. 1. Не верно указан адрес ячейки памяти в видеопамяти. Не там стоит скобка. Вместо
надо
2. Не верный цикл в цикле.
Не верное использование регистра cx. Второй цикл начнется с нулевым его значением. Для этого нужно использовать либо стек, где хранить cx для внешнего цикла, либо другой регистр. Использование стека в цикле -
3. Я тебе предложил функцию DOS, которую правильнее использовать для целей выхода по нажатию клавиши. Выбранная тобой функция BIOS имеет другие цели. Ну да ладно. Не это главное. Главное то, что для выхода при нажатии надо же ведь проверять результат!!! Для твоей функции надо проверять содержимое ah:
И напоследок 2 примечания. 1) При выходе в DOS лучше перевести видеорежим в текстовый:
2)У тебя не прорисует толстую линию, так как при каждом внешнем цикле bx получает значение 16020. Его надо вынести за пределы внешнего цикла. |
||||||||||||||
|
|||||||||||||||
| jaAlex |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
Вот такая буковка "К" у меня получилась. По - моему, нормально. И вот у меня такой еще вопрос появился. Вот линия:
А как сделать ее такой, чтобы ее угол наклона был меньше, т.е. вот чтобы каждая следующяя линия сдвигалась налево не на 1 пиксель, а, скажем, на 0.5? |
||||
|
|||||
| anwe |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Нормально.
|
||||
|
|||||
| jaAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
А как можно повысить разрешение? И еще: как задать пропорцию? Я еще до этого думал, что пропорция какая - то должна быть, посчитал так, чтоб линию из угла экрана в угол наискосок пропорция 5/8 выходит. Но где ее задать - незнаю. И как задать тоже незнаю. Если не составит труда, подскажи пожалуйста. |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Установи SVGA режим. Здесь техника такая.
Так как одного сегмента DOS для всего изображения в SVGA режиме недостаточно, необходимо перемещать окна (так называемые банки) видео памяти. Делает это функция BIOS $4F. Вобщем давай так. Вот тебе пример, где прорисована линия на экране с разрешением 640х480. Выход из программы - по нажатию клавиши. Попробуй сам разобраться, у меня сейчас нет времени. Если что - позже. Вот код:
|
|||
|
||||
| jaAlex |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
Вроде разобрался. Но вот это у меня TP никак воспринимать нехочет, ругается сильно:
Я что только уж не делал, никак не хочет. Как тут вот поступить надо? В коде вроде бы разобрался, но получается разрешение, по - моему, не 640х480, а 640х400, ведь разрешение стандартного графического режима 320х200, а мы его увеличиваем с угла. Вот с разрешением еще пока не разобрался. |
||||
|
|||||
| anwe |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Переменную надо объявлять так:
Не, здесь тупое умножение на коэффициент не правильно. А как же быть, по-твоему, с другими разрешениями, к примеру 800х600? |
||||
|
|||||
| jaAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 31.5.2006 Где: Краснодар Репутация: нет Всего: нет |
Тут сразу уйма вопросов возникла по поводу этого графического режима. Но не буду тебя грузить, и так достал уже наверно...
Но все же, ответь пожалуйста еще на парочку вопросов. Вот наклонная линия:
Но почему - то она как зебра. Точнее даже я примерно предполагаю почему она такая, но сделать ее не в полосочку никак не получается. Помоги пожалуйста исправить мои ошибки и нарисовать ее нормально, не в полосочку. Заранее большое спасибо. P.S. Угол наклона именно такой вот должен быть, это я буковку "А" нарисовать пытаюсь. Это сообщение отредактировал(а) jaAlex - 22.10.2006, 23:47 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |