Pelotita que rebota en la pantalla
Publicado por Gabriela (1 intervención) el 28/09/2006 03:54:18
Hola pues me dejaron un programa en ensamblador de una pelotita que va de arriba hacia abajo o de derecha a izquierda como sea pero que a la hora de rebotar la pelotita cambie de color y termina cuando salga de la pantalla, es decir que si esta rebotando de arriba hacia abajo, termina si se sale por la izquierda o derecha o si esta rebotando de izquierda a derecha, termina cuando se salga por arriba o por debajo, tengo un programa pero no lo puedo modificar como lo quiero, espero que alguien me pueda ayudar porque estoy desesperada y me urge mucho please se los agradeceria mucho mi correo es [email protected] porfitas ayudenme
Este es el programa que tengo:
.model small
.stack 0100h
.data
i dw 0h
arr db 1h
izq1 db 1h
der db 0h
abj db 0h
oldx dw 0h
oldy dw 0h
valx dw 140h
valy dw 0dch
Mensaje db "Pon version 0.2",0dh,0ah
db "Este es el ejemplo", 0dh,0ah
fin db "$"
.code
main proc
mov ax,@data
mov ds,ax
pon: mov ah,0h ; Iniciar Video 640 * 480
mov al,12h
int 10h
mov [word ptr i],145h ; Dibuja caja, lineas horizontales
mov cx,9dh
otrav: inc cx
mov dx,76h
call int10_C
mov dx,16ah
call int10_C
dec [word ptr i]
cmp [word ptr i],1h
ja otrav
mov [byte ptr i],0f5h ; Dibuja caja, lineas verticales
mov dx,75h
otrav2: inc dx
mov cx,9eh
call int10_C
mov cx,1e2h
call int10_C
dec [word ptr i]
cmp [word ptr i],1h
ja otrav2
loop1: call tok
call tok2
jz loop1 ;until keypressed *
mov ah,0h
mov al,3h
int 10h
mov ah,9h
mov dx, offset mensaje
int 21h
mov ah,4ch
int 21h
main endp
tok2 proc
cmp ax,78h
jbe colarr ;colision arriba
add ax,2
cmp ax,168h
jae colabj ;colision abajo
mov ax,[valx]
dec ax
cmp ax,0A0h
jbe colizq ;colision izquierda
add ax,2
cmp ax,1e0h
jae colder ;colision derecha
jmp definexy ;no hay colision
colarr: mov [byte ptr arr],0h
mov [byte ptr abj],1h
jmp definexy
colizq: mov [byte ptr der],1h
mov [byte ptr izq1],0h
jmp definexy
colabj: mov [byte ptr abj],0h
mov [byte ptr arr],1h
jmp definexy
colder: mov [byte ptr izq1],1h
mov [byte ptr der],0h
definexy: mov ah,[izq1] ; definexy: define valor x,y
mov al,[arr]
test ah,al
jz chk1
dec [word ptr valx]
dec [word ptr valy]
jmp delpunto
chk1: mov ah,[der]
mov al,[arr]
test ah,al
jz chk2
inc [word ptr valx]
dec [word ptr valy]
jmp delpunto
chk2: mov ah,[izq1]
mov al,[abj]
test ah,al
jz chk3
dec [word ptr valx]
inc [word ptr valy]
jmp delpunto
chk3: mov ah,[der]
mov al,[abj]
test ah,al
jz delpunto
inc [word ptr valx]
inc [word ptr valy] ; fin definexy
delpunto: call delpuntox
newdot: call newdotx
ret
tok2 endp
tok proc
mov ax,[valx] ; repeat *
mov [oldx],ax
mov ax,[valy]
mov [oldy],ax
mov ax,[valy] ; buscar colision
dec ax
ret
tok endp
delpuntox proc
mov ah,0ch ; borra viejo punto
mov al,0h
mov bh,0h
mov cx,[oldx]
mov dx,[oldy]
int 10h
ret
delpuntox endp
newdotx proc
mov ah,0ch ; dibuja nuevo punto
mov al,0fh
mov bh,0h
mov cx,[valx]
mov dx,[valy]
int 10h
mov cx,0h
mov dx,0FA0h
mov ah,86h
int 15h
mov ah,01h
int 16h
ret
newdotx endp
int10_C proc
mov ah,0ch
mov bh,0h
mov al,0fh
int 10h
ret
int10_C endp
end main
Este es el programa que tengo:
.model small
.stack 0100h
.data
i dw 0h
arr db 1h
izq1 db 1h
der db 0h
abj db 0h
oldx dw 0h
oldy dw 0h
valx dw 140h
valy dw 0dch
Mensaje db "Pon version 0.2",0dh,0ah
db "Este es el ejemplo", 0dh,0ah
fin db "$"
.code
main proc
mov ax,@data
mov ds,ax
pon: mov ah,0h ; Iniciar Video 640 * 480
mov al,12h
int 10h
mov [word ptr i],145h ; Dibuja caja, lineas horizontales
mov cx,9dh
otrav: inc cx
mov dx,76h
call int10_C
mov dx,16ah
call int10_C
dec [word ptr i]
cmp [word ptr i],1h
ja otrav
mov [byte ptr i],0f5h ; Dibuja caja, lineas verticales
mov dx,75h
otrav2: inc dx
mov cx,9eh
call int10_C
mov cx,1e2h
call int10_C
dec [word ptr i]
cmp [word ptr i],1h
ja otrav2
loop1: call tok
call tok2
jz loop1 ;until keypressed *
mov ah,0h
mov al,3h
int 10h
mov ah,9h
mov dx, offset mensaje
int 21h
mov ah,4ch
int 21h
main endp
tok2 proc
cmp ax,78h
jbe colarr ;colision arriba
add ax,2
cmp ax,168h
jae colabj ;colision abajo
mov ax,[valx]
dec ax
cmp ax,0A0h
jbe colizq ;colision izquierda
add ax,2
cmp ax,1e0h
jae colder ;colision derecha
jmp definexy ;no hay colision
colarr: mov [byte ptr arr],0h
mov [byte ptr abj],1h
jmp definexy
colizq: mov [byte ptr der],1h
mov [byte ptr izq1],0h
jmp definexy
colabj: mov [byte ptr abj],0h
mov [byte ptr arr],1h
jmp definexy
colder: mov [byte ptr izq1],1h
mov [byte ptr der],0h
definexy: mov ah,[izq1] ; definexy: define valor x,y
mov al,[arr]
test ah,al
jz chk1
dec [word ptr valx]
dec [word ptr valy]
jmp delpunto
chk1: mov ah,[der]
mov al,[arr]
test ah,al
jz chk2
inc [word ptr valx]
dec [word ptr valy]
jmp delpunto
chk2: mov ah,[izq1]
mov al,[abj]
test ah,al
jz chk3
dec [word ptr valx]
inc [word ptr valy]
jmp delpunto
chk3: mov ah,[der]
mov al,[abj]
test ah,al
jz delpunto
inc [word ptr valx]
inc [word ptr valy] ; fin definexy
delpunto: call delpuntox
newdot: call newdotx
ret
tok2 endp
tok proc
mov ax,[valx] ; repeat *
mov [oldx],ax
mov ax,[valy]
mov [oldy],ax
mov ax,[valy] ; buscar colision
dec ax
ret
tok endp
delpuntox proc
mov ah,0ch ; borra viejo punto
mov al,0h
mov bh,0h
mov cx,[oldx]
mov dx,[oldy]
int 10h
ret
delpuntox endp
newdotx proc
mov ah,0ch ; dibuja nuevo punto
mov al,0fh
mov bh,0h
mov cx,[valx]
mov dx,[valy]
int 10h
mov cx,0h
mov dx,0FA0h
mov ah,86h
int 15h
mov ah,01h
int 16h
ret
newdotx endp
int10_C proc
mov ah,0ch
mov bh,0h
mov al,0fh
int 10h
ret
int10_C endp
end main
Valora esta pregunta
0