• Martes 12 de Noviembre de 2024, 21:31

Autor Tema:  Realizar Dos Tareas A La Vez  (Leído 1696 veces)

Templar

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Realizar Dos Tareas A La Vez
« en: Lunes 27 de Diciembre de 2004, 18:47 »
0
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

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Realizar Dos Tareas A La Vez
« Respuesta #1 en: Lunes 27 de Diciembre de 2004, 19:19 »
0
Que te parece dibujar la pelota y la paleta uno depues de otro detro un mismo ciclo
Citar
     ciclo:
       call DibPelota
       call DibPaleta
       :
       :

Templar

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Realizar Dos Tareas A La Vez
« Respuesta #2 en: Martes 28 de Diciembre de 2004, 19:38 »
0
es cierto no se me habia ocurrido... lo pruebo y te cuento.