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

📄 积木.asm

📁 汇编语言编写的类似俄罗斯方块的游戏程序
💻 ASM
📖 第 1 页 / 共 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
        SUB     SI, SI
 p1top0:MOV     AL, BYTE PTR part1[SI]
        MOV     BYTE PTR part0[SI], AL
        INC     SI
        CMP     SI,9
        JNE     p1top0
        ;---------------what key?
        MOV     AL, key[1]
        CMP     AL, -1
        JNE     nonull
 movdown:ADD     part1.y, 1      ;no key
        JMP     enddeal
 nonull:CMP	AL, 39h		;space
	   JNE	nospace
	   CALL speedup
	   JMP	enddeal
 nospace:CMP     AL, 4bh         ;left
          JNE     noleft
          SUB     part1.x, 1
 noleft:CMP     AL, 4dh         ;right
        JNE     norigt
        ADD     part1.x, 1
 norigt:CMP     AL, 50h         ;down
        JE     isupdw
	    CMP     AL, 48h         ;up
        JE      isupdw
	    JMP	enddeal
 isupdw:MOV     AL, part1.k
        CMP     AL, 0
        JE      enddeal
        CMP     AL, 5
        JLE      roll15
;-------------rote67
        SUB     SI, SI
        MOV     AL, part1.k
        CMP     AL, parts6.k
        JE     r6_7
  r7_6:                   ;7->6
        MOV     AL, BYTE PTR parts6[SI]
        MOV     BYTE PTR part1[SI], AL
        INC     SI
        CMP     SI, 7
        JNE     r7_6
        JMP     enddeal
  r6_7: MOV     AL, BYTE PTR parts7[SI]
        MOV     BYTE PTR part1[SI], AL
        INC     SI
        CMP     SI, 7
        JNE     r6_7
        JMP     enddeal

 roll15:CALL    roll
 enddeal:
        POP     SI
        POP     AX
        RET
dealkey ENDP
;--------------------------------------
roll    PROC    NEAR     ;up
        PUSH    AX
        PUSH    SI
        MOV     SI, 1
 rone:  MOV     AX, WORD PTR part1[SI]
        XCHG    AH, AL
        NEG     AL
        MOV     WORD PTR part1[SI], AX
        ADD     SI, 2
        CMP     SI, 7
        JNE     rone
        POP     SI
        POP     AX
        RET
roll    ENDP
;--------------------------------------
check   PROC    NEAR 
        PUSH    DI
        PUSH    SI
	  PUSH	CX
        PUSH    BX
        PUSH    AX
        MOV     SI, 1
  inpn: SUB     BX, BX
	MOV     CL, BYTE PTR part1[SI] ; check x
        CMP	SI, 7
	JE	jmpadd1
	ADD     CL, part1.x
  jmpadd1:CMP	CL, 0
        JL      notinp
        CMP     CL, poolw
        JNL     notinp    ;good  x
        MOV     BL, BYTE PTR part1[SI+1] ;check y
        CMP	SI, 7
	JE	jmpadd2
	ADD     BL, part1.y
   jmpadd2:CMP	BL, 0
        JL      notinp     ;good y
        CMP     BL, poolh
        JZ      hamp1	
        SUB	BL, poolh-1
	 NEG     BL
        INC     CL
	 SHL	BL, 1
	 SUB	BH, BH
        MOV     AX, map[BX]
        SHR     AX, CL
        JNC      nohamp
         CMP     key[1], 4bh        ;left
	 JE	notinp
        CMP     key[1], 4dh        ;right
	 JE	notinp
	   JMP	hamp1
nohamp: ADD     SI, 2
        CMP     SI, 9
        JNE     inpn
        CALL    drawpart
        JMP     endchec        
 notinp:CALL	movp0_1
        JMP     endchec         
hamp1:
	CLI
	modmapm	0
      CALL sound
      CALL    pdnewp
      STI
endchec:MOV	key, -1
	MOV	key[1], -1
	POP     AX
        POP     BX
	POP	CX
        POP     SI
        POP     DI

        RET
check   ENDP
;--------------------------------------
movp0_1 PROC NEAR         
	PUSH	SI
	PUSH	AX
 notinp11:MOV     SI, 0
 notinp22:MOV    AL, BYTE PTR part0[SI]
        MOV     BYTE PTR part1[SI], AL
        INC     SI
        CMP     SI, 9 
        JNE     notinp22
	POP	AX
	POP	SI
	RET
movp0_1 ENDP
;--------------------------------------
pdnew  PROC NEAR         
	MOV	lowest,0
	CALL	drawmap
      MOV	nrandax,8
	 CALL    randax
        MOV     CL,AL
        SUB     SI,SI
        MOV     BL,TYPE spart
        MUL     BL
        MOV     DX,AX
        MOV     AL,CL
        ADD     AL,4
        CMP     AL,7
        JLE     wnext
        SUB     AL,8
wnext:  MUL     BL
        MOV     BX,AX
movent1:
        MOV     AL,BYTE PTR parts[BX][SI]
        MOV     BYTE PTR part2[SI],AL
        INC     SI
        CMP     SI,9
        JNE     movent1
        MOV     BX,DX
        SUB     SI,SI
movent2:
        MOV     AL,BYTE PTR parts[BX][SI]
        MOV     BYTE PTR part1[SI],AL
        INC     SI
        CMP     SI,9
        JNE     movent2
        MOV     part0.k,-1
        MOV     part3.k,-1
        CALL    drawpart
        MOV     lowest,poolh*2
        RET
pdnew 	ENDP
;---------------------------------------
pdnewp  PROC    NEAR
      JMP	drawh
      MOV	lowest, 0
	CALL	drawmap
drawh:
      SUB	SI,SI
wnex: SHR	SI,1
      DEC	SI
      MOV	AX,SI
      MOV	nrandax,8
      CALL      randax
      SUB       SI,SI
      MOV       BL,TYPE spart
      MUL       BL
      MOV       BX,AX
movnt:MOV       AL,BYTE PTR part2[SI]
      MOV       BYTE PTR part1[SI],AL
      MOV       BYTE PTR part3[SI],AL
      MOV       AL,BYTE PTR parts[BX][SI]
      MOV       BYTE PTR part2[SI],AL
      INC       SI
      CMP       SI, 9
      JNE       movnt
      MOV	part0.k, -1
      CALL      drawpart
      MOV       lowest, poolh*2
      RET
pdnewp  ENDP
;--------------------------------------
upgrade PROC	NEAR
	PUSH	AX
	PUSH	DX
      CMP	stepval, 1
	JE	endupg     
	DEC	stepval
	MOV	BH, 0
	MOV	DX, 0b38h	
endupg: POP	DX
	POP	AX
	RET
upgrade ENDP
;--------------------------------------
drawmap PROC    NEAR   
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
	  PUSH	SI
    MOV     AL, lowest
	SUB	AH, AH
	MOV	SI, AX
	SUB	SI, 2
 nt_row:ADD     SI, 2       
        MOV     CL, 0
        MOV     AX, map[SI]
 nt_col:INC     CL
        SHR     AX, 1      
        PUSH    CX
        PUSH    AX
        JC      show__rect
        MOV     AX, poolh-1
        SHR     SI, 1
        SUB     AX, SI
        SHL     SI, 1
        MOV     AH, AL
        DEC     CL
        MOV     AL, CL
        MOV     BL, 0
        CALL    drawrect       
        JMP     chg_cmp
 show__rect:
        MOV     AX, poolh-1
        SHR     SI, 1
        SUB     AX, SI
        SHL     SI, 1
        MOV     AH, AL
        DEC     CL
        MOV     AL, CL
        MOV     BL, 1
        CALL    drawrect       
 chg_cmp:POP    AX
        POP     CX
        CMP     CL, poolw
        JNE     nt_col
        CMP     SI, 2*poolh-2
        JNE     nt_row
 endmap:
	POP	SI
	POP     DX
        POP     CX
        POP     BX
        POP     AX
        RET
drawmap ENDP
;--------------------------------------
speedup PROC NEAR
	CLI
	SUB	SI, SI
	MOV	DX, poolh+1
nextrect:	ADD	SI, 2
	MOV	AH, BYTE PTR part1[SI]
	CMP	SI, 8
	JE	noaddy
	ADD	AH, part1.y
noaddy:	MOV	CL, BYTE PTR part1[SI-1]
	CMP	SI, 8
	JE	noaddx
	ADD	CL, part1.x
noaddx:	MOV	BX, 1
	SHL	BX,  CL	
	MOV	AL, poolh-1
	SUB	AL, AH
	SUB	AH, AH
	SHL	AX, 1
	MOV	DI, AX	
nextline1:
	MOV	AX, map[DI-2]
	AND	AX, BX
	JNZ	stop1	; hamp
	SUB	DI, 2
	JNE	nextline1
stop1:	SHR	DI, 1
	SUB	DI, poolh-1
	NEG	DI
        MOV     AL, BYTE PTR part1[SI]
	CMP	SI, 8
	JE	noaddyy
	ADD	AL, part1.y
noaddyy:
        MOV     AH, 0
        SUB     DI, AX
	CMP	DX, DI
	JNA	nt33
	MOV	DX, DI
nt33:
	CMP	SI, 8
	JNE	nextrect
	ADD	part1.y, DL
      CALL	drawpart
	modmapm	1
	CALL sound
	CALL	pdnewp
        STI
      RET
speedup ENDP
;--------------------------------------
randax  PROC    NEAR                
        PUSH    CX
        PUSH    DX
        MOV     AH, 0
        INT     1ah
        SUB     AH, AH
        MOV     AL, DL
        MOV     DL, nrandax
        DIV     DL
        MOV     AL, AH
        SUB     AH, AH
        POP     DX
        POP     CX
        RET
randax  ENDP
;---------------------------------
sound   PROC    NEAR

      PUSH      AX
      PUSH      BX
      PUSH      CX
      PUSH      DI

      MOV   DI, 100
      MOV   AL, 0b6h
      OUT   43h,AL
again:
      MOV DX,12h
      MOV AX,533h*896
      ADD DI,50
      DIV DI
      OUT 42h,AL
      MOV AL,AH
      OUT 42h,AL
      IN AL,61h
      MOV AH,AL
      OR AL,3
      OUT 61h,AL
      MOV BX,200
wait12:MOV CX,2801
dely :LOOP dely
      DEC BX
      JNZ wait12
      MOV AL,AH
      OUT 61h,AL
      
      CMP DI, 500
      JNE  again

      POP       DI
      POP       CX
      POP       BX
      POP       AX
        RET
sound   ENDP
;--------------------------------------
quit    PROC    NEAR
        CLI
        MOV     DX, bxx      
        MOV     DS, ess
        MOV     AL, 1ch
        MOV     AH, 25h
        INT     21h

        MOV     AH,0
        MOV     AL,3
        INT     10h
        RET
quit    ENDP
;--------------------------------------
code  ENDS
      END start

⌨️ 快捷键说明

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