3
« en: Lunes 27 de Diciembre de 2004, 18:47 »
Vereis, me he puestoya con el arkanoid, de momento estoy haciendo q solo salga la pelota botando y la paleta de abajo para golpearla, tengo ya los dos procedimientos hechos, pero no consigo q funcione, me sale botando la bola pero la paleta no aparece...
El codigo q tengo hasta ahora es este:
-------------------------------------------------------------------------------------------------
.model small
.386
.stack
.data
VIDEO = 0A000H
DERECHA1_DOWN = 1FH
IZQUIERDA1_DOWN = 1EH
DERECHA1_UP = 9FH
IZQUIERDA1_UP = 9EH
TECLAFIN = 10H
posxbase_1 word 50
posybase_1 word 190
key1b_derecha word 0
key1b_izquierda word 0
tick byte 0
tecla_final byte 0
;variables pelota
coord_xpelota word 0
coord_ypelota word 100
vx word 1;(vx,vy) direccion que se mueve el rectangulo
vy word 1
.code
main proc
mov ax,@data
mov ds,ax
xor ax,ax
mov es,ax
mov eax,es:[8*4]
mov originaltiempo,eax
mov eax,es:[9*4]
mov originalteclado,eax
cli
mov word ptr es:[9*4],offset keyISR
mov es:[9*4+2],@code
mov word ptr es:[8*4],offset tiempoISR
mov es:[8*4+2],@code
sti
mov ax,VIDEO
mov es,ax
mov ax,13h
int 10h
call pelota
mov al,10 ;color para 1
mov bx,posxbase_1
mov dx,posybase_1
mov cx, 25
mov si, 10
call hbox
bucle_juego:
cmp tecla_final,1
je fin
cmp key1b_izquierda,1
jne c1
;borrar cuadrado q hay
mov al,0 ;color para 1
mov bx,posxbase_1
mov dx,posybase_1
mov cx, 25
mov si, 10
call hbox
;actualizar posicion
cmp posxbase_1,10 ; si llega a la izda no cambiaposx
je dibujar_todo
mov posxbase_1,bx
dec byte ptr posxbase_1
jmp dibujar_todo
c1:
cmp key1b_derecha,1
jne bucle_juego
cmp posxbase_1,250
je dibujar_todo ;no muevo
;borro
mov al,0 ;color para 2
mov bx,posxbase_1
mov dx,posybase_1
mov cx, 25
mov si, 10
call hbox
inc byte ptr posxbase_1
dibujar_todo:
mov al,0 ;color para 2
mov bx,posxbase_1
mov dx,posybase_1
mov cx, 25
mov si, 10
call hbox
mov al,10 ;color para 1
mov bx,posxbase_1
mov dx,posybase_1
mov cx, 25
mov si, 10
call hbox
mov tick,0 ;retardo
bucle1:
cmp tick,2
jb bucle1
jmp bucle_juego
fin:
;volver a modo texto
mov ah,0
mov al,3
int 10h
;recuperar interrupcion
xor ax,ax
mov es,ax
mov eax,originaltiempo
cli
mov es:[8*4],eax
sti
xor ax,ax
mov es,ax
mov eax,originalteclado
cli
mov es:[9*4],eax
sti
mov ah,4ch
int 21h
main endp
pelota proc
push coord_xpelota
push coord_ypelota
push vx
push vy
mov ax,@data
mov ds,ax
;--------CODIGO PELOTA-----
mov al,5 ;color para hbox
mov bx,coord_xpelota
mov dx,coord_ypelota
mov cx, 5
mov si, 5
call hbox
continuar:
;------------borrar cuadro
mov al,0 ;color para hbox
mov bx,coord_xpelota
mov dx,coord_ypelota
mov cx, 5
mov si, 5
call hbox
mov ax,vx
mov bx,vy
add coord_xpelota, ax
add coord_ypelota,bx
cmp coord_xpelota,315
je actvx
cmp coord_xpelota,0
je actvx
mov ax,posxbase_1
cmp coord_xpelota,ax
je rebota
cmp coord_ypelota,195
je actvy
cmp coord_ypelota,0
je actvy
sigue:
mov al,5 ;color para hbox
mov bx,coord_xpelota
mov dx,coord_ypelota
mov cx, 5
mov si, 5
call hbox
; jmp continuar
mov tick,0
bucle:
cmp tick,5
jb bucle
jmp continuar
;------Actualizar Vx,Vy-------
actvx:
neg vx
jmp sigue
actvy:
neg vy
jmp sigue
rebota:
mov ax,posybase_1
cmp coord_ypelota,ax
je actvy
jmp sigue
;---------------------------
pop vy
pop vx
pop coord_xpelota
pop coord_ypelota
ret
pelota endp
hlinea proc
push cx
push di
push si
mov di,dx
mov si,dx
shl si,8 ;fila*256
shl di,6 ;fila*64
;fila*256+fila*64=fila*320
add di,si
;fila*320+columna
add di,bx
;copiar color cx veces
cld
rep stosb
pop si
pop di
pop cx
ret
hlinea endp
hbox proc
push dx
push si
bucle:
call hlinea
inc dx
dec si
jnz bucle
pop si
pop dx
ret
hbox endp
originalteclado dword ?
keyISR proc far
sti
push ax
push ds
mov ax, @data
mov ds, ax
in al,60h
;xor ah,ah
cmp al,TECLAFIN
je finkey1
cmp al,DERECHA1_DOWN
je derecha1down
cmp al,DERECHA1_UP
je derecha1up
cmp al,IZQUIERDA1_DOWN
je izquierda1down
cmp al,IZQUIERDA1_UP
je izquierda1up
jmp finkeyISR
derecha1down:
mov key1b_derecha,1
jmp finkeyISR
izquierda1down:
mov key1b_izquierda,1
jmp finkeyISR
derecha1up:
mov key1b_derecha,0
jmp finkeyISR
izquierda1up:
mov key1b_izquierda,0
jmp finkeyISR
finkey1:
mov tecla_final,1
finkeyISR:
in al,61h
or al,80h
out 61h,al
xor al,80h
out 61h,al
mov al,20h
out 20h,al
pop ds
pop ax
iret
keyISR endp
originaltiempo dword ?
tiempoISR proc
inc tick
jmp originaltiempo
tiempoISR endp
end main
------------------------------------------------------------------------------------
Supongo q asi a lo bestia no me podreis decir gran cosa, pero si me pudieseis decir como hacer parar q a la vez q esta dibujando y moviendo la pelota, dibuje y mueva la paleta me hariais un favor
Gracias, salu2