Как написать игру для ZX Spectrum на ассемблере


         

вы найдете много общего. Собственно,


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

Составим блоки данных, включающих в себя по пять известных вам параметров для пяти различных окон, которые будут появляться на экране:

WIN0 DEFB 5,0,23,3,%01001110 WIN1 DEFB 8,6,17,13,%01010111 WIN2 DEFB 13,5,13,15,%01011110 WIN3 DEFB 13,9,13,11,%01101000 WIN4 DEFB 6,5,12,15,%01110101

Теперь перед обращением к процедурам SETW и CLSW достаточно в регистр IX записать адрес соответствующего блока и окно появится на экране. Напишем подпрограмму формирования окна заданных размеров и черной «тени» под ним:

WINDOW INC (IX) ;смещаем окно вправо (COL) INC (IX+1) ; и вниз (ROW) LD A,(IX+4) ;ATTR PUSH AF LD (IX+4),1 ;байт атрибутов для «тени» CALL SETW ;изменяем только атрибуты DEC (IX) ;возвращаем окно на прежнее место DEC (IX+1) POP AF LD (IX+4),A ;восстанавливаем байт атрибутов CALL CLSW ;очищаем окно CALL SETW ;окрашиваем заданным цветом CALL BOX ;рисуем рамку вокруг окна RET ; Подпрограмма, рисующая рамку вокруг окна BOX LD A,(IX+1) ;ROW PUSH AF CALL 3742 ;вычисляем адрес экрана LD A,L ADD A,(IX) ;COL LD L,A LD B,(IX+2) ;LEN BOX1 LD (HL),255 ;проводим верхнюю линию INC HL DJNZ BOX1 LD B,(IX+3) ;HGT POP AF BOX2 PUSH AF ;по точкам рисуем боковые линии ; сверху вниз PUSH BC CALL 3742 LD A,L ADD A,(IX) LD L,A LD B,8 BOX3 PUSH HL LD A,(HL) OR 128 ;левая точка LD (HL),A LD A,(IX+2) ADD A,L DEC A LD L,A LD A,(HL) OR 1 ;правая точка LD (HL),A POP HL INC H DJNZ BOX3 POP BC POP AF INC A DJNZ BOX2 DEC H LD B,(IX+2) ;LEN BOX4 LD (HL),255 ;проводим нижнюю линию INC HL DJNZ BOX4 RET

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

ORG 60000 ENT $ LD A,38 LD (23693),A LD A,4 CALL 8859 CALL BOLD

Затем сформируем окно, в которое должно быть помещено название игры (Рисунок  6.9), а в нижней части заставки напечатаем принятый в таких случаях текст «Select options 0 to 4» («Выберите опции от 0 до 4»). Поскольку к метке MENU программа будет неоднократно возвращаться из кадров, то чтобы избежать хаотического наложения окон, целесообразно каждый раз очищать экран.


Содержание  Назад  Вперед