Работа с ZX-Spectrum 1993 г.

Глава 16 - цвета. PAPER, FLASH, BRIGHT, INVERSE, OVER, BORDER, ATTR.


ГЛАВА 16

ЦВЕТА

Краткое содержание: цхк, PAPER, FLASH, BRIGHT, INVERSE.
OVER, BORDER, ATTR.

Выполним следующую программу:

10 FOR m=0 TO I: BRIGHT 1
20 FOR n-1 TO 10
30 FOR c=4) TO 7

40 PAPER c: PRIN1.....: REM 4 coloured spaces

50 NEXT c: NEXT n: NEXT in

60 FOR m=0 TO 1: BRIGHT m: PAPER 7

70 FOR сЧ) TO 3 .

80 INK c: PRINT c;" "; REM 3 spaces

90 NEXT c: PAPER 0

100 FOR TO 7

110 INK c: PRINT c;" ": REM 3 spaces

120 NEXT c: NEXT m

130 PAPER 7: INK 0: BRIGHT 0

Она продемонстрирует Вам возможности вывода компьютером ZX
SPECTRUM на цветной телевизор восьми цветов (включая чёрный и белый) и .
двух уровней яркости. Если телевизор чёрно-белый. Вы увидите различные
градации серого цвета.

Ниже дана кодировка цветов:

• 0 - черный

• 1 - синий

• 2 - красный

• 3 - фиолетовый

• 4 - зеленый

• 5 - голубой

• 6 - жёлтый

• 7 - белый

Для чёрнотбелого телевизора этот ряд представляет собой последова-
тельность перехода серых полутонов от чёрного до белого.

Для использования цветов уясним строение графического экрана. Он
состоит из 768 позиций (24 строки по 32 знакоместа), каждая из которых
представляет из себя матрицу 8 на 8 пикселей. Вспомним

• 0 - белая точка

• 1 - черная точка

Позиция символа (знакоместа) также рассматривается с зтих позиций:
INK - цвет тона, PAPER - цвет фона. Т.о. знакоместо состоит из INK и PAPER
(рисунок на бумаге). Можно также говорить об INK и PAPER обычной и повы-
шенной яркости, а также мерцающих и немерцающих. Все это имеет следу-
ющую кодировку:

• 1) для знакоместа (8 на 8 пикселей) форму символа определяют
чистые и закрашенные точки (0 и 1), цвета фона и тона определяются
PAPER и INK.

• 2) цвета фона и тона кодируются от 0 до 7 каждый.

• 3) яркость: 0 - обычная; 1 - повышенная.

Заметим, что для одного знакоместа в 64 пикселя мы не моЖем уста-
новить более одного цвета для фона и одного цвета для тона.

Это же относится и к яркости, и к мерцанию. Цвет, яркость и мерцание
задаются для знакоместа (а не для отдельного пикселя) и являются его
атрибутами. Для измёнения этих атрибутов предназначены операторы: INK,
PAPER, BRIGHT, FLASH.

- Выполним:

PAPER 5

Теперь вывод будет осуществляться на голубой фон (т.к. 5 - код голубого
цвета).

Формат операторов:

PAPER число от 0 до 7
INK число от 0 до 7

BRIGHT 0 или 1 (0 - выкл. 1 - вкл.)
FLASH 0 или 1 (0 - выкл, I - вкл.)

Отметим, что использование чисел больших, чем указывалось выше, до-
пустимо, но дает другой эффект. К примеру, "8" может использоваться во
всех четырех операторах как средство, позволяющее использовать значение
ранее установленных атрибутов. Так,
PAPER 8

не изменит цвета фона (т.к. такого цвета нет), а поможет выяснить для
себя значение предыдущего PAPER. Операторы: INK 8, BRIGHT 8. FLASH 8
используют значения этих атрибутов.

"9" может использоваться только для INK и PAPER, как средство "контр-
аста". Цвета INK и PAPER которые Вы используете, должны быть контрастны
;руг другу, так, к белому цвету подходят темные тона: чёрный, синий, крас-
ой, фиолетовый: к чёрному цвету подходят светлые тона: зеленый, голубой,
кёлтый, белый.
Выполним:

INK 9: FOR с=0 ТО 7: PAPER с: PRINT с: NEXT с
Можно запустить программу, выдающую на экран дисплея цветные пол-
исы:

INK 9: PAPER 8: PRINT AT 0,0;: FOR n=l TO 1000:
PRINT n;: NEXT n
Цвет фона будет контрастен цвету тона в каждой выводимой позиции.
Цветной телевизор построен на способности человеческого глаза
воспринимать только три первичных цвета - синий, красный и зелёный.
Другие цвета образуются из их сочетаний К примеру, фиолетовый цвет
образуется как комбинация синего с красным (код фиолетового цвета 3. он
является суммой кодов синего 1 и красного 2).

Видеть все восемь цветов на одном участке экрана невозможно, т.к. это
будет тёмное пятно. Но там, где цвета частично накладываются друг на друга,
мы увидим цветовую гамму. В качестве примера выполним программу
(отметим, что INK получена с использованием SHIFT и "8м в [Gj-режиме):
10 BORDER 0: PAPER 0: INK 7: CLS :
20 FOR a-1 TO 6
30 PRINT TAB 6; INK

1;"U [][][][][][][] [1П [}[][][][][][][!":

REM 18 ink squares
40 NEXT a
50 LET dataline=200
60 GO SUB 1000
70 LET dataline-210
80 GO SUB 1000
90 STOP

200 DATA 2,3,7,5,4
210 DATA 2,2,6,4,4
1000 FOR ael TO 6
1010 RESTORE dataline
1020 FOR b=l TO 5

1030 READ c: PRINT INK c;" [] [][][] [] []": REM 6 ink square
1040 NEXT b: PRINT : NEXT a
1050 RETURN

Существует функция ATTR, позволяющая определить, какие атрибуты
были заданы для позиции экрана. Это сложная фунция, и она будет рассмот-
рена в конце главы.

Операторы: INVERSE и OVER не управляют атрибутами, но тем не ме-
нее определяют способ вывода на экран. В этих операторах используются
значения параметров 0 и 1.

Если Вы дадите: INVERSE 1, то выводимый символ изменит свою обыч-
ную форму (вывод будет осуществляться7- в негативном изображении). В

обычном виде мы пишем чёрным по белому, в инверсном - белым по чёрно-
му

Оператор OVER 1 устанавливает режим расширенного вывода. В обыч-
ном режиме при выводе символа на знакоместо, там стирается всё выведен-
ное ранее. При расширенном выводе можно накладывать символы друг на
друга. Это позволяет выводить составные символы, например, стилизован-
ные шрифты.

Программа для вывода готического шрифта:
10 OVER 1
20 FOR n=l ТО 32

30 PRINT "О"; CHR$ 8;........;

40 NEXT n

Отметим, что управляющий символ CHRS 8 возвращает на одну
позицию.

Возможен ещё один способ использования INK и PAPER. Их можно
вводить как параметры PRINT. Точно так же можно использовать и другие
операторы, рассмотренные в этой главе, отметим при этом, что их действие
распространяется только до конца PRINT.
В примере:

PRINT PAPER 6;"Х";: PRINT "Y"
только "X" будет выведен на жёлтый фон.

INK и другие операторы не действуют в нижней части экрана, предназ-
наченной для ввода команд и INPUT-данных. Для изменения цветов в этой
части экрана служит оператор:
BORDERп
где п - код цвета от 0 до 7.

Возможны мерцание .и повышенная яркость, для этого используйте со-
ответствующие параметры в INPUT (наподобие PRINT). Эти параметры дей-
ствуют до конца оператора или до тех пор, пока запрашиваемые данные не
будут введены.
Выполним:

INPUT FLASH 1; INK 1 ;"What is your number ?";n
Возможно изменение цветов и с помощью управляющих символов,
подобных управляющим символам для AT и TAB в главе 15.
CHR$ 16 соответствует INK
CHR$ 17 соответствует PAPER
CHR$ 18 соответствует FLASH
CHR$ 19 соответствует BRIGHT
CHR$ 20 соответствует INVERSE
CHR$ 21 соответствует OVER

Так:

PRINT CHR$ 16+CHR$9
то же, что и

PRINT INK 9

Можно пользоваться либо управляющими символами, либо операто-
рами. Их можно ставить как после номера строки, так и в конце строки. Для
удобства можно пользоваться в расширенном режиме [Е] цифрами. Цифры
от "О" до "7" устанавливают цвет INK, если CAPS SHIFT нажата, и цвет
PAPER, если не нажата. Если нажать цифру в [Ej-режиме, то будут введены
CHRS 17 и CHRS "код цвета". Если в это время была нажата САРъ SHIFT, то
будут введены CHRS 16 и CHRS "код цвета".

Если Вы захотите уничтожить вводимое, то нажмите DELETE два раза.
После первого раза на экране высветится знак вопроса, или что-нибудь ещё,

не пугайтесь и нажмите DELETE ещё раз. Управление курсором тоже не
работает обычным образом до тех пор пока курсор не выйдет к предыдущему
символу.

Действия в расширенном режиме [Е]:

• 8 даёт CHRS 19 и CHRS 0 - нормальная яркость

• 9 даёт CHRS 19 и CHRS 1 - повышенная яркость

• CAPS SHIFT 8 даёт CHRS 18 и CHRS 0 - не мерцающее

• CAPS SHIFT 9 даёт CHRS 18 и CHRS 1 - мерцающее

в [Lj-режиме:

• CAPS SHIFT 3 даёт CHRS 20 и CHRS 0 - обычный ввод

• CAPS SHIFT 4 даёт CHRS 20 и CHRS 1 - негативный ввод
(инверсный)

[К], [L], [С]

[0]

IE]

НЕТ

SYMBOL

CAPS

НЕТ

г

ЛЮБОЙ ! НЕТ

CAPS

SYMBOL

1

EDIT

****
****

**** j
****
********

ФОН
ГОЛУБОЙ

ТОН
ГОЛУБОЙ

DEF FN

2

CAPS
LOCK

****
****

****
****
********
********

ФОН
КРАСНЫЙ

ТОН
КРАСНЫЙ

FN

3

#

TRUE
VIDEO

********
********

ФОН
ФИОЛЕТО
ВЫЙ

.ТОН
ФИОЛЕТО
ВЫЙ

LINE
OPEN

4

$

INVERS
VIDEO

****
****

********
********
****
****

ФОН
ЗЕЛЁНЫЙ

ТОН
ЗЕЛЁНЫЙ

5

%

КУРСОР
ВЛЕВО

****
****
****
****

****
****
****
****

ФОН
СИНИЙ

ТОН
СИНИЙ

CLOSE

6

@

КУРСОР
ВНИЗ

****
****

****
****

****
****

****
****

ФОН
ЖЁЛТЫЙ

ТОН
ЖЁЛТЫЙ

MOVE
PAGE

7

'

КУРСОР
ВВЕРХ

****
****

**** .
****

ФОН
БЕЛЫЙ

ТОН
БЕЛЫЙ

ERASE

8

(

КУРСОР
ВПРАВО

********

НОРМАЛ.
ЯРКОСТЬ

НОРМАЛ.
МЕРЦАН.

POINT

9

)

ГРАФИЧ.
РЕЖИМ

ГРАФИЧ.
ВЫХОД

ГРАФИЧ.
ВЫХОД

ПОВЫШ.
ЯРКОСТЬ

С

МЕРЦАН.

CAT

10

-

DELETE

DELETE

DELETE

ФОН
ЧЁРНЫЙ

ТОН
ЧЁРНЫЙ

FORMAT

Функция ATTR имеет следующий формат:

ATTR ("строка","столбец").
Значение двух параметров функции подобно значению параметров в
AT, в результате выполнения будут выведены значения атрибутов для соот-
ветствующей позиции экрана. Выводимый результат - это число, представля-
ющее сумму четырех чисел:

• 1) 128 - если знакоместо мерцающее, 0 - если обычное

• 2) 64 - если повышенная яркость, 0 - если обычная

• 3) 8 * код цвета фона

• 4) код цвета тона

7 bit

6 bit

5 bit

4 bit

3 bit

2 bit

1 bit

Obit

FLASH

BRIGHT

PAPER

INK

ATTR = 128*FLASH + 64*BRIGHT + 8*PAPER + INK

FLASH -0, 1

BRIGHT »0, 1

PAPER e 0 ... 7

INK -0... 7

INK

PAPER

N bit 76

black

blue

red

magent

green

cyan

yellow

white

0

1

2

3

4

5

6

7

00

black

64

65

66

67

68

69

70

71

01

128

129

130

131

132

133

134

135

10

192

193

194

195

196

197

198

199

11

8

9

10

11

12

13

14

15

00

blue

72

73

74

75

76

77

78

79

01

136

137

138

139

140

141

142

143

10

200

201

202

203

204

205

206

207

11

16

17

18

19

20

21

22

23

00

red

80

81

82

83

84

85

86

87

01

144

145

146

147

148

149

150

151

10

208

209

210

211

212

213

214

215

11

24

25

26

27

28

29

30

31

00

magent

88

89

90

91

92

93

94

95

01

152

153

154

155

156

157

158

159

10

216

217

218

219

220

221

222

223

11

32

33

34

35

36

37

38

39

00

green

96

97

98

99

100

101

102

103

01

160

161

162

163

164

165

166

167

10

224

225

226

227

228

229

300

231

11

40

41

42

43

44

45

46

47

00'

cyan

104

105

106

107

108

109

110

111

01

168

169

170

171

172

173

174

175

10

232'

233

234

235

236

237

238

239

11

48

49

50

51

52

53

54

55

00

yellow

112

113

114

115

116

117

118

119

01

176

177

178

179

180

181

182

183

10

240

241

242

243

244

245

246

247

11

56

57

58

59

60

61

62

63

00

white

120

121

122

123

124

125

126

127

01

184

185

186

187

188

189

190

191

10

248

249

250

251

252

253

254

255

11

Пример: знакоместо мерцающее, обычной яркости, жёлтый фон, синий

тон

128 + 0+ (8 * 6) + 1 - 177

Проверим это, выполнив:

PRINT AT 0,0; FLASH 1; PAPER 6; INK 1;" ";ATTR (0,0)

УПРАЖНЕНИЯ

1) PRINT "B"; CHR$ 8; OVER 1;"/";

Здесь "/" перечеркнет "В". Этим способом можно выводить слова из
комбинированных знаков на ZX SPECTRUM: два фона или два тона дают
фон, один из них дает тон. Это интересное свойство, если Вы повторите вы-
вод одного символа дважды, то он не будет отображен.

Так, если дать:

PRINT CHR$ 8; OVER 1;"/"

дополнительно к описанному выше утверждению, то мы в результате
увидим "В" не перечеркнутое "/". Так ли это?

2) выполним:

PAPER 0: INK 0

Действуют ли эти операторы в нижней части экрана?

Что мы увидим, если добавить
BORDER 0?

3) выполним программу:

10 POKE 22527+RND*704,RND*127
20 GO ТО 10

Результатом программы явится смена цветов знакомест, распределен-
ных по экрану случайным образом. Возможно, Вы увидите смену цветов на
диагональных ступенях. Это является следствием того, что мы пользуемся
квазислучайным распределением, которое лишь приближённо восп-
роизводит случайное распределение.

4) введем вручную или с помощью оператора LOAD программу для вво-
да шахматных фигур из главы 14 и введём программу разбивки экрана под
шахматную доску:

5 REM Draw blankboard

10 LET bb-1: LET bw»2: REM red and blue for board
15 PAPER bw: INK bb: CLS
20 PLOT 79,128: REM border
30 DRAW 65,0: DRAW 0,-65
40 DRAW -65,0: DRAW 0,65

50 PAPER bb
60 REM board

70 FOR n=0 TO 3: FOR m=0 TO 3
80 PRINT AT 6+2*n,l l+2*m;" "
90 PRINT AT 7+2*n,10+2*m;" "
100 NEXT m: NEXT n
110 PAPER 8

120 LET pw=6: LET pb»5: REM colours of white and black pieces

200 DIM b$(8,8): REM positions of pieces

205 REM set up initial position

210 LET b$ (1 )ss"RNBQKBNR": REM little line 240

220 LET b$(2)="PPPPPPPP": REM little line 230

230 LET b$(7)="PPPPPPPP": REM big line 220

240 LET b$(8)="RNBQKBNR": REM big line 210

300 REM display board

310 FOR n=l TO 8: FOR т=1 TO 8

320 LET bcCODE b$(n,m): INK pw

325 IF bc-CODE " " THEN GO TO 350: REM space

330 IF bc>CODE "Z" THEN INK pb: LET bc=bc-32: REM lower

case for black

340 LET bc=bc+79: REM convert to graphics
350 PRINT AT 5+n,9+m; CHR$ be
360 NEXT m: NEXT n
400 PAPER 7: INK 0




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Оттягущечки - "Boзле детсада стрoйка была, в чернoм кoтле закипала смoла"...
Люди - история Первоуральской группы Studio Stall.
Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.
Юмор - Оcлик Иа-Иа.
Code - 3D движок для Elite

В этот день...   21 ноября