Построение и управление квадратиками |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Построение и управление квадратиками |
18192123 |
15.04.2008 17:15
Сообщение
#1
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Имеется набор из 9-ти квадратиков. Выбор активного из них осуществляется нажатием соответствующей цифровой клавиши. Активный квадратик можно передвигать по полю, используя курсорные клавиши, а по нажатию "пробела" - менять его цвет. Написать программу построение различных фигур, испльзуя такой принцип управления.
Пока останавилась на построении набора квадратиков..Вот что получилось:
Хотела получить рядом расположенные квадратики..но как я предполагаю содержимое регистра СХ сбивается.. Как исправить - не пойму.. Сообщение отредактировано: 18192123 - 15.04.2008 17:19 Эскизы прикрепленных изображений |
xds |
16.04.2008 20:03
Сообщение
#2
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
У тебя в начале программы не инициализируется DS и i хранится черт знает где (в PSP). Добавь его инициализацию:
begin: Сообщение отредактировано: xds - 16.04.2008 20:04 -------------------- The idiots are winning.
|
18192123 |
17.04.2008 18:54
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Добавила перерисовку квадратов по нажатию соответствующей цифровой клавиши (пока только 1-го и 2-го из них) - т.е так мы активируем квадрат для последующего управления. Но не получается стирать ранее нарисованные - не могу "поймать" ту же позицию, чтоб перерисовать чёрным цветом..Та же проблема и с изменением цвета ранее нарисованного квадрата (переход на метку color)..
И самое непонятное - не могу организовать управление квадратами, чтоб получить фигурки..не пойму ,как это сделать наиболее рационально...Подкиньте пожалуста идеи..Объясните, как поступить..
|
xds |
19.04.2008 16:05
Сообщение
#4
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Я бы использовал видеорежим с линейным буфером и вывод прямой записью в видеопамять. Тогда стирание старого изображения квадрата можно реализовать с помощью операции "исключающее ИЛИ", что упростит вывод нескольких квадратов с их перемещением. Примерно вот так:
BOX_SIZE equ 20 ;длина стороны квадрата Сообщение отредактировано: xds - 19.04.2008 16:10 -------------------- The idiots are winning.
|
18192123 |
20.04.2008 16:01
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Я бы использовал видеорежим с линейным буфером и вывод прямой записью в видеопамять. Тогда стирание старого изображения квадрата можно реализовать с помощью операции "исключающее ИЛИ", что упростит вывод нескольких квадратов с их перемещением. Спасибо большое..Так намного эффективнее.. У меня возникли ещё вопросы... А как сделать, чтоб можно двигать несколько квадратов: подвинули один..потом второй..и так сколько нужно..? Я попыталась - неудачно..
|
xds |
20.04.2008 19:21
Сообщение
#6
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Имеет смысл работать с квадратами, как со структурами (зачатки ООП). Текущий квадрат представляется в виде указателя на его структуру (в данном случае это регистр si):
BOX_SIZE equ 20 ;длина стороны квадрата -------------------- The idiots are winning.
|
18192123 |
20.04.2008 19:41
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
|
xds |
20.04.2008 20:40
Сообщение
#8
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Структур как таковых в ассемблере нет на самом деле. Запись
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 |
25.04.2008 20:06
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
И снова здраствуйте)
Я добавила переменные box3,..,box9. Осуществила их вывод. По нажатию соответствующей цифровой клавиши 1-й, 2-й или i-й квадрат должен свигаться со своей позиции и изменять положение...Вот только у меня всегда сдвигается 1-й квадрат..Объясните пожалуста, в чём дело?
|
18192123 |
9.05.2008 20:16
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
BOX_SIZE equ 20 ;длина стороны квадрата Объясните пожалуста, как на основании такого фрагмента осуществить изменение цвета активного квадратика по нажатию какой-нибудь клавиши? |
xds |
11.05.2008 18:22
Сообщение
#11
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Клавиши "+" и "-" меняют цвет выбранного квадрата:
BOX_SIZE equ 20 ;длина стороны квадрата -------------------- The idiots are winning.
|
zombie2478 |
21.05.2011 22:12
Сообщение
#12
|
Гость |
скажите а как этот код сделать рабочим для Pascal 7.1 со встроенным assembler?
|
Текстовая версия | 1.11.2024 2:41 |