⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jimu_asm.txt

📁 积木游戏汇编语言
💻 TXT
📖 第 1 页 / 共 2 页
字号:
data  segment
      pcid      = 0
      partbc  = 0000b
      partfc  = 1111b
      poolfc  = 0000b
      poolbc  = 0000b
      rectw = 13
      poolh = 25
      poolw =16

  spart   struc
        k       db      -1
        rs      db      0
                db      0
                db      0
                db      0
                db      0
                db      0
        x       db      0
        y       db      0
  spart   ends
  ;---------------------
      part0     spart   <-1>
      part1     spart   <-1>
      part2     spart   <-1>
      part3     spart   <-1>

      parts     spart   <0, 1,0,  0,1, 1,1, 4,0>
      parts1    spart   <1, -1,0, 1,0, 0,1, 4,0>
      parts2    spart   <2, -1,0, 1,0, 1,1, 4,0>
      parts3	  spart	<3, -1,0, 1,0,1,1, 4,0>
      parts4	  spart	<4, -1,0, 0,1, 1,1, 4,0>
      parts5	  spart	<5, -1,0, 0,1, 1,1, 4,0>
      parts6    spart   <6, -1,0, 1,0, 2,0, 4,0>
      parts7    spart   <7,  0,1, 0,2, 0,3, 4,0>

      map       dw      poolh dup(0),0
      eline     db      0, 4  dup  (-1)
      count     db      0
      ess       dw      ?
      bxx       dw      ?
      lowest    db      0 ;no.of map
      nrandax	db	?
      vicd	db	0
      noteadd   dw      ?
      
      stepval   db      19
      key       db      -1
		db	-1
      _px = 245
      _py = 100
      _lpx = 179;557
      _lpy = 100

data ends
;**********************************************
code  segment
;--------------------------------------

p2s     macro   ppx,ppy,ssx,ssy
        push    ax
        push    bx
        mov     al, ppx
      
        mov     bl, rectw
        imul     bl
        add     ax, _px
        mov     ssx, ax
        mov     al, ppy
       
        mov     bl, rectw
        imul     bl
        add     ax, _py
        mov     ssy, ax
        pop     bx
        pop     ax
        endm
;--------------------------------------
initg   macro  mode
        mov     ah,0
        mov     al,mode
        int     10h
        ;-----------
        mov     ah,0bh
        mov     bh,0
        mov     bl,poolbc
        int     10h
        ;--------------
        mov     ah,0bh
        mov     bx,0100h
        int     10h
        endm
;--------------------------------------
drawbar macro ww,hh,col
        local   verte,horie
        mov     ax,col
        mov     ah,0ch
        sub     bx,bx
        dec     cx
        dec     dx
 verte: inc     bx
        inc     dx
        push    bx
        sub     bx,bx
 horie: inc     bx
        inc     cx
        int     10h
        cmp     bx,ww
        jb      horie
        pop     bx
        sub     cx,ww
        cmp     bx,hh
        jb      verte
        endm
;--------------------------------------
drawfra macro   ww,hh,col
        local   htop,hbot,vrig,vlef
        push    si
        push    di
        mov     si,ww
        mov     di,hh
        dec     si
        dec     di
        mov     ah, 0ch
        mov     al, col
        sub     bx, bx
   htop:inc     bx
        inc     cx
        int     10h
        cmp     bx, si
        jb      htop
        sub     bx, bx
   vrig:mov ah,0ch
	mov al,col
	inc     bx
        inc     dx
        int     10h
        cmp     bx, di
        jb      vrig
        sub     bx, bx
   hbot:inc     bx
        dec     cx
        int     10h
        cmp     bx, si
        jb      hbot
        sub     bx, bx
   vlef:inc     bx
        dec     dx
        int     10h
        cmp     bx, di
        jb      vlef
        pop     di
        pop     si

        endm
;--------------------------------------

;------------------------------------------
modmapm	macro	nnn
	local   hamp1, hamp2, jmpadd3, jmpadd4, modmap, hampn

	mov     di, 0
  	mov     si, 1
  hamp2:mov     cl, byte ptr part&nnn[si] ;  x  :col
        cmp	si, 7
	je	jmpadd3
	add     cl, part&nnn.x
jmpadd3:mov     bh, byte ptr part&nnn[si+1] ; y :row
        cmp	si, 7
	je	jmpadd4
	add     bh, part&nnn.y
jmpadd4:mov     bl, poolh-1
        sub     bl, bh
        sub     bh, bh
	shl	bl, 1
        cmp     bl, lowest
        jnl     modmap
        mov     lowest, bl
 modmap:;shr	bl, 1
	mov     ax, 1
        shl     ax, cl
        or      ax, map[bx]
        mov     map[bx], ax

  hampn:add     si, 2
        cmp     si, 9
        jl      hamp2

	endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
main  proc   far
      assume cs:code, ds:data, es:data
start:
      push  ds
      sub   ax, ax
      push  ax

      mov   ax, data
      mov   ds, ax
      mov   es, ax

      initg   12H
      call   setirq
   
resta:cli
      
      mov 	cx, _px
      mov 	dx, _py
      call    	drawscr
      cmp 	key[1], 1
      je	endmain
      ;init data
      mov       count, 0
      sub       si, si
mapnt:mov       map[si], 0      ;0 => map[]
      add       si, 2
      cmp       si, poolh*2
      jne       mapnt
      
nostart:
      call      wreadk
      mov       key, -1
      mov       key[1], -1
      call      pdnew

while1:sti
      cmp       key, -1
      jne       stepkey

      mov       dl, count       ;no key
      cmp       dl, stepval
      jbe       while1           ;not to time
      mov       count, 0
stepkey:
      cmp     key, 1bh         ;esc
      je      endmain
      call    dealkey
      call    check
      mov       ax, map[2*poolh-2] ; is died?
      mov       cl, 4
      shr       ax, cl
      jnc       while1
      jmp	resta
endmain:
      call      quit
      ret
main  endp
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
;------------------------
setirq  proc    near
        mov     al, 1ch   ;get irt vector
        mov     ah, 35h
        int     21h
        mov     ess, es        ;save irt vector
        mov     bxx, bx
        
        push    ds
        mov     dx, offset scankey    ;irq function
        mov     ax, seg    scankey
        mov     ds, ax
        mov     al, 1ch
        mov     ah, 25h
        int     21h
        cli
        pop     ds

        in      al, 21h    ;set irq
        and     al, 0feh
        out     21h,al

        ret
setirq  endp
;-----------------------------
scankey proc near

        push    ax
        push    ds
        mov     ax, data
        mov     ds, ax

        sti
 rekeyy:add     count, 1
        call     nwreadk
        cmp      key, -1
        je      ireturn
   ireturn:
        cli
        mov     al, 20h         ;EOI
        out     20h,al
        pop     ds
        pop     ax
        iret
scankey endp
;-------------------------------------
wreadk	 proc	near		;readkey to al(ascii),ah(scan)

        mov     ah, 0
	int	16h
	mov	key, al	;ascii
	mov	key[1], ah	;scan code
	mov	ax, 0c00h
	int	21h		;clear buf
	ret
wreadk	 endp
;-------------------------------------
nwreadk proc  near

	mov	ah, 1
	int	16h
	jz 	nokeyin
	mov	key, al	;ascii
	mov	key[1], ah	;scan code
	mov	ax, 0c00h
	int	21h
	jmp	endnwreadk
nokeyin:
	mov	key, -1
	mov	key[1], -1
endnwreadk:
	ret
nwreadk endp
;-------------------------------------
drawscr proc    near
        ;-------------------draw pool
        mov     cx, _px
        mov     dx, _py
        drawbar poolw*rectw,poolh*rectw,poolfc
        mov     cx, _px-2
        mov     dx, _py-2
        mov     si, poolw*rectw
        mov     di, poolh*rectw
 dsag:  add     si, 4
        add     di, 4
        drawfra si,di,partbc
        sub     cx, 2
        sub     dx, 2
        cmp     si, poolw*rectw+20
        jne     dsag

	mov	cx,_lpx
	mov	dx,_lpy
        ;drawbar rectw+6,rectw*poolh,poolfc
	mov     cx, _lpx-1
        mov     dx, _lpy-1
        mov     si, rectw+6
        mov     di, rectw*poolh
        ret
drawscr endp
;--------------------------------------
drawrect proc near
;transfer coeff: al(x),ah(y),bl(show)
;use ax,bx,cx,dx
        push    cx
        push    dx
        push    bx
        mov     bx, ax
  p2s     bl,bh,cx,dx
        pop     bx
        push    bx
        cmp     bl, 0
        je      erase
  drawfra rectw,rectw,partbc
        inc     cx
        inc     dx
  drawbar rectw-2,rectw-2,partfc
        jmp     enddr
  erase:drawbar rectw,rectw,poolfc
  enddr:pop     bx
        pop     dx
        pop     cx

        ret
drawrect endp
;--------------------------------------
drawpart proc near
        push    ax
        push    si
        mov     al, part0.k
        cmp     al, -1
        je      drawp2
        ;---------make p0 dispear
        mov     si, 0
        mov     bl, 0
   dp11:mov     al, part0.rs[si]
        mov     ah, part0.rs[si+1]
        add     al, part0.x
        add     ah, part0.y
        call    drawrect
        add     si, 2
        cmp     si, 6
        jb      dp11
        mov     al, part0.rs[si]
        mov     ah, part0.rs[si+1]
        call    drawrect
        ;-----------show part1
 drawp2:mov     al,part3.k
        cmp     al,-1
        je      drawp3
        sub     si, si
        mov     bl, 0
   dp44:mov     al, part3.rs[si]
        mov     ah, part3.rs[si+1]
        add     al, poolw+12
        add     ah, 0
        call    drawrect
        add     si, 2
        cmp     si, 6
        jb      dp44
        mov     al, poolw+12
        mov     ah, 0
        call    drawrect
 drawp3:sub     si, si
        mov     bl, 1
   dp33:mov     al, part2.rs[si]
        mov     ah, part2.rs[si+1]
        add     al, poolw+12
        add     ah, 0
        call    drawrect
        add     si, 2
        cmp     si, 6
        jb      dp33
        mov     al, poolw+12
        mov     ah, 0
        call    drawrect
 drawp1:sub     si, si
        mov     bl, 1
   dp22:mov     al, part1.rs[si]
        mov     ah, part1.rs[si+1]
        add     al, part1.x
        add     ah, part1.y
        call    drawrect
        add     si, 2
        cmp     si, 6
        jb      dp22
        mov     al, part1.rs[si]
        mov     ah, part1.rs[si+1]
        call    drawrect

        pop     si
        pop     ax
        ret
drawpart endp
;--------------------------------------
dealkey proc    near
        push    ax
        push    si

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -