Абзац
:: Поиск
:: ПоддерЖка ПрОекта
Webmoney:
  • Z610389805629
  • R427996570517
  • E023541002978
  • :: №23 (24.02.2005) ПрОсмотрОв: 4537

    Автор: Яков Очаковский.

    Рубрика: Читатель читателю.

    Номер: №23 (24.02.2005).



    23 цвета на ZX Spectrum

    Хочу поделиться с вами опытом, как получить на Спектруме не 16 стандартных цветов, а 23! Нет, здесь речь пойдет не о какой-либо аппаратной доработке, а о программном способе, причем не зависимо от конфигурации компьютера - будь то простейший 48-й Спектрум, либо самый современный - 1024-й.

    http://abzac.retropc.ru/images/i23_23color.gif

    На чем же основывается данный метод? Человеческий глаз имеет одну интересную особенность - воспринимать предмет, быстро меняющий свой цвет, как предмет одного цвета. Эту особенность мы и используем. Для демонстрации приведу текст небольшой программки на Бейсике (чтобы было понятно всем). На экран мы будем выводить не какие-либо конкретные объекты, а окрашенные в новые цвета знакоместа. «Смешиваться» будут соседние цвета, то есть, знакоместо будет быстро менять свой цвет с текущего на следующий, затем снова на текущий и так далее. Однако если мерцать (в смысле быстро менять цвет) будет знакоместо, то это будет слишком заметно, поэтому мы создадим в области памяти UDG новый символ - «шахматное поле» - и закрепим его за буквой «А». При мерцании такого символа, чередование цветов станет незаметным, так как мерцание отдельных пикселей не будет восприниматься глазом.

    Листинг программы:

    5      INK 5: BORDER 0: PAPER 0
    10     REM - UDG. -
    20     FOR f=0 TO 7: READ a: POKE USR «A» + f,a: NEXT f
    30     DATA 170,85,170,85,170,85,170,85
    60     REM - LETTERS -
    70     FOR f=65 TO 88
    80     PRINT AT 9,f-60; CHR$ f
    90     NEXT f
    100    REM - STANDART COLOR -
    110    FOR g=0 TO 1
    120    FOR f=0 TO 21 STEP 3
    130    PRINT AT 10,f+5+g*2; BRIGH g; INK f/3; «  »
    140    NEXT f
    150    NEXT g
    160    PAUSE 0
    170    REM - NEW COLOR -
    180    FOR f=0 TO 21 STEP 3
    190    PRINT AT 10,f+6; PAPER (f/3)+1; INK f/3; «A»
    200    PRINT AT 10,f+6; PAPER f/3; INK (f/3)+1;«A»
    210    NEXT f
    220    GOTO 180

    Teперь немного о работе программы. Вся программа разбита на фрагменты, выделенные оператором REM. Фрагмент «LETTERS» выводит по порядку в строчку 23 буквы латинского алфавита, под которыми печатаются знакоместа всех возможных цветов. Это сделано для того, чтобы отличать друг от друга соседние знакоместа (не знаю, как на цветном, но на черно-белом мониторе, не приглядываясь, это сделать сложно).

    Фрагмент «STANDART COLOR» выводит на экран знакоместа стандартных шестнадцати цветов. Оператор PAUSE 0 в строке 160 используется чтобы «отделить» вывод стандартных цветов от вывода новых и показать, где будут печататься соответствующие знакоместа.

    Вот и весь метод. На своем черно-белом мониторе я увидел строку знакомест, плавно меняющую свой цвет с черного на белый, то есть 23 градации яркости серого. Следует добавить, что «смешивать» можно не только «соседние» цвета, но и любые другие (включая и градации яркости).

    Для того, чтобы окрасить в новый цвет какой-либо объект, например, спрайт, необходимо сделать его тоже «шахматным», то есть необходимо создать для него два набора UDG-символов, в которых закрашенные в шахматном порядке точки инверсионны относительно друг друга, а затем выводить их по очереди, в одном и том же месте, окрашивая смешиваемыми цветами.

    Как сделать спрайт «шахматным»? Возьмем, например, спрайт, который условно назовем «колобок» (рис. 1). Если на него наложить «шахматное поле» (рис. 4), то получится первый «шахматный спрайт». Для этого необходимо выделить те точки, которые поставлены и в «колобке» и в «шахматном поле» в одном и том же месте (рис. 2). Аналогично и для другого «шахматного» спрайта, на который необходимо накладывать другое «шахматное поле» (рис. 3 и рис. 5).

    Удачного смешивания!


    P.S. На нашей платформе столько игр и программ, и у каждой есть свои секреты и изюминки. Считаю, что разных тем для статей и дискуссий на страницах «Абзаца» несчетное количество, поэтому пишите письма! И вообще, чтобы не говорили об «Абзаце» плохого, эта газета просто замечательная. И то, что ее покупают, лучшее тому доказательство. Например, для меня - это единственный источник информации о Спектруме, так как я пользователь «кассетного»(!) ZX Spectrum 48 и не могу параллельно «Абзацу» покупать электронные издания на дискетах, а «кассетных» нет.

    © 2004-2013 Perspective group