PRINCIPAL
Main
PROC FAR
mov ax,@DATA
mov ds,ax
call Quita
Pre:
call Portada
cmp Salida,0
je FinJuego
call Presentacion
call Inicializar
Juego:
cmp Estado,2
je GameO
call Refresco
call Teclado
call Desplazar
call Pausa
jmp Juego
GameO:
call GameOver
jmp Pre
FinJuego:
call Pon
mov ax,4c00h
int 21h
Main
ENDP
2. INICIALIZAR
Inicializar
PROC NEAR
mov bx,0
mov cx,0
Otra:
cmp cx,Largo
je FinI
mov Snake[bx].x,0 ;40
mov Snake[bx].y,25 ;12
add bx,2
inc cx
jmp Otra
FinI:
mov Snake[0].x, 40
mov Snake[0].y, 12
mov Estado,0
mov Puntos,0
mov _x,40
mov _y,12
mov ix,-1
mov iy,0
mov Largo,3
Inicializar
ENDP
3. COLISION:
Proceso que comprueba la colisin de la cabeza de la serpiente con la comida, paredes o
consigo misma.
mov ah,08h
mov bh,0
int 10h
cmp al,' '
je Salir
cmp al,'X'
je SalirA
mov Estado,2
jmp Salir
SalirA:
inc Puntos
cmp Largo,MAX_TAM-2
jge Salir
mov ax, Largo
add ax, 3
mov Largo, ax
Salir: ret
Colision ENDP
4. REFRESCO:
Esta Subrutina mientras recorre el array Snake con ndice bx, pone en pantalla un trozo de la
serpiente en las coordenadas x,y almacenadas en el indice bx del array Snake.
mov ah,02h
mov bh,0
mov dl,Snake[0].x
mov dh,Snake[0].y
int 10h
call Colision
mov ah,02h
mov dl,'#'
int 21h
mov bx,2
mov di,1
mov cx,Largo
dec cx
BucleR:
cmp di,cx
je FinRefresco
mov ah,02h
mov dl,Snake[bx].x
mov dh,Snake[bx].y
push bx
mov bh,0
int 10h
pop bx
mov ah,02h
mov dl,'*'
int 21h
add bx,2
inc di
jmp BucleR
FinRefresco:
mov ah,02h
add bx,2
mov dl,Snake[bx].x
mov dh,Snake[bx].y
mov bx,0
int 10h
;Pagina 0
mov ah,02h
mov dl,' '
int 21h
pop di
pop cx
pop dx
pop bx
pop ax
ret
Refresco
ENDP
5. MOVIMIENTO
Subrutina Teclado, mira si se ha pulsado alguna tecla de cursor: Si se ha pulsado alguna tecla
de cursor se actualiza el tipo de incremento x o y (ix,iy) y se actualizan tambien las
coordenadas x,y con tales incrementos si no se ha pulsado una tecla solo se actualizan las
coordenadas x,y.
Teclado
PROC NEAR
push ax
push bx
mov bl,ix
mov bh,iy
mov ah,01h
int 16h
jz FinTeclado
mov ah,0
int 16h
cmp al,0
jne FinTeclado
cmp ah,48h
je Up
cmp ah,50h
je Down
cmp ah,4dh
je Right
cmp ah,4bh
je Left
jmp FinPulsacion
Up:
mov bl,0
mov bh,-1
jmp FinPulsacion
;Actualizamos ix,iy
Down:
mov bl,0
mov bh,1
jmp FinPulsacion
;Actualizamos ix,iy
Right:
mov bl,1
mov bh,0
jmp FinPulsacion
;Actualizamos ix,iy
Left:
mov bl,-1
mov bh,0
jmp FinPulsacion
;Actualizamos ix,iy
FinPulsacion:
mov ix,bl
mov iy,bh
FinTeclado:
add _x,bl
add _y,bh
pop bx
pop ax
ret
Teclado
ENDP