![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Имеется набор из 9-ти квадратиков. Выбор активного из них осуществляется нажатием соответствующей цифровой клавиши. Активный квадратик можно передвигать по полю, используя курсорные клавиши, а по нажатию "пробела" - менять его цвет. Написать программу построение различных фигур, испльзуя такой принцип управления.
Пока останавилась на построении набора квадратиков..Вот что получилось:
Хотела получить рядом расположенные квадратики..но как я предполагаю содержимое регистра СХ сбивается.. Как исправить - не пойму.. Сообщение отредактировано: 18192123 - 15.04.2008 17:19 Эскизы прикрепленных изображений ![]() |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
У тебя в начале программы не инициализируется DS и i хранится черт знает где (в PSP). Добавь его инициализацию:
begin: Сообщение отредактировано: xds - 16.04.2008 20:04 -------------------- The idiots are winning.
|
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Добавила перерисовку квадратов по нажатию соответствующей цифровой клавиши (пока только 1-го и 2-го из них) - т.е так мы активируем квадрат для последующего управления. Но не получается стирать ранее нарисованные - не могу "поймать" ту же позицию, чтоб перерисовать чёрным цветом..Та же проблема и с изменением цвета ранее нарисованного квадрата (переход на метку color)..
И самое непонятное - не могу организовать управление квадратами, чтоб получить фигурки..не пойму ,как это сделать наиболее рационально...Подкиньте пожалуста идеи..Объясните, как поступить..
|
xds |
![]()
Сообщение
#4
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я бы использовал видеорежим с линейным буфером и вывод прямой записью в видеопамять. Тогда стирание старого изображения квадрата можно реализовать с помощью операции "исключающее ИЛИ", что упростит вывод нескольких квадратов с их перемещением. Примерно вот так:
BOX_SIZE equ 20 ;длина стороны квадрата Сообщение отредактировано: xds - 19.04.2008 16:10 -------------------- The idiots are winning.
|
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Я бы использовал видеорежим с линейным буфером и вывод прямой записью в видеопамять. Тогда стирание старого изображения квадрата можно реализовать с помощью операции "исключающее ИЛИ", что упростит вывод нескольких квадратов с их перемещением. Спасибо большое..Так намного эффективнее.. У меня возникли ещё вопросы... А как сделать, чтоб можно двигать несколько квадратов: подвинули один..потом второй..и так сколько нужно..? Я попыталась - неудачно..
|
xds |
![]()
Сообщение
#6
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Имеет смысл работать с квадратами, как со структурами (зачатки ООП). Текущий квадрат представляется в виде указателя на его структуру (в данном случае это регистр si):
BOX_SIZE equ 20 ;длина стороны квадрата -------------------- The idiots are winning.
|
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
xds |
![]()
Сообщение
#8
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Структур как таковых в ассемблере нет на самом деле. Запись
box strucэквивалентна x equ word ptr[0] а, mov al,[si].color - на самом деле это mov al,[si+4]. Т. е., si хранит адрес начала области памяти, в которой последовательно хранятся координата x (как word), координата y (как word) и цвет (как байт Вот эквивалентный вариант без конструкции struc: BOX_SIZE equ 20 ;длина стороны квадрата По другому мне прямо сейчас лень - там больше писанины и меньше разумности. -------------------- The idiots are winning.
|
18192123 |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
И снова здраствуйте)
Я добавила переменные box3,..,box9. Осуществила их вывод. По нажатию соответствующей цифровой клавиши 1-й, 2-й или i-й квадрат должен свигаться со своей позиции и изменять положение...Вот только у меня всегда сдвигается 1-й квадрат..Объясните пожалуста, в чём дело?
|
18192123 |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
BOX_SIZE equ 20 ;длина стороны квадрата Объясните пожалуста, как на основании такого фрагмента осуществить изменение цвета активного квадратика по нажатию какой-нибудь клавиши? |
xds |
![]()
Сообщение
#11
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Клавиши "+" и "-" меняют цвет выбранного квадрата:
BOX_SIZE equ 20 ;длина стороны квадрата -------------------- The idiots are winning.
|
zombie2478 |
![]()
Сообщение
#12
|
Гость ![]() |
скажите а как этот код сделать рабочим для Pascal 7.1 со встроенным assembler?
|
![]() ![]() |
![]() |
Текстовая версия | 26.05.2024 16:26 |