Новичок
Джуниор
Регистрация: 18.06.2018
Сообщений: 1
|
Игра на assembler 8086
Задали в университете написать игру на языке ассемблер 8086, работающую в DOSBox.72. Выбрал для себя простейший раннер. нарисовал рисунок, с остальным не могу разобраться, препод помогать не хочет. Помогите, кто чем может, пожалуйста.
Рисунок:
Код:
code segment
assume cs:code, ds:data
jumps
begin:
mov ax, data
mov ds,ax
mov ah,0Fh
int 10h
push ax
mov ax, 0013h
int 10h
;==========
mov ax, data
mov ds,ax
push ds
mov Rectangle_X1, 0
mov Rectangle_Y1, 0
mov Rectangle_X2, 320
mov Rectangle_Y2, 200
mov Rectangle_Color, 15
call Rectangle
mov Rectangle_X1, 0
mov Rectangle_Y1, 151
mov Rectangle_X2, 320
mov Rectangle_Y2, 165
mov Rectangle_Color, 2
call Rectangle
mov Rectangle_X1, 45
mov Rectangle_Y1, 140
mov Rectangle_X2, 55
mov Rectangle_Y2, 151
mov Rectangle_Color, 6
call Rectangle
mov FillCircle_X, 25
mov FillCircle_Y , 140
mov FillCircle_R, 10
mov FillCircle_Color,55
call FillCircle
mov ah,02h
mov bh, 0
mov dh, 23
mov dl, 22
int 10h
mov dx, offset fio
mov ah,9h
int 21h
;==========
mov ax,0
int 16h
pop ax
mov ah,0
int 10h
mov ax,4c00h
int 21h
;-------------------------------------------------------
FillCircle proc
push ax
push bx
push cx
push dx
push di
push si
push es
push FillCircle_R
mov ax,0A000h ;установка es
mov es,ax ;на видеопамять
mov ax,FillCircle_R ;R*R
mul ax ;
mov dx,ax ;
push dx ;расчет di
inc FillCircle_R ;
mov ax,320 ;
mov bx,FillCircle_Y ;
sub bx,FillCircle_R ;
mul bx ;
mov cx,FillCircle_X ;
sub cx,FillCircle_R ;
add ax,cx ;
mov di,ax ;
pop dx ;
FillCircle_Draw:
push dx
mov ax,cx ;x
sub ax,FillCircle_X ;x-Xc
mul ax ;(x-Xc)^2
mov si,ax
mov ax,bx ;y
sub ax,FillCircle_Y ;y-Yc
mul ax ;(y-Yc)^2
add ax,si ;(x-Xc)^2 + (y-Yc)^2
pop dx
cmp ax,dx ;ax > R*R ?
ja FillCircle_Not_Draw ;если да
mov ah,FillCircle_Color
mov es:[di],byte ptr ah ;вывод точки
FillCircle_Not_Draw:
inc di
inc cx
mov ax,FillCircle_X
add ax,FillCircle_R
cmp cx,ax ;ограничение по Х
jne FillCircle_Draw
mov cx,FillCircle_X
sub cx,FillCircle_R
add di,320
sub di,FillCircle_R
sub di,FillCircle_R
inc bx
mov ax,FillCircle_Y
add ax,FillCircle_R
cmp bx,ax ;ограничение по Y
jl FillCircle_Draw
pop FillCircle_R
pop es
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
FillCircle endp
Rectangle proc
push ax
push bx
push cx
push dx
mov ah,0ch
mov bx,0
mov al,Rectangle_Color
mov cx,Rectangle_X1
mov dx,Rectangle_Y1
Rectangle_Label:
int 10h
inc cx
cmp cx, Rectangle_X2
jne Rectangle_Label
mov cx,Rectangle_X1
inc dx
cmp dx,Rectangle_Y2
jne Rectangle_Label
pop dx
pop cx
pop bx
pop ax
ret
Rectangle endp
code ends
data segment
FillCircle_X dw 0
FillCircle_Y dw 0
FillCircle_R dw 0
FillCircle_Color db 0
Rectangle_X1 dw 0
Rectangle_Y1 dw 0
Rectangle_X2 dw 0
Rectangle_Y2 dw 0
Rectangle_Color db 0
fio db 'Circle Running$'
data ends
end begin
Нужно движение шара вперёд и перепрыгивание прямоугольников. Буду очень благодарен за помощь.(желательно ещё счетчик завести, но с этим попробую сам справится)
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
Последний раз редактировалось Serge_Bliznykov; 18.06.2018 в 09:34.
|