Прикладная графика 1992 г.

Приложение 2 - простейший генератор шаблонов.


ПРИЛОЖЕНИЕ 2
простейший генератор шаблонов.

Спраитами называют графические объекты, которые ногут
воспроизводиться на экране и перемешаться по нему, не изменяя
изображения, которое там первоначально было, поскольку манипу-
ляции со спраитами служат для обеспечения мультипликации, то
изучение их не входит в рамки данной книги, а явится темой оче-
редного тона - "Динамическая графика". В то же время, если от
вопросов перемещения спрайтов по экрану пока отвлечься, то про-
грамму для их редактирования можно использовать и для создания
статических шаблонов.

Здесь рассматривается программа для создания шаблонов изо-
бражении размером £4Х£1 пиксел. Такой размер достаточно удобен
по целому ряду соображений. с одной стороны, это достаточно
большой размер, позволяющий реализовать художественные способ-
ности при создании образов, с другой стороны, он не настолько
велик, чтобы скорость операции печати шаблона стала заметно
критичной для программиста, в принципе, размер шаблонов 24X24
может быть был бы чуть более удобней при программировании, но
зато при размере 24X21 мы можем так организовать генератор,
чтобы на экране каждый пиксел будущего спрайта изображался од-
ним знакоместом.

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

Программа состоит из двух частей. Первая часть - это го-
ловной управляющий блок, написанныи на БЕИСИКе. он приведен в
Листинге.1. Вторая часть - исполнительные процедуры в машинных
кодах, они выполняют такие операции, как инвертирование изобра-
жения. реверсирование изображения, переброску картинки из рабо-
чего буфера в отведенную для спрайтов область памяти, вызов их
оттуда в буфер на редактирование и т. п. Блок машинных кодов
приведен в листинге.2 вместе с загрузчикон.

Сначала наберите машиннокодовыи блок (/1истинг_г). Запусти-
те загрузчик командой RUN. Если все набрано правильно, вы полу-
чите сообщение STOP. Если же где-то Вы сделали ошибку, то полу-
чите сообщение "??". Не сошлась контрольная сумма - следует еше
раз внимательно проверить строки DATA. После того, как все
будет закончено. Вы можете сохранить олок на ленте командой

SAVE "sprcode" CODE 54200,350.

Теперь можете приступать к набору БЕИСИКа (Листинг_1). он
запускается командой RUN.

В этом редакторе вы можете одновременно создавать (редак-
тировать) и хранить до to спрайтов одновременно (обозначаются
буквами от "а" до "j">. Когда с одним из них Вы работаете, он
находится в рабочем буфере. По окончании работы с ним он
копируется в область таблицы спрайтов - это делает команда
RANDOMIZE USR 54317. Противоположное действие по вызову нужного
спрайта из таблицы в буфер на редактирование исполняет команда
RANDOMIZE USR 54353. Изображение на экране того, что находится
в буфере, исполняет команда RANDOMIZE USR 54200.

кроме- простого рисования спрайтов. вы можете в этой про-
грамме инвертировать изображение и реверсировать его. инверти-
рование выполняется по нажатию клавиш CAPS SHIFT "I" - при этом
изображение вместо "черным по белому" становится "белым по чер-
ному". реверсировать (переворачивать) изображение можно по
горизонтали (CAPS SHIFT "R") или по вертикали (CAPS SHIFT "U").
вернуться в исходное меню можно нажатием CAPS SHIFT "Z".

Перемещение курсора по полю выполняется курсорными клави-
шами 5, б. 7. в. При этом не происходит рисования. Перемещение
курсора с рисованием исполняет^- этими же клавишами при нажатой
клавише SYMBOL SHIFT.

Редактор удобен еше и тем. что рядом с увеличенным изобра-
жением спрайта выстраивается и его изображение в натуральную
величину.

спраиты хранятся в таблице, начинающейся с адреса 54600.
Поскольку каждый спрайт состоит из 504 124 X 21) эленеитов. то
для него необходимы 63 (63 х в = 504) байта. Таким образом, вся
таблица десяти спрайтов занимает область памяти размером 630
байтов. v

листинг. 1

Генератор (редактор) спрайтов.

10 LOAD "sprcode" CODE 54200.350
100 LET a=22529: LET J=0: LET S=a: LET p=S
110 GO SUB 1200
120 GO TO 560
130 POKE P. 233
140 LET h*=INKEY*
150 RANDOHIZE USR 54200
160 PAUSE 1. 5

170 LET P=s: LET J = PEEK P

160 IF h*="I" THEN RANDOHIZE USR 54422:

RANDOHIZE USR 54200
190 IF THEN RANDOHIZE USR 54436:

RANDOHIZE USR 54200
200 IF h*="U" THEN RANDOMIZE 54462'

RANDOMIZE USR 54200
210 IF hS^Z" THEN GO TO 460
220 IF h*<"4" OR h*>-6" THEN GO TO 240
230 GO TO 370

240 IF h*<"Z" OR h«>"(" THEN GO TO 140
, 250 IF THEN LET S=S-1

260 IF THEN LET S=S+32

270 IF THEN LET S=S-32

260 IF h*="(" THEN LET s=s+l
290 GO SUB 1160

300 IF w=0 THEN LET s=s*l: GO TO 140

310 IF w>24 THEN'LET s = s-l: GO TO 140

320 IF S<a THEN 1ET S"-S+32: GO TO 140

330 IF S>a-l*21«32 THEN LET s=S-32: GO TO 140

340 POKE P. 0

350 POKE S, 130

360 GO ТО 140

370 IF h«="5" THEN LET s=s-l
360 IF h*="6" THEN LET s=s+32
390 IF h*-"7" THEN LET s=s-32
400 IF h*-"6" THEN LET s-s*l
410 GO SUB 1160

420 IF W=0 THEN LET S=SM: GO TO 140

430 IF w>24 THEN LET S=S-1: GO TO 140

440 IF s<a THEN LET S=S+32

450 IF s>a-l*21«32 THEN LET S=S-32

460 POKE P, 56

470 POKE S,135: GO TO 140

460 PRINT AT 1.26: "SAVE "

490 PRINT AT 3,26; "a-J"

500 LET INKEY*

510 IF h«<"a" OR a$>"J" THEN GO TO 500
520 LET v=CODE hS-96: POKE 23300. V
530 RANDOHIZE USR 54317
540 BEEP . 4. 20
550 GO SUB 1000
560 PRINT AT 1.26; "E a-J"
570 PRINT AT 3.26, "1 SAVE"
560 PRINT AT 5,26; "2 LOAD"
590 LET h$=INKEY»
600 IF h*="l" THEN GO TO 1100
610 IF M-'Z" THEN GO TO 1130
620 IF h*<"a" OR h$>"J" THEN GO TO 590
630 LET V=CODE h»-96: POKE 23300.V
640 GO SUB 1000
650 RANDOMIZE USR 54353
660 PRINT AT 7.26; h$; " ";v;" "
670 BEEP . 4. 30
660 GO TO 130
1000 PRINT AT 1.26;"
1010 PRINT AT 3, 26; "
1020 PRINT AT 5.26;"
1030 RETURN

1100 INPUT "SAVE "; Tit: IF n* = "" THEN GO TO 1100

И 10 SAVE П» CODE 54600.699
1120 GO TO 40

1130 INPUT "LOAD ";П»: LOAD П* CODE: CLS
1140 GO TO 40

1150 STOP

1160 LET f=INT (S/32) LET w-S-f»32

1170 RETURN

1200 FOR K=8 TO 200 STEP 6

1210 PLOT K,6: DRAW 0.167
1220 NEXT К

1230 FOR K = 6 TO 175 STEP 6

1240 PLOT 6. K: DRAW 192,0

1250 NEXT К

1260 PLOT 8.175: DRAW 192,0

1270 RETURN

Листинг_2

Блок рабочих процедур.

2000 LET b=54200: LET Z = 0: LET r=350: RESTORE 3000
£010 FOR K=0 Tp Г-1 READ a
2020 POKE tb+K). a: LET Z=Z+a
2030 NEXT К

£040 LET Z= INT ((<Z/r)-INT (Z/D)«r)
£050 READ a: IF a<>z THEN PRINT "??": STOP

3000 DATA 33. 250. 212. 17. 1

3001 DATA 68. 14. 3. £13. 237

3002 DATA 83. £46. £12, 6. 21

3003 DATA 237. 91. 246, 212. 197

3004 DATA 6, 6, 26, 254. 0

3005 DATA 40. 4. 254. 130. 32

3006 DATA 6, 55. 203. 22, 195

3007 DATA 224. 211. 167. 203. 22

3008 DATA 19. 16, 235. 229. 42

3009 DATA 246. 212. 1. 32. 0

3010 DATA 9. 34. 246. 212. 225

ЗОИ DATA 193. 35. 16, 212. 209

3012 DATA 62, 6. 131, 95, 13

3013 DATA 32. 197. 33, 250, 212

3014 DATA 17, 123, 72, 6. 3

3015 DATA 213. 197, 14, 3. 6

3016 DATA 6. 213. 126, 16. 20

3017 DATA 35, 16, 250. 209. 62
3016 DATA 32. 131. 95, 121. 61

3019 DATA 254. 1. 32. 5. 6

3020 DATA 5. 79. 24. 233. 6

3021 DATA 6. 79, 254, 0. 32

3022 DATA 226. 193. 209. 19. 16

3023 DATA 215. 201. 205. 64. 212

3024 DATA 34. 248, 212. 237, 91

3025 DATA 248. 212. 33. 250. 212

3026 DATA 1. 63. 0. 237. 176

3027 DATA 201, 58. 4, 91. 71

3028 DATA 33. 72. 213, 17. 63

3029 DATA 0, 167, 237, 82. 25

3030 DATA 16. 253. 201. 205. 64

3031 DATA 212. 34. 248. 212. 17

3032 DATA 1. 88. 14. 3. 213

3033 DATA 237, 83, 246, 212. 6

3034 DATA 21. 237. 91, 246. 212

3035 DATA 197. 6. 8. 126. 167

3036 DATA 203. 39, 245, 48. 5

3037 DATA 62. 0. 195. 120. 212

3038 DATA 62. 56. 18. 241. 19

3039 DATA 16. 239. 229. 42. 246

3040 DATA 212. 1, 32. 0, 9

3041 DATA 34. 246. 212. 225. 193

3042 DATA 35, 16. 214. 209. 62

3043 DATA 6. 131. 95. 13. 32

3044 DATA 199. 201. 33. 250, 212

3045 DATA б. 63. 62. 255. 174

3046 DATA 119. 35, 16. 249. 24

3047 DATA 39. 33. 250. 212. 6
3046 DATA 63. 197. 126, 1. 0

3049 DATA 8. 167, 203, 31, 203

3050 DATA 17. 16. 250. 113. 193

3051 DATA 35. 16, 239, 6. 21

3052 DATA 33. 250. 212. 17. 36

3053 DATA 213, 76, 26, 119, 121

3054 DATA 16. 35, 19. 16. 247

3055 DATA 33. 250, 212, 205. 67

3056 DATA 212. 201, 33, 14, 213

3057 DATA 17, 250, 212. 6. 3
3056 DATA 197. 213. 229, 6. 10

3059 DATA 78. 26, 119. 121, 18

3060 DATA 43. 19, 16. 247. 225

3061 DATA 209. 1. 21. 0, 84

3062 DATA 93. 19. 9. 193. 16

3063 DATA 230. 24. 213. 0. 0

3064 DATA 0. 0, 0, 0. 255

3065 DATA 255, 255, 0. 0. 190

3066 DATA 190. 190, 190, 190, 190

3067 DATA 190. 190. 190, 190. 128

3068 DATA 254. 254. 254, 254, 254

3069 DATA 254. 254. 254. 0.0

3070 DATA 190, 0, 0, 0. 0




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Юмор - Дневник юзера Васи.
Попрошайкам - Подайте на клейрасил, пожалуйста!
Реклама - Реклама и объявления.
Связист - Обратная связь по письмам читателей.
MinskZXNet - "жизнь" сети.

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