Вот вопрос:
10 FLASH 1:PAPER 3:1NK 7:BRIGHT 0
20 PRINT AT 10,12;" "
30 PRINT ATTR (10,12)
ответ:159
подскажите а как наоборот,у меня есть цифра 159,как узнать что
FLASH= 1:PAPER =3:1NK =7
Вот вопрос:
10 FLASH 1:PAPER 3:1NK 7:BRIGHT 0
20 PRINT AT 10,12;" "
30 PRINT ATTR (10,12)
ответ:159
подскажите а как наоборот,у меня есть цифра 159,как узнать что
FLASH= 1:PAPER =3:1NK =7
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
разделить число на 8 - остаток = INK, еще на 8 - остаток = Paper, остальное если не 0, то либо Flash=1, либо Bright=1, по обстоятельствам
На бейсике это очень очень медленно наверно будет.
Скажите ведь эта 159 где то хранится,т.е. и если я в эту ячейку занесу другую цифру (другой цвет)
5 poke YYYY,159
10 print at 11,12;"X"
то должно напечатать "Х" определённого цвета (ink paper).
и мне не надо будет указывать ink и paper в бейсике.
Можно так ?
poke 23693, n
А можно и по-другому!
Заранее заготовить четыре таблички по 256 байт.
В первой -- какой Ink будет с этим Attr, во второй -- Paper, третьей -- Bright, четвертой -- Flash.
Взять четыре переменные, обозвать их ink, paper, flash и bright.
Сделать LET ink=<адрес первой таблички> и т. д.
И теперь PEEK (ink+A) как раз будет цветом чернил!
Сферический ламер в вакууме
Это будет повеселей моих табличек.
---------- Post added at 19:15 ---------- Previous post was at 19:14 ----------
Но стоп! Разве в Zx Basic-е по-нормальному выполняются логические команды?
Сферический ламер в вакууме
Если нет, то типа такого.
let p=аттрибут
let ink=p - (128*(p>128))
let ink=ink - (64*(ink>64))
let ink=ink - (32*(ink>32))
let ink=ink - (16*(ink>16))
let ink=ink - (8*(ink>8))
let paper=INT(p/8)
let paper=paper - (128*(paper>128))
let paper=paper - (64*(paper>64))
let bright=INT(p/64)
letbright=bright - (128*(bright>128))
let flash=INT(p/128)
Но конечно это медленный способ, массив быстрей будет, а самое быстрое - таблички.
Можно и асм-подпрограммку замутить подключив её к DEF FN.
Вот как тут описано: http://zxpress.ru/book_articles.php?id=1539
Последний раз редактировалось Destr; 23.09.2011 в 21:15.
Я попробовал.
Получилась функция, расположенная в первой строке.
1 DEF FN a(x,y,p)=USR VAL "23910": REM здесь маш. код
x и y - координаты на экране;
p - параметр, указывающий возвращаемый элемент цвета:
p=7 - ink;
p=56 - paper;
p=64 - bright;
p=128 - flash.
Не советую вводить другие параметры p, проверки корректности нет и может зависнуть!
Для работы нужно, чтобы PROG=23867, иначе необходимо пересчитать значение в кавычках PROG+43
В прикрепленном имедже есть файл primer.B, показывающий работу функции.
З.Ы. Есть небольшая проблема. После первой строки нарушается вывод листинга на экран (его не видно). Введение в следующей строке управляющих кодов цвета, проблему не решило. Может кто знает, как это исправить?
Вложение удалено мной. Причина - устранение проблем с выводом листинга.
Исправленная функция в моем сообщении ниже.
Последний раз редактировалось AndTorp; 26.09.2011 в 01:00.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)